Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: SetClassLong mit GCL_HBRBACKGROUND

  Alt 30. Jun 2006, 13:04
weil die Methoden .CreateWnd() und .CreateParams() oä. des VCL WinControls das wieder überschreibt. Bei einem Zugriff auf die Propery .Handle eines WinControls kannst du dir niemals sicher sein das diese hWnd in der komplettten Lebenszeit deiner Komponente immer gleich ist.

Dh. bei einem TForm zb. das sichtbar ist änderst du entscheidende Paramater wie BorderStyle, BoderIcons etc. pp. und dies führt dazu das die VCL autom. das Windows Fensterhandle diese Forms zerstört und gleich wieder ein neues erzeut mit den nun neuen Einstellungen.

Du must also den Hebel exakt so ansetzen das du von deinem WinControl die Methode .CreateWnd oder .CreateParams überschreibts und dort deine eigene Manipulationen einbaust. In deinem Falle, benötigst du ja in SetWindowLong() das HWnd als wäre die Methode .CreateWnd; zu überschreiben.

Kannst du das NICHT dann gibt einen anderen Weg. Schau dir mal die Property .WindowProc der TWinControls an. In einem TForm würdest du dann ein Feld FOldWindowProc: TWndMethod anlegen und eine private Methode NewWindowProc() erzeugen. In .FormCreate() liest du nun die WindowProc Property aus und speicherst diese in FOldWndProc. Danach setzt du die Property .WindowProc auf deine neue NewWindowProc Methode um. In NewWindowProc rufst du nun immer FOldWindowProc auf. Du hast jetzt quasi die Fensterprocedure deines TForms gehookt und empfängst dort alle Nachrichten. Und DIE wichtigste Nachricht die dirch interesiert ist wm_NCCreate oder wm_Create. In dieser Message findest du Felder die das Fenstrsytle beeinflusst also das was du mit SetWindowLong() beeinflussen möchstest. Wichtig ist nur das egal ob das TForm Recreated wird oder nicht das jedesmal wenn ein Fensterhandle alloziert wird du das wm_Create und/oder wm_NCCreate abfangen kannst und dort deine Style Änderungen durchführst.

Gruß Hagen
  Mit Zitat antworten Zitat