Autor Beitrag
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: 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):
ausblenden volle Höhe Delphi-Quelltext
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows 2K, XP, 7 & Server 2003 - 2008; Linux (Ubuntu, Fedora)
D7, D05, D06, D09, DXE
BeitragVerfasst: Sa 24.04.10 23:26 
Native Win32 API Hooks?
Das findet man gute Infos in der MSDN.