Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Keine Handles? (https://www.delphipraxis.net/55320-keine-handles.html)

Neutral General 19. Okt 2005 17:43

Re: Keine Handles?
 
Finde ich seltsam.. Nur durch eine einzelne Eigenschaft, einen einzigen Zahlenwert, wird ein Control fast un-transparent/alpha-bar (Wort von mir grad erfunden ^^) ?
Ich versteh den Zusammenhang von Handle und Transparenz nicht...

Obwohl hat das vielleicht damit was zu tun, dass Windows die Controls mit Handle dauernd neuzeichnet und die ohne Handle nur bei Bedarf ? Also nur wenn grade z.B

Delphi-Quellcode:
Labelx.Caption := 'blabla';
ausgeführt wird ?

Luckie 19. Okt 2005 17:48

Re: Keine Handles?
 
Das liegt daran, dass Delphi es eben selber zeichnet und eben nicht Windows, wie es bei Windows Controls der Fall ist.

Neutral General 19. Okt 2005 17:50

Re: Keine Handles?
 
ok. Dann lag ich ja faast richtig ;)

SirThornberry 19. Okt 2005 17:55

Re: Keine Handles?
 
@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)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz