so sieht die class jetzt aus.
Delphi-Quellcode:
ISkinMagnetic =
interface
['
{A00CB8B3-8433-4C58-9115-1845B29B3FF0}']
function GetSnapWidth: Integer;
procedure SetSnapWidth(
const Value: Integer);
property SnapWidth: Integer
read GetSnapWidth
write SetSnapWidth;
function AddMagneticWindow(
Handle: HWND; hWndParent: HWND): Boolean;
function RemoveMagneticWindow(
Handle: HWND): Boolean;
function SetFullWindowDrag(HWND: DWORD; ShowFullWindow: Boolean): Boolean;
function zSubclass_Proc(
var Wnd: HWND;
var Msg: UINT;
var wParam: wParam;
var lParam: lParam): LRESULT;
end;
TMagnetic =
class(TInterfacedPersistent, ISkinMagnetic)
constructor Create;
destructor Destroy;
override;
private
FSnapWidth: Integer;
m_uWndInfo:
array of TWND_INFO;
m_rcWnd:
array of TRect;
m_lWndCount: Integer;
m_ptAnchor: TPOINT;
m_ptOffset: TPOINT;
m_ptCurr: TPOINT;
m_ptLast: TPOINT;
lOldSetting: Integer;
function GetSnapWidth: Integer;
procedure SetSnapWidth(
const Value: Integer);
procedure pvSizeRect(
Handle: HWND;
var rcWnd: TRect; lfEdge: Integer);
procedure pvMoveRect(
Handle: HWND;
var rcWnd: TRect);
procedure pvCheckGlueing;
function pvWndsConnected(
const rcWnd1, rcWnd2: TRect): Boolean;
function pvWndGetInfoIndex(
Handle: HWND): Integer;
function pvWndParentGetInfoIndex(hWndParent: HWND): Integer;
function zSubclass_Proc(
var Wnd: HWND;
var Msg: UINT;
var wParam: wParam;
var lParam: lParam): LRESULT;
function getWND_INFO(aHandle: HWND;
var Wnd_info: TWND_INFO): Boolean;
function AddWindow(
Handle: HWND; hWndParent: HWND): Boolean;
public
function AddMagneticWindow(
Handle: HWND; hWndParent: HWND): Boolean;
function RemoveMagneticWindow(
Handle: HWND): Boolean;
property SnapWidth: Integer
read GetSnapWidth
write SetSnapWidth;
function SetFullWindowDrag(HWND: DWORD; ShowFullWindow: Boolean): Boolean;
end;
var
MagneticWnd: ISkinMagnetic;
Es war zwingend nötig die zSubclass_Proc in das Interface mit zu übernehmen.
Ich habe diese aber an letzter stelle gesetzt so muss ich die in dem öffentlichen Interface nicht integrieren.
Das sieht dann so aus.
Delphi-Quellcode:
ISkinMagnetic =
interface
['
{A00CB8B3-8433-4C58-9115-1845B29B3FF0}']
function GetSnapWidth: Integer;
procedure SetSnapWidth(
const Value: Integer);
property SnapWidth: Integer
read GetSnapWidth
write SetSnapWidth;
function AddMagneticWindow(
Handle: HWND; hWndParent: HWND): Boolean;
function RemoveMagneticWindow(
Handle: HWND): Boolean;
function SetFullWindowDrag(HWND: DWORD; ShowFullWindow: Boolean): Boolean;
end;
Durch die Umlenkung der TSubClass_Proc sind zusätzliche messagen\events in Formen oder in
NonVCl erstellten Fenstern nicht mehr nötig.
gruss