Thema: Delphi Farbverlauf im Titel

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

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

Re: Farbverlauf im Titel

  Alt 7. Jun 2004, 22:46
Zitat:
Hmm, wenn das nur Luckie macht, ist es dann überhaupt sinnvoll, ich meine, steht es in Relation zum Aufwand?
Oder ist Luckie noch icht so erfahren in Delphi?
Ich meine, es muss ja einen grund haben, warum nur er es macht.
[JOKE]
Luckie macht das weil er mit der VCL nicht so zurecht kommt, und in Luckie's Programmen steht nichts in Relation zum Aufwand. Dies liegt daran das Luckie ein blutiger Anfänger ist und nicht so erfahren mit Delphi ist
[/JOKE]

@Luckie, habe ich's so getroffen ?

*schmunzel* Hagen

Zurück zum Thema:
wm_NCPaint reicht bei weitem nicht aus. Die Titelzeile der Windows-Fenster wird auch zB. bei wm_NCLButtonDown/wm_NCLButtonUp oder wm_NCHitTest unter Umständen neu gezeichnet. Das blöde daran ist aber der Punkt das diese Neuzeichen-Routinen innerhalb des Windows-USER-Interfaces in eigenen Messageloops durchgeführt wird.
Um dieses mal zu verdeutlichen:
In einer Titelzeile liegen die 3 Buttons zum Verkleinern, Maximieren und Schließen des Fensters. Diese Buttons liegen auf der eingefärbten Titelzeile. Mit wm_NCPaint müsstest du nun diese Titelzeile einfärben und an richtiger Stelle die 3 Buttons einzeichnen. Schön soweit kein Problem. Aber was passiert wenn man auf einen der Button mit der Maus klickt ? Es entsteht ein wm_NCLButtonDown Event, dieses wird normalerweise weitergeleitet an den Windows-Fensterhandler aus dem Betriebssystem. Nun im Windows wird damit aber eine interne Schleife betreten die erst zurückkehrt wenn der Benutzer den Button loslässt. Diese Schleife überprüft fortwährend ob der Mauscursor noch innerhalb des Buttons ist. Ist dies nicht mehr der Fall so wird nun der Button SAMT Titelzeile neu dargestellt. Aber nicht wie logisch richtig indem ein wm_NCPaint ausgelösst wird, sondern durch eine interne Windows-Zeichenroutine die NICHT gehookt werden kann. Schwups, in diesem Falle sieht man in deiner Regenbogen-Titelleiste sofort wieder Buttons und Farbverläufe die dem Originaldesign entsprächen.

Bei viele solchen Spielerei-Anwendungen kann man dieses Verhalten reproduzieren.

Der einzigste Ausweg ist es neben dem wm_NCPaint, noch die Messages wm_NCLButtonUp,wm_NCLButtonDown,wm_NCHitTest,wm_Wi ndowPosChanging, wm_SetText usw. usw. usw. selber zu coden. Dies kommt zum Schluß dem Programmieren einer vollständig eigenen Fensterbedienung gleich !!

Zum Glück gibt es aber nun WindowsXP das über die Manifeste diese Einstellungen vereinfachen kann.

Gruß Hagen
  Mit Zitat antworten Zitat