![]() |
Größe und Position der Taskbar ermitteln?
Hi ihr,
für ein aktuelles Projekt muss ich wissen, wo sich die Taskbar befindet, und welche Dimensionen diese hat. Nun habe ich mir jetzt damit beholfen, mit ![]() ![]() Auch wenn sich der Klassenname der Taskleiste schon seit Urzeiten nicht geändert hat, empfinde ich diese Lösung als... schmutzig. Ein Blick in die MSDN verrät mir, dass es immer noch keine Funktion gibt, um Informationen über die Taskleiste zu bekommen. Stimmt das? Hintergrund: Ich möchte gerne so ein Fenster erstellen: ![]() Microsoft betitelt sie als "Notification Area Flyouts", schweigt sich aber darüber aus, wie man a) den Stil dieser Fenster hinbekommt und b) wie man sie positioniert. Wahrscheinlich arbeiten sie selbst mit FindWindow und wollen es nicht zugeben. :wall: P.S.: ![]() ![]() |
Re: Größe und Position der Taskbar ermitteln?
Gnarf... :wall:
"SHAppBarMessage(ABM_GETTASKBARPOS, abd)" liefert die Position der Taskbar, ohne dass man mit FindWindow herumspielen muss. Ein wenig Mathe erledigt dann den Rest...
Delphi-Quellcode:
procedure SetWindowPosition(wnd: HWND);
var TaskBarRct: TRect; X: Integer; Y: Integer; abd: TAppBarData; begin if wnd <> INVALID_HANDLE_VALUE then begin abd.cbSize := SizeOf(TAppBarData); abd.hWnd := wnd; SHAppBarMessage(ABM_GETTASKBARPOS, abd); TaskBarRct := abd.rc; //TaskBar left & top if (TaskBarRct.TopLeft.X = 0) and (TaskbarRct.TopLeft.Y = 0) then begin //left if TaskBarRct.BottomRight.Y > TaskBarRct.BottomRight.X then begin X := TaskBarRct.BottomRight.X + 5; Y := TaskBarRct.BottomRight.Y - 5 - WindowHeight; MoveWindow(Wnd, X, Y, WindowWidth, WindowHeight, true); end else //top begin X := TaskBarRct.BottomRight.X - 5 - WindowWidth; Y := TaskBarRct.BottomRight.Y + 5; MoveWindow(Wnd, X, Y, WindowWidth, WindowHeight, true); end; end; //TaskBar bottom if (TaskBarRct.TopLeft.X = 0) and (TaskbarRct.TopLeft.Y <> 0) then begin X := TaskBarRct.BottomRight.X - 5 - WindowWidth; Y := TaskbarRct.TopLeft.Y - 5 - WindowHeight; MoveWindow(Wnd, X, Y, WindowWidth, WindowHeight, true); end; //Taskbar right if (TaskBarRct.TopLeft.X <> 0) and (TaskbarRct.TopLeft.Y = 0) then begin X := TaskBarRct.TopLeft.X - 5 - WindowWidth; Y := TaskBarRct.BottomRight.Y - 5 - WindowHeight; MoveWindow(Wnd, X, Y, WindowWidth, WindowHeight, true); end; end; end; |
Re: Größe und Position der Taskbar ermitteln?
Warum willst du unbedingt rechnen? TAppBarData gibt es dir doch korrekt vor?
Delphi-Quellcode:
So verwende ich das in meinem aktuellen Projekt - tut wunderbarstens, ganz ohne jegliche Mathematik. ;)
FillChar(abd, SizeOf(TAppBarData), 0);
abd.cbSize := SizeOf(TAppBarData); SHAppBarMessage(ABM_GETTASKBARPOS, abd); case abd.uEdge of ABE_LEFT, ABE_RIGHT: // Do whatever you want ;) ABE_TOP, ABE_BOTTOM: // Another chance to do something end; mfg, mh166 |
Re: Größe und Position der Taskbar ermitteln?
:shock:
So einfach? Danke... :wall: //Edit: Im Nachhinein würde sich das auch ganz gut in der CL machen. Im Zuge der aktuellen Abarbeitung werde ich die Funktion mal entsprechend aufbereiten und zur Diskussion stellen. |
Re: Größe und Position der Taskbar ermitteln?
Freut mich, dass ich helfen konnte. :D Hatte auch lange gebraucht ... Kollege hats mir dann zum Glück gezeigt. ;)
Aber n Beitrag dazu in die CL wär klasse. Bereite mal schön. =) mfg, mh166 |
Re: Größe und Position der Taskbar ermitteln?
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz