Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Keine Handles?

  Alt 19. Okt 2005, 18:55
@Neutral General: Unter Windows hat jedes Control eignetlich ein Handle. Dadurch ist aber sowas wie Alpha nur schwer zu handeln. Unter Delphi ist es nun so gelöst das es eine art virtuelle Fenster gibt (die Controls ohne Handle) und diese tragen sich beim Parent (ein Fenster mit Handle) in eine Liste ein. Wenn jetzt der Parent (mit Handle) neu gemalt wird (durch windowmessages) so ruft der Parent nachdem er sein Bild auf seine Canvas gemalt hat die PaintMethode der virtuellen Fenster auf und stellt dabei den virtuellen Fenstern seine Canvas zur Verfügung. Da der Parent sein Bild ja schon gemalt hat können die anderen virtuellen Fenster schon das gezeichnete von der Parentcanvas abfragen und somit Transparenz erzielen. Wenn du jetzt von einem virtuellen Fenster Repaint aufrufst wird intern das Repaint des Parents aufgerufen so das dieser sich wieder zuerst malen kann. Da diese virutellen Fenster aber kein eigenes Handle haben und auch keine Canvas können diese Fenster auch keine Childs aufnehmen (also können virtuelle Fenster nie als Parent angegeben werden).

Oftmals fragen auch Leute nach, warum ein TImage zum Beispiel nicht über einem Memo liegen kann. Das liegt auch daran das ein TImage kein Handle hat und sich somit auf die Canvas des Parents malt.
Wenn also auf einem Form ein TImage liegt und ein TMemo so malt sich das TImage auf die Canvas des Forms. Da das TMemo aber auch auf dem TForm liegt und eine eigene Canvas hat liegt es immer vor dem TImage.
(Man kann sich eine Canvas als Blatt Papier vorstellen, und wenn das Blatt Papier vom Memo auf(über) dem Blatt Papier vom Form liegt so ist es unvermeidlich/logich das man das Bild unter dem TMemo-Blatt nicht sieht)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat