Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#6

AW: proceduren (Events) aus Interface

  Alt 5. Sep 2016, 05:16
Danke dir werde es mal versuchen..

Zitat:
// Implementierung (in der DLL soweit ich verstanden habe)
Nein.. In der Anwendung.

Ich poste mal den richtigen Code..
Macht sonst keinen sinn.

Mein Interface in der DLL.
Delphi-Quellcode:
  ISkinMagnetic = interface
    ['{A00CB8B3-8433-4C58-9115-1845B29B3FF0}']
    function GetSnapWidth: Integer;
    procedure SetSnapWidth(const Value: Integer);
    function AddWindow(Handle: HWND; hWndParent: HWND; var FuncPointer : TSubClass_Proc): Boolean;
    property SnapWidth: Integer read GetSnapWidth write SetSnapWidth;
    function RemoveWindow(Handle: HWND): Boolean;
    function SetFullWindowDrag(hwnd: DWORD; ShowFullWindow: Boolean): Boolean;
    procedure MagneticWindowDestroy;
    procedure WMEnterSizeMove(var Msg: TMessage);
    procedure WMSizing(var Msg: TMessage);
    procedure WMMoving(var Msg: TMessage);
    procedure WMExitSizeMove(var Msg: TMessage);
    procedure WMSysCommand(var Msg: TMessage);
    procedure WMCommand(var Msg: TMessage);
    procedure zSubclass_Proc(lng_hWnd: HWND;
                             uMsg, wParam, lParam: Integer;
                             var lReturn: Integer;
                             var bHandled: Boolean);
  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(rcWnd1: TRECT; rcWnd2: TRECT): Boolean;
    function pvWndGetInfoIndex(Handle: HWND): Integer;
    function pvWndParentGetInfoIndex(hWndParent: HWND): Integer;
    procedure WMEnterSizeMove(var Msg: TMessage);
    procedure WMSizing(var Msg: TMessage);
    procedure WMMoving(var Msg: TMessage);
    procedure WMExitSizeMove(var Msg: TMessage);
    procedure WMSysCommand(var Msg: TMessage);
    procedure WMCommand(var Msg: TMessage);
   public
    function AddWindow(Handle: HWND; hWndParent: HWND; var FuncPointer : TSubClass_Proc): Boolean;
    function RemoveWindow(Handle: HWND): Boolean;
    procedure CheckGlueing;
    property SnapWidth: Integer read GetSnapWidth write SetSnapWidth;
    function SetFullWindowDrag(hwnd: DWORD; ShowFullWindow: Boolean): Boolean;
    procedure MagneticWindowDestroy;
    procedure zSubclass_Proc(lng_hWnd: HWND;
                             uMsg, wParam, lParam: Integer;
                             var lReturn: Integer;
                             var bHandled: Boolean);
  end;
Das Interface in der Anwendung.
Delphi-Quellcode:
  ISkinMagnetic = interface
    ['{A00CB8B3-8433-4C58-9115-1845B29B3FF0}']
    function GetSnapWidth: Integer;
    procedure SetSnapWidth(const Value: Integer);
    function AddWindow(Handle: HWND; hWndParent: HWND; var FuncPointer : TSubClass_Proc): Boolean;
    property SnapWidth: Integer read GetSnapWidth write SetSnapWidth;
    function RemoveWindow(Handle: HWND): Boolean;
    function SetFullWindowDrag(hwnd: DWORD; ShowFullWindow: Boolean): Boolean;
    procedure MagneticWindowDestroy;
    procedure WMEnterSizeMove(var Msg: TMessage);
    procedure WMSizing(var Msg: TMessage);
    procedure WMMoving(var Msg: TMessage);
    procedure WMExitSizeMove(var Msg: TMessage);
    procedure WMSysCommand(var Msg: TMessage);
    procedure WMCommand(var Msg: TMessage);
    procedure zSubclass_Proc(lng_hWnd: HWND;
                             uMsg, wParam, lParam: Integer;
                             var lReturn: Integer;
                             var bHandled: Boolean);
  end;

Diese proceduren kann ich dann in der Anwendung nicht erstellen.
Delphi-Quellcode:
    procedure WMEnterSizeMove(var Msg: TMessage);
    procedure WMSizing(var Msg: TMessage);
    procedure WMMoving(var Msg: TMessage);
    procedure WMExitSizeMove(var Msg: TMessage);
    procedure WMSysCommand(var Msg: TMessage);
    procedure WMCommand(var Msg: TMessage);
Und ich glaube langsam das es auch nicht geht.

Zitat:
// Aufruf
Delphi-Quellcode:
procedure TfrmChild2.WMMoving(var Msg: TMessage);
var
   SkinBrowseForFile: ISkinBrowseForFile;
begin
   SkinBrowseForFile := TSkinBrowseForFile.Create;
   SkinBrowseForFile.WMMoving(Msg);
end;
Das kann ich nicht da meine Anwendung NonVcL ist.
Sonst wäre es einfach. und richtig so wie du es gepostet hast.
Das ist wieder so ein Spezial Fall.. LOL

Die Klasse TMagnetic funktioniert ja richtig mit VCL.
Ich möchte sie aber in meine DLL integrieren damit ich diese nicht bei jeden Projekt mit einbinden muss (als Datei).

Mich nerven schon die ganzen Proceduren in der "TMagnetic = class"
procedure WMSizing(var Msg: TMessage); usw. Aber ich muss sie einbinden (Obwohl ich sie in der TMagnetic eigentlich gar nicht benötige)
Nur wenn ich sie nicht einbinde kann ich sie auch nicht veröffentlichen.
Was für ein Kram

gruss

Geändert von EWeiss ( 5. Sep 2016 um 05:51 Uhr)
  Mit Zitat antworten Zitat