AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi proceduren (Events) aus Interface
Thema durchsuchen
Ansicht
Themen-Optionen

proceduren (Events) aus Interface

Ein Thema von EWeiss · begonnen am 4. Sep 2016 · letzter Beitrag vom 12. Sep 2016
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#1

AW: proceduren (Events) aus Interface

  Alt 5. Sep 2016, 04:56
Als Ergänzung: Ich hätte jetzt so etwas erwartet...
Delphi-Quellcode:
// in der DLL
unit DllPlugin;

uses
  PluginInterface;

type
  TPlugin = class(TInterfacedObject, IPlugin)
  private
    FSkinBrowseForFile: ISkinBrowseForFile;
    function GetSkinBrowseForFile: ISkinBrowseForFile;
  public
    property SkinBrowseForFile: ISkinBrowseForFile read GetSkinBrowseForFile;
  end;

// veröffentlichen als DLL Funktion
function InitPlugin: IPlugin;
begin
  Result := TPlugin.Create;
end;

exports
  InitPlugin

end.
Analog könntest du natürlich auch das hier genannte Interface so veröffentlichen, aber ich vermute das ist nicht das einzige.

Und dann in der Anwendung:
Delphi-Quellcode:
uses
  PluginInterface;

var
  Plugin: IPlugin;
begin
  ...LoadLibrary...
  DllInitPlugin := GetProcAddress(...);
  Plugin := DllInitPlugin;
//...
  SkinBrowseForFile := Plugin.SkinBrowseForFile;
  SkinBrowseForFile.WMMoving(Msg);
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: proceduren (Events) aus Interface

  Alt 5. Sep 2016, 05:11
Als Ergänzung: Ich hätte jetzt so etwas erwartet... Genauso habe ich es ja auch.
Nur meine Namensgebung ist etwas anders.

Delphi-Quellcode:
// MagneticWindow
function CTRL_MagneticWindowCreate(): ISkinMagnetic; stdcall;
Der Export ist dann logischerweise "CTRL_MagneticWindowCreate"

In der Anwendung dann einfach
Delphi-Quellcode:
{$REGION 'WM_CREATE'}
  case Msg of
    WM_CREATE:
      begin
        if not SKAERO_INIT then
          Halt;
        MagneticWnd := CTRL_MagneticWindowCreate;
      end;
{$ENDREGION}
Aber wie gesagt die Messagen machen Probleme.
MagneticWnd.WMMoving(Msg); Das macht keine sinn auf diese Weise..
Wenn ich meine Anwendung über WM_MOVING ( also verschiebe)
Dann muss diese Procedure WMMoving aufgerufen werden damit die Messagen an meine DLL weitergeleitet werden
und das geht so nicht.

Etwas verworren das ganze.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#3

AW: proceduren (Events) aus Interface

  Alt 5. Sep 2016, 05:20
Aber wie gesagt die Messagen machen Probleme.
MagneticWnd.WMMoving(Msg); Das macht keine sinn auf diese Weise..
// EDIT:
Weil du in der WndProc bist, das hatte ich überlesen.

Wie wäre es so:
Delphi-Quellcode:
procedure TfrmChild2.WMMoving(var Msg: TMessage);
var
  MagneticWnd: IMagneticWnd;
begin
  MagneticWnd := CTRL_MagneticWindowCreate;
  MagneticWnd.WMMoving(Msg);
end;
Das ginge, allerdings sollte der Aufruf von CTRL_MagneticWindowCreate besser in das FormCreate und FMagneticWnd ein privates Feld sein. Dann kannst du direkt FMagneticWnd.WMMoving(Msg) aufrufen ohne vorher bei jeder Message das Interface aus der DLL neu zu holen (das wäre viel zu langsam, Messages sollten so schnell wie irgend möglich beantwortet werden).
Sebastian Jänicke
AppCentral

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

n/a Beiträge
 
#4

AW: proceduren (Events) aus Interface

  Alt 5. Sep 2016, 05:45
Delphi-Quellcode:
procedure TfrmChild2.WMMoving(var Msg: TMessage);
var
   MagneticWnd: IMagneticWnd;
begin
   MagneticWnd := CTRL_MagneticWindowCreate;
   MagneticWnd.WMMoving(Msg);
end;
Wäre möglich aber nicht umsetzbar weil ich über keine Form verfüge.
Meine Form wird in NonVcl erstellt.

Delphi-Quellcode:
    // Window erstellen
    MainHandle := CreateWindowEx(dwExStyle, myClass, myTitle, dwStyle, MainLeft, MainTop,
      MainWidth, MainHeight, 0, 0, wc.hInstance, nil);
gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#5

AW: proceduren (Events) aus Interface

  Alt 5. Sep 2016, 06:41
Dann macht auch die VCL-Methodensignatur für deine Methoden keinen Sinn. Das müsstest du dann ja erst zusammenbauen wie es sonst die VCL tut.

Du könntest die Parameter selbst auslesen und in geeigneter Form aufbereiten. Sprich die Parameter selbst neu definieren.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: proceduren (Events) aus Interface

  Alt 5. Sep 2016, 07:08
Dann macht auch die VCL-Methodensignatur für deine Methoden keinen Sinn. Das müsstest du dann ja erst zusammenbauen wie es sonst die VCL tut.

Du könntest die Parameter selbst auslesen und in geeigneter Form aufbereiten. Sprich die Parameter selbst neu definieren.
Ich habe es jetzt mal zum testen umgestellt.
Wenn ich dann ein Event bekomme ist es gut ansonsten .. na mal sehn.

Delphi-Quellcode:
{$REGION 'TMainApp'}
type
  TMainApp = class(TComponent)
  private
    { Private declarations }
    FHandle: HWND;
    lRes: integer;
    Background: PWideChar;
    sFileName: string;
    gBlinkCount: integer;
    UseState: integer;
    gColor: array [1 .. 33] of integer;
    gPeak: array [1 .. 100, 1 .. 2] of integer;
    // Vis
    xPos: integer;
    stepX: integer;
    C0, CB1, CB2, CB3, CG1, CG2, CG3: integer;
    nTick: integer;
    OkL, OkR: integer;
    FPScount, nFPScount: Cardinal;
    ShowMode: integer;
    hPlgRadioButton: integer;
    hSubSkinMenu: HMenu;
    Restart: BOOL;
    h_Instance: HINST;
    newItem: string;
    PaintDC: HDC;
    procedure DeleteResource;
    function GetHandle: HWND;
    procedure SetHandle(const Value: HWND);
  protected
    //
  public
    { Public declarations }
    procedure SplitRGB(Col: COLORREF; var R: Byte; var G: Byte; var b: Byte);
    procedure DrawOscillo(WinHandle: HWND; pInteger: TWaveData);
    procedure PlayListPlay(hList: HWND; nCount: integer);
    procedure RenderVis(WinHandle: HWND);
    procedure CheckPluginVisibility(nRedraw: integer);
    procedure ResizeWindow(WinHandle: HWND; ChangeBackground: integer);
    procedure ButtonBlink(ID: integer; nStop: boolean);
    procedure MovePluginButton(Offset: integer);
    procedure CheckVisiblePanel(hCtrl: HWND);
    procedure DetectBackground;
    procedure ColorInit;
    procedure WMEnterSizeMove(var Msg: TMessage); message WM_ENTERSIZEMOVE;
    procedure WMSizing(var Msg: TMessage); message WM_SIZING;
    procedure WMMoving(var Msg: TMessage); message WM_MOVING;
    procedure WMExitSizeMove(var Msg: TMessage); message WM_EXITSIZEMOVE;
    procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND;
    procedure WMCommand(var Msg: TMessage); message WM_COMMAND;
    function SetRGB(colorRGB: DWORD): integer;
    function LevelColr(nLevel: integer): integer;
    function PaintCapture(WinHandle: HWND; DC: Cardinal; Action: TCaptureAction): integer;
    function SolvePeak(nValue: integer; nTotal: integer): integer;
    function FileSize(FileName: PWideChar): integer;
    function ListShuffle(hList: HWND): integer;
    function ARGBToColorRef(Color: ARGB): COLORREF;
    function GetMenuTxt(ItemId: integer; var Img: Cardinal; var ImgItem: Cardinal;
      var ImgSep: Cardinal; var SideBarImg: Cardinal): WideString;
    property Handle: HWND read GetHandle write SetHandle;
  end;
{$ENDREGION}
Ich hab jetzt ne Classe erstellt dort kann ich dann die Messagen wie unter VCL einbinden.
Nun gut bisher haben sie nicht gefeuert.. LOL
Wenn es dann geht muss ich mal sehn wie ich das mit dem Interface auf die reihe kriege.

So übergebe ich dann die Messagen, wie gesagt wenn es funktioniert
Delphi-Quellcode:
{$REGION 'procedure WMEnterSizeMove'}
procedure TMainApp.WMEnterSizeMove(var Msg: TMessage);
begin
  inherited;

  if Assigned(MagneticWndProc) then
    MagneticWndProc(Self.Handle, WM_ENTERSIZEMOVE, Msg, dummyHandled);
end;
Nochmal Danke für deine Informationen.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#7

AW: proceduren (Events) aus Interface

  Alt 5. Sep 2016, 07:24
Ich hab jetzt ne Classe erstellt dort kann ich dann die Messagen wie unter VCL einbinden.
Nun gut bisher haben sie nicht gefeuert.. LOL
Wie schickst du denn dort etwas hin?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz