Autor Beitrag
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  DC := GetWindowDC(FParentForm.Handle);
  try
    // Draw titlebar
    BitBlt(DC, MBorderWidth, MBorderHeight,
           MTitlebarBitmap.Width, MTitlebarBitmap.Height,
           MTitlebarBitmap.Canvas.Handle, 00, 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Do 18.10.07 16:22 
Was willst du genau wissen? hier z.B. das setzen der Bitmapgröße:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: So 21.10.07 23:13 
user profile iconnoidic 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: 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...