Autor Beitrag
NeoInDerMATRIX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 245

Win95, Win98(+se), WinNT, Win2000, WinME, WinXP(+pro), VISTA, Linux(SuSe), DOS [MultiMon(3)], Vista
D6 PeE + (FP 2.0l) + D3 Pe + D2005+ D2006 Arch
BeitragVerfasst: Di 30.12.03 22:47 
Hallo!

Ich habe ein kleines Problem, ich hoffe ihr könnt mir helfen!

Also ich möchte eine Klasse schreiben die ein Fenster mit hilfe der Windows API erzeugt und verwaltet! (Keine VCL)

Nun habe ich leider das Problem das ich die Messages nicht in meine Klasse reinbekomme.

Dieses problem versuchte ich zu lösen indem ich eine WndProc schrieb die alle Fenster Klassen von mir anspringt wenn sie eine Message empfängt! Leider ist das sehr umständlich und ich kann diese Function auch nicht so in abgeleitete Klassen nutzen das diese auch noch die Messages behandeln können!

Beispiel!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Type
  tMeinWindow = Class
                           ... // Fenster Daten
                           Constructor Create(...);
                           Function WndCode(...): lResult; StdCall;
                         End;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Constructor tMeinWindow.Create(..);
 Begin
   RegClassWnd(Self); // Registriert die Klasse bei der WndProc
   ... // Fenster per API erzeugen
 End;

Function tMeinWindow.WndCode(...): lResult; StdCall;
 Begin
   Result:=0; // Basis Klasse reagiert nicht auf Nachrichten
 End;


Soweit geht es ja noch!

Aber wenn ich probiere eine neue Klasse von tMeinWindow ableite
geht die ganze sache nicht mehr! Wie schafe ich es die Message in die abgeleiteten Klassen zu schicken?

Ich hoffe ich habe mein Problem einiger massen erklären können, und ihr könnt mir helfen!

Vorweg: Ich kann nicht die VCL nehmen!

Danke für eure hilfe!
CU
Neo

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
Michael Stenzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: Mi 31.12.03 03:08 
Hallo.

Erstelle eine Virtuelle Funktion z.b. MSGHandler;
Die rufst Du dann in der Basisklasse aus der Funktion WndCode auf.

In den abgeleiteten Klassen überschreibst Du die Funktion MSGHandler.

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:
 TMyWindow = class
    public
      constructor Create(...);
    private
      function WndCode(...) : lResult;  stdcall;
    protected
      function MSGHandler(...) : lResult; virtual;
  end;

  TMy2Window = class(TMyWindow)
    protected
      function MSGHandler(...) : lResult; override;
  end;

...

Function TMyWindow.WndCode(...) : lResult; StdCall; 
 Begin 
   Result:=MSGHandler(...);  
 End;

Function TMyWindow.MSGHandler(...) : lResult;
begin
   Result := 0; // Basisklasse gibt Null zurück
end;

Function TMy2Window.MSGHandler(...) : lResult;
var Ergebniss : lResult;
begin
   ... // auswerten
   Result := Ergebniss;
end;


mfg
Michael.