Autor |
Beitrag |
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Fr 27.07.07 11:02
Mahlzeit,
in unserem Programm haben wir die Fenstertitel durch eigene ersetzt. Dies geschieht über eine Decorator-Komponente über den Form-DC und Bitblt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| DC := GetWindowDC(FParentForm.Handle); try BitBlt(DC, MBorderWidth, MBorderHeight, MTitlebarBitmap.Width, MTitlebarBitmap.Height, MTitlebarBitmap.Canvas.Handle, 0, 0, SRCCOPY); |
Unter Windows 2000 klappt das wunderbar. Unter XP eigentlich auch, allerdings passiert es bei einigen Fenstern oft, bei einigen garnicht, dass trotzdem die Standard-Titelleiste gezeichnet wird. Fährt man mit der Maus über die Titelleiste, flackern beide Darstellungsarten hin und her.
Die Preisfrage ist nun, wie stell ich das ab? Ich würde gerne immer unsere Titelleiste gezeichnet haben und nach Möglichkeit auch weiterhin die Decorator-Komponente dafür nutzen, um nicht Unmengen von Forms umbauen zu müssen.
Besten Dank
noidic
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
gdvLive
Hält's aus hier
Beiträge: 17
|
Verfasst: Do 18.10.07 13:34
*schieb*
Kannst du bitte mal mehr von deinem Code schicken, um die MTitlebar nachvollziehen können? Bzw. die Lösung, wenn du schon eine hast?
|
|
noidic 
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Do 18.10.07 16:22
Was willst du genau wissen? hier z.B. das setzen der Bitmapgröße:
Delphi-Quelltext 1: 2:
| MTitlebarBitmap.Height := clientRect.Top - MBorderHeight; MTitlebarBitmap.Width := windowRect.Right - windowRect.Left - MBorderWidth * 2; |
Ich bin leider nciht sonderlich fit in der Thematik, kenne also die kritischen Punkte nicht. Den ganzen Code kann ich auch nicht posten, da es sich um kein Privatprojekt handelt.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 21.10.07 18:59
Windows sendet zum Zeichnen von Non-Client-Elementen (der Titelleiste, dem Rahmen, ...) eine einige WM_NC*-Nachrichten, darunter auch WM_NCPAINT ... Diese abfangen und das Zeichnen der Kompo dort erledigen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Bernhard Geyer
      
Beiträge: 721
Erhaltene Danke: 3
|
Verfasst: So 21.10.07 23:13
noidic hat folgendes geschrieben: | Unter Windows 2000 klappt das wunderbar. Unter XP eigentlich auch, allerdings passiert es bei einigen Fenstern oft, bei einigen garnicht, dass trotzdem die Standard-Titelleiste gezeichnet wird. Fährt man mit der Maus über die Titelleiste, flackern beide Darstellungsarten hin und her. |
Dann vermute ich mal das unter Vista gar nix mehr passt. Haben auch kompos bei denen wir die Titelzeile ersetzen. Unter Vista gibt's mit Aero-Look Probleme-
|
|
noidic 
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Mo 22.10.07 08:29
Vista ist für uns noch lange kein Thema, daher mache ich mir dahingehend erstmal keine Sorgen
@BenBE: merci, ich werd das mal ausprobieren und Feedback geben.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
noidic 
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Mo 22.10.07 08:41
Die diversen NC-Messages hat der Kollege damals bereits abgefangen und darin die DrawTitleBar-Funktion (s.o.) aufgerufen, das scheints also leider nicht zu sein.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
|