Autor |
Beitrag |
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 23.04.10 18:08
Hey,
ich schreib grad an nem neuen Projekt. Eine Klasse in dem Projekt soll auf Änderungen der Form reagieren (MouseMove, KeyDown, Resize, ...). Dazu hab ich mir erst überlegt die Methoden einfach zu deklarieren und dann in der Form aufzurufen um die Parameter weiterzuleiten. Aber das muss doch auch irgendwie besser gehen. Kann ich nich irgendwie das Handle der Form übergeben und dann auf die Messages reagieren, die die Form bekommt?
MfG & Thx Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 23.04.10 18:33
Ich glaube nicht dass das so einfach geht. Sonst könnte man ja einfach vom andren Programm alle Events auslesen (was ne feine Sache wäre)
Ich würde das so machen, dass du die WndProc-procedure überschreibst und dann da rein ALLE messages an deine Komponenten weiterleitest. Dann musst du zwar für deine Klasse immernoch ne Procedure zum Message-Weiterleiten schreiben, aber besser als die einzelnen Events.
www.delphi-library.d...iewtopic.php?t=97738
Kapitel 4, 2te Hälfte (weiter unten)
Wie du dann an die Parameter kommst, die z.B. OnKeyDown hat, das ist ne ganz andre Frage...aber Delphi macht das ja auch irgendwie.
=> keine ideale Lösung
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 23.04.10 18:41
Wenn deine Klasse ein visuelles Objekt ist, leite es von TWinControl ab(oder auch was anderes geeigneteres), dann kommen da von alleine Nachrichten an.
Ansonsten würde ich sehr den Delphi-Weg empfehlen, d.h. die Form bekommt die Messages und leitet ggf. in den entsprechenden Events das an deine Klasse weiter.
_________________ We are, we were and will not be.
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Fr 23.04.10 19:07
TControl.WindowProc sollte sich "einfach" ersetzen lassen um da alle Nachrichten zu kontrollieren bevor man sie an die ursprüngliche Fensterprozedur weiterleitet.
Als "Hook" ist es halt OOP-mäßig "böse", spart aber manchmal viel Arbeit.
Denkanstoß (provisorisch, ungetestet): 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| type TWindowProcHook = class private FControl: TControl; FOldWndProc: TWndMethod; protected procedure WndProcHook(var Msg: TMessage); public constructor Create(AControl: TControl); destructor Destroy; override; end; ..
constructor TWindowProcHook.Create(AControl: TControl); begin inherited Create; FControl := AControl; FOldWndProc := AControl.WindowProc; FControl.WindowProc := WndProcHook; end;
destructor TWindowProcHook.Destroy; begin FControl.WindowProc := FOldWndProc; inherited Destroy; end;
procedure TWindowHookProc.WndProcHook(var Msg: TMessage); begin case Msg.Msg of .. end; FOldWndProc(Msg); end; |
Grüsse, Dirk
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Sa 24.04.10 00:01
Hey,
wenn ich mir die Parameter (zB die gedrückten Tasten) dann noch selber zusammen suchen muss, dann mach ich das vlt doch lieber über die Events.
Von TWinControl ableiten geht bei mir leider nicht wirklich, da das ganze n GUI-Manager für OpenGL wird. Also sind die Komponenten schon sichtbar, aber nicht so wie normalerweiße^^
MfG & Thx Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Steve1024
      
Beiträge: 141
Windows 2K, XP, 7 & Server 2003 - 2008; Linux (Ubuntu, Fedora)
D7, D05, D06, D09, DXE
|
Verfasst: Sa 24.04.10 23:26
Native Win32 API Hooks?
Das findet man gute Infos in der MSDN.
|
|
|