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
Seite 3 von 5     123 45      
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: proceduren (Events) aus Interface

  Alt 7. Sep 2016, 11:09
Da würde ich eher dieses Tool nehmen:
http://www.modelmakertools.com/struc...wer/index.html
Das analysiert den Quelltext und merkt auch, wenn Methoden nur verschoben sind usw., zeigt an welche hinzugekommen und geändert sind usw.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#22

AW: proceduren (Events) aus Interface

  Alt 7. Sep 2016, 11:38
Zitat:
Einer der Gründe weshalb ich empfehle grundsätzlich die eigenen Units von Zeit zu Zeit durch den integrierten Formatter zu jagen.
Das Problem ist dabei nur das jeder sein eigenes Süppchen kochen will.
Das war einer der gründe warum bei Mediaportal, als ich da noch mit gearbeitet habe, es strikte vorgaben gab bzg. Formatierung usw..

Zitat:
Da würde ich eher dieses Tool nehmen:
Sieht gut aus.
Aber der Integrierte UltraCompare von UltraEdit ist dafür für mich persönlich ausreichend.

gruss

Geändert von EWeiss ( 7. Sep 2016 um 11:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: proceduren (Events) aus Interface

  Alt 7. Sep 2016, 11:47
Das Problem ist dabei nur das jeder sein eigenes Süppchen kochen will.
Eine Standardeinstellung ist dabei wirklich nicht mehr zeitgemäß:
Die Beschränkung auf 80 Zeichen pro Zeile. Das haben wir auf 130 eingestellt.

Ansonsten benutzen wir den Formatter fast auf Standard außer dass "Großschreibung von reservierten Wörtern und Direktiven" auf Kleinbuchstaben eingestellt ist.

Wenn man da natürlich noch viel mehr nicht dem Standard entsprechend einstellt, bringt das ganze nicht mehr so viel, das stimmt.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#24

AW: proceduren (Events) aus Interface

  Alt 7. Sep 2016, 13:28
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

Geändert von EWeiss ( 7. Sep 2016 um 14:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: proceduren (Events) aus Interface

  Alt 8. Sep 2016, 20:48
Wir machen das so, dass es ein internes Interface gibt, das von dem öffentlichen abgeleitet ist. So brauchen wir die öffentlichen Sachen nicht doppelt zu deklarieren.
(Öffentlich heißt bei uns im Pascal Skript verfügbar.)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#26

AW: proceduren (Events) aus Interface

  Alt 8. Sep 2016, 20:58
Wir machen das so, dass es ein internes Interface gibt, das von dem öffentlichen abgeleitet ist. So brauchen wir die öffentlichen Sachen nicht doppelt zu deklarieren.
(Öffentlich heißt bei uns im Pascal Skript verfügbar.)
Ich weiß jetzt nicht ganz genau ob meine Vorgehensweise korrekt ist.
Ich dachte mir nur solange ich die Reihenfolge einhalte und die zSubclass_Proc an unterster stelle ansiedele
das ich sie dann nicht veröffentlichen muss.

Es wäre etwas anderes wenn ich jetzt hingehen würde und diese über SetFullWindowDrag sezen würde.
Dann müsste ich die veröffentlichen da sonst die Reihenfolge der Deklarationen im Interface nicht mehr stimmen.


gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: proceduren (Events) aus Interface

  Alt 9. Sep 2016, 04:47
Ja, das funktioniert, basiert aber auf Voraussetzungen (Anordnung der Methoden) und erfordert für die Veröffentlichung andere Versionen der gleichen Datei (mit dem Interface).

Ein abgeleitetes Interface hingegen liegt in einer anderen Unit, macht es egal wie Methoden angeordnet sind und die Units werden syntaktisch beim Kompilieren geprüft ohne manuell danach modifiziert zu werden. Dadurch gibt es viel weniger Fehlerquellen und weniger Aufwand.
Zudem hat das Vorgehen keine Nachteile, die mir einfallen würden, insofern...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#28

AW: proceduren (Events) aus Interface

  Alt 9. Sep 2016, 04:56
Ja, das funktioniert, basiert aber auf Voraussetzungen (Anordnung der Methoden) und erfordert für die Veröffentlichung andere Versionen der gleichen Datei (mit dem Interface).

Ein abgeleitetes Interface hingegen liegt in einer anderen Unit, macht es egal wie Methoden angeordnet sind und die Units werden syntaktisch beim Kompilieren geprüft ohne manuell danach modifiziert zu werden. Dadurch gibt es viel weniger Fehlerquellen und weniger Aufwand.
Zudem hat das Vorgehen keine Nachteile, die mir einfallen würden, insofern...
Ich weiß nur nicht ob das so gut ist wenn ich meine Interface Unit in Teile aufsplitte.
So gebe ich den Leuten diese eine Unit wo alles vorhanden ist.

Ja ist nicht so professionell wie bei dir aber solange es das tut was es soll ? Und fehlerfrei ist geht das noch.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: proceduren (Events) aus Interface

  Alt 9. Sep 2016, 07:06
So gebe ich den Leuten diese eine Unit wo alles vorhanden ist.
Genau so meine ich das doch.
Der Unterschied ist, dass diese Unit in deinem Projekt normal eingebunden ist, mehr nicht.

Dass beides funktioniert, ist klar, aber ich sehe eben keinen Vorteil an dem Mehraufwand.

Bei uns würde das so aussehen. SDK-Unit:
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;
Interne Unit:
Delphi-Quellcode:
  ISkinMagneticEx = interface(ISkinMagnetic)
    ['{14454F11-1C26-4133-A46E-3271F5A9618B}']
    function zSubclass_Proc(var Wnd: HWND; var Msg: UINT; var wParam: wParam;
      var lParam: lParam): LRESULT;
  end;

  // (die Klasse wäre bei uns lediglich in einer eigenen Unit)
  TMagnetic = class(TInterfacedPersistent, ISkinMagnetic, ISkinMagneticEx)
...
Die Interfaces haben so auch eindeutige GUIDs usw. und du weißt vor allem genau, dass die veröffentlichte Unit auch genau zu deinen internen Interfaces passt. Außerdem sparst du dir das Abgleichen der Deklarationen, wenn du etwas änderst bzw. hinzufügst.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke ( 9. Sep 2016 um 07:08 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#30

AW: proceduren (Events) aus Interface

  Alt 9. Sep 2016, 07:26
Ahhh jetzt hat es klick gemacht..
War mir auch nicht bekannt das man die Interface so verzweigen kann.

Klasse Info

Und man braucht dafür 2 GUIDS unterschiedliche? Hmmmm...

Zitat:
Genau so meine ich das doch.
Der Unterschied ist, dass diese Unit in deinem Projekt normal eingebunden ist, mehr nicht.
Jo so mache ich das ja.

EDIT:
Also ich habe das mal so gemacht wie von dir vorgeschlagen. (DLL seite)

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;

  ISkinMagneticEx = interface(ISkinMagnetic)
     ['{7AFFBAB7-211A-4B02-9787-5A566607A8C7}']
    function zSubclass_Proc(var Wnd: HWND; var Msg: UINT; var wParam: wParam; var lParam: lParam)
      : LRESULT; stdcall;
   end;

  TMagnetic = class(TInterfacedPersistent, ISkinMagnetic, ISkinMagneticEx)
    constructor Create;
    destructor Destroy; override;
Mit meiner vorher deklarierten Variable kann ich jetzt nicht mehr darauf zugreifen.

Delphi-Quellcode:
function SubFormWindowProc(Wnd: HWND; Msg: UINT; wParam: wParam; lParam: lParam): LRESULT; stdcall;
begin

  result := MagneticWnd.zSubclass_Proc(Wnd, Msg, wParam, lParam);
end;
MagneticWnd kennt diese Funktion dann nicht mehr.


gruss

Geändert von EWeiss ( 9. Sep 2016 um 07:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 05:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz