Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Test: Erweitertes Drag & Dock für TBX (https://www.delphipraxis.net/136580-test-erweitertes-drag-dock-fuer-tbx.html)

mirage228 3. Jul 2009 15:53

Re: Test: Erweitertes Drag & Dock für TBX
 
Hey,

Ich habe das an die Zeichenroutine an TB2k angelehnt:
Delphi-Quellcode:
  Size.cx := GetSystemMetrics(SM_CXDLGFRAME);
  Size.cy := Size.cx;
  // Outline zeichnen
  DC := GetDCEx(GetDesktopWindow, 0,
    DCX_LOCKWINDOWUPDATE or DCX_CACHE or DCX_WINDOW);
   TB2Common.DrawHalftoneInvertRect(DC, @OutlineRect,
     nil, Size, Size);
  ReleaseDC(GetDesktopWindow, DC);
  // ...
  // Outline löschen
  DC := GetDCEx(GetDesktopWindow, 0,
    DCX_LOCKWINDOWUPDATE or DCX_CACHE or DCX_WINDOW);
  SetRectEmpty(R);
  TB2Common.DrawHalftoneInvertRect(DC, @R, @FLastOutlineRect, Size, Size);
  ReleaseDC(GetDesktopWindow, DC);

// TB2Common.pas
procedure DrawHalftoneInvertRect(const DC: HDC; const NewRect, OldRect: PRect;
  const NewSize, OldSize: TSize);
var
  Brush: HBRUSH;
begin
  Brush := CreateHalftoneBrush;
  try
    DrawInvertRect(DC, NewRect, OldRect, NewSize, OldSize, Brush, Brush);
  finally
    DeleteObject(Brush);
  end;
end;
Das ganze ist zudem angelehnt an die BeginMoving-Methode aus der TB2Dock.pas.

Viele Grüße

xaromz 3. Jul 2009 16:07

Re: Test: Erweitertes Drag & Dock für TBX
 
Hallo,

das Problem wird sein, dass seit Vista das Zeichnen auf den Desktop vermieden werden sollte. Durch den DWM ist das erstens langsamer, und zweitens kann es eben zu solchen Effekten kommen, dass ein Xor nicht mehr funktioniert. Eine Lösung weiß ich aber leider auch nicht (da wäre ich selbst dran interessiert).

Gruß
xaromz

mirage228 3. Jul 2009 16:16

Re: Test: Erweitertes Drag & Dock für TBX
 
Zitat:

Zitat von xaromz
das Problem wird sein, dass seit Vista das Zeichnen auf den Desktop vermieden werden sollte. Durch den DWM ist das erstens langsamer, und zweitens kann es eben zu solchen Effekten kommen, dass ein Xor nicht mehr funktioniert. Eine Lösung weiß ich aber leider auch nicht (da wäre ich selbst dran interessiert).

Laut Doku von GetDCEx() kann man auch NULL (also 0 als Handle) übergeben, dann kriegt man auch den DC für den gesamten Bildschirm, was ebenso gehen müsste. Oder ist "entire screen = desktop handle"?

xaromz 3. Jul 2009 16:28

Re: Test: Erweitertes Drag & Dock für TBX
 
Hallo,
Zitat:

Zitat von mirage228
Oder ist "entire screen = desktop handle"?

IMHO ja.

Gruß
xaromz

mirage228 3. Jul 2009 16:36

Re: Test: Erweitertes Drag & Dock für TBX
 
Hm, also ich habe jetzt nochmal was geändert. Undzwar wird während des gesamten Drag-Vorgangs nur ein DC benutzt, um zu zeichnen (vorher wurde immer ein neues DC angefordert). Vielleicht liegt da ja der Hund begraben.

xaromz 3. Jul 2009 17:00

Re: Test: Erweitertes Drag & Dock für TBX
 
Hallo,
Zitat:

Zitat von mirage228
Hm, also ich habe jetzt nochmal was geändert. Undzwar wird während des gesamten Drag-Vorgangs nur ein DC benutzt, um zu zeichnen (vorher wurde immer ein neues DC angefordert). Vielleicht liegt da ja der Hund begraben.

Hilft leider auch nichts :( .

Gruß
xaromz

mirage228 3. Jul 2009 17:08

Re: Test: Erweitertes Drag & Dock für TBX
 
Na gut, dann werde ich mir mal den VCL Code zum Docken anschauen, dort geht das ja offensichtlich mit den Rahmen ...

Viele Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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