Delphi-PRAXiS

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 09:47


Test: Erweitertes Drag & Dock für TBX
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Ich habe einige Routinen geschrieben, um die Drag & Drop Fähigkeiten der Toolbar2000 bzw. TBX Bibliothek etwas auszubauen, besonders mit Hinblick auf die typische Nutzung mit mehreren Tabs pro Dock Panel (TTBXDockablePanel).
Dabei kann man die einzelnen Tabs so auf die Dock Panele verschieben, wie man es beispielsweise von Delphi gewohnt ist (also in das Panel, drüber oder drunter). Zudem kann man einzelne Tabs nun auch ganz leere Seiten ziehen.
Mit TBX und Toolbar2000 war das meinen Recherchen und Tests zufolge von Haus aus nicht möglich, daher habe ich mich selbst mal rangesetzt.

Für die Umsetzung habe ich dabei die modifizierte Version des speziellen DragDock Codes der Toolbar 2000 Bibliothek mit eigenen Erweiterungen verwendet.

Nun würde ich das daraus entstandene Test-Programm euch gerne zum Testen zur Verfügung stellen. Falls alle (oder die meisten) Fehler raus sind werde ich den Quellcode schöner kapseln und wenn der Code dann einen weiteren praktischen Test (der dürfte beim Titel des Testprogramms offensichtlich sein ;) ) "besteht", würde ich ggf. den Quellcode dann gerne zur allgemeinen Verwendung zur Verfügung stellen. :)
Noch ein Hinweis: Im Testprogramm ist es bewusst nicht möglich die Panele an die obere Seite zu verschieben, falls das auffallen sollte :mrgreen:

Viel Spaß beim Testen,
David

P.S.: Ich habe das mal unter "sonstige Fragen zu Delphi" gepackt, weil das Programm ja keine "richtige" Freeware ist und derzeit noch nicht Open-Source.

xaromz 3. Jul 2009 10:08

Re: Test: Erweitertes Drag & Dock für TBX
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

sieht erst mal gut aus. Mir ist aber aufgefallen, dass sich Deine Ziel-Rechtecke manchmal überlappen (siehe Screenshot).

Gruß
xaromz

mirage228 3. Jul 2009 10:24

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

Thx... Ließ sich das Verhalten irgendwie reproduzieren oder trat das nur sporadisch auf?

Viele Grüße

DerDan 3. Jul 2009 10:37

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

ich finde nach einem Kurztest die Arbeit sehr ordendlich.
Wird auch das Feature automatischen aus- und einklappen mit Festpinnen wie z.b. bei BDS2006 noch eingebaut?

mfg

DerDan

mirage228 3. Jul 2009 10:41

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

Zitat von DerDan
ich finde nach einem Kurztest die Arbeit sehr ordendlich.

Danke :)

Zitat:

Wird auch das Feature automatischen aus- und einklappen mit Festpinnen wie z.b. bei BDS2006 noch eingebaut?
Könnte ich mir vorstellen. Aber das müsste ich dann genauso wie das restliche Docking (fast) komplett selbst implementieren ohne Hilfe des in Delphi integrieren Dock-Supports, da TBX/Toolbar2000 da auf komplett eigene Routinen setzt. Ich sehe mir das aber auf jeden Fall an :)

Viele Grüße

xaromz 3. Jul 2009 13:44

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

Zitat von mirage228
Ließ sich das Verhalten irgendwie reproduzieren oder trat das nur sporadisch auf?

lässt sich reproduzieren. Die Koordinaten stehen ja im Screenshot.

Gruß
xaromz

mirage228 3. Jul 2009 15:07

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

Zitat von xaromz
Hallo,
lässt sich reproduzieren. Die Koordinaten stehen ja im Screenshot.

Hm, ich krieg das nicht hin. Habs auch testweise mit Windows 7 in der VM ausprobiert, da gings auch alle wie es sollte. Das einzige was ich nicht testen konnte war aktiviertes Aero. Funktioniert es wenn du es unter XP oder unter Vista ohne Aero?

Danke nochmal fürs Testen....

xaromz 3. Jul 2009 15:15

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

scheint wohl ein Problem des DWM zu sein. Mit deaktiviertem Aero kommt der Fehler nicht.

Gruß
xaromz

mirage228 3. Jul 2009 15:42

Re: Test: Erweitertes Drag & Dock für TBX
 
Habe mal den Dock-Code einer neuen Toolbar2000 Version angeschaut und einige Differenzen zwischen meiner Umsetzung der grauen Umrandung und der aus TB2k entdeckt. Ich habs mal in die neue Version eingebaut und sie in den ersten Beitrag hochgeladen. Vielleicht gehts ja nun...

Viele Grüße

xaromz 3. Jul 2009 15:50

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

geht leider immer noch nicht, sorry.
Wie sieht denn die Zeichenroutine aus? Ich weiß, dass es mit Vista einige Änderungen bezüglich des Zeichnens auf den Desktop gab.

Gruß
xaromz

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 03:56 Uhr.

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