![]() |
AW: Dynamische Position der unteren Taskbar
Für Interessierte:
![]() |
AW: Dynamische Position der unteren Taskbar
@TheGroudonx
So wie ich das verstehe suchst du nach einer Art Message die ausgelöst wird, wenn sich die Taskbar ändert. Hast du schon versucht das Pferd von der anderen Richtung aufzuzäumen? Vielleicht solltest du nicht die Reaktion suchen ob sich die Taskbar ändert, sondern ob sich z. B. WorkArea ändert. Das ist der nutzbarer Bereich, also Desktop ohne (in der Regel nur) Taskbar. Der ändert sich nämlich, die Taskbar ist nur ein Programm. Ob es dafür eine Message gibt, weiß ich auch nicht, aber Fenster passen sich bei der Änderung an. Und die passen sich nicht an weil die Taskbar sich ändert, sondern weil sich WorkArea ändert. |
AW: Dynamische Position der unteren Taskbar
Liste der Anhänge anzeigen (Anzahl: 1)
Meinst du soetwas hier?
|
AW: Dynamische Position der unteren Taskbar
Mir bringt das eine Menge.
Also weiß keiner, ob der aktuelle, dynamische Top-Wert oder die Höhe der minimierten Taskleiste irgendwo auszulesen ist? :| |
AW: Dynamische Position der unteren Taskbar
Über offizielle APIs?
Nein, das wird es bestimmt garantiert nicht geben, da der Wert absolut nutzlos ist. Entweder das Ding ist da oder nicht. Und wozu soll Windows denn alle möglichen Programme im Millisekundentakt mit massig Änderungsmessagages zumüllen? Der Überganng ist für Programme praktisch nicht existent und die richten sich einfach nur an der WorkArea aus, welche entweder nicht oder ganz eingeschränkt ist, durch irgendwelche AppBars, wie die Windows-Startleiste. Aber ja, man kann sich natürlich die aktuelle Position der Leiste auslesen, direkt aus dem "Window", welches diese Leiste darstellt. |
AW: Dynamische Position der unteren Taskbar
Zitat:
|
AW: Dynamische Position der unteren Taskbar
@Aphton
Die Exe die du angehängt hast scheint genau das zu machen was ich versuche, wenn auch mit etwas niedriger Frequenz, was sich bestimmt ändern lässt. Könntest du dazu evtl. den Code nennen, da es mir sonst nich allzuviel bringt. :-D |
AW: Dynamische Position der unteren Taskbar
Aphton...?
Naja, der Quellcode seines Programms macht das was ich brauche. Jemand eine Ahnung was der Quellcode davon sein könnte? |
AW: Dynamische Position der unteren Taskbar
Zitat:
Delphi-Quellcode:
Verwende anstelle von Button1Click das und kombiniere das Window Handle das zurückgegeben wird das unter der Maus liegt
procedure TForm1.Button1Click(Sender: TObject);
var hTaskbar: HWND; T: TRect; ScrW, ScrH: integer; begin ScrW := Screen.Width; ScrH := Screen.Height; hTaskBar := FindWindow('Shell_TrayWnd', nil); GetWindowRect(hTaskBar, T); if (T.Top > ScrH DIV 2) and (T.Right >= ScrW) then ShowMessage('Bottom of the screen') else if (T.Top < ScrH DIV 2) and (T.Bottom <= ScrW DIV 2) then ShowMessage('Top of the screen') else if (T.left < ScrW DIV 2) and (T.Top <= 0) then ShowMessage('Left side of the screen') else ShowMessage('Right side of the screen'); end; In dem Fall wäre das hTaskBar. Also ist WindowFromPoint(pt) := hTaskBar dann tue das was in dieser Procedure(Button1Click) steht. Wenn du nun die Taskbar verschiebst oder neu positionierst bekommst du in Realzeit die Koordinaten wo sich diese gerade befindet. (Aber! Message boxen sind dafür nicht gerade geeignet)
Delphi-Quellcode:
Ich kann das zwar alles komplett für dich fertig machen.
procedure ScreenToClient2(wnd: HWND; var pt: TPoint);
var r: TRect; begin if GetWindowRect(wnd, r) then begin pt.X := pt.X - r.Left; pt.Y := pt.Y - r.Top; end; end; procedure ClientToScreen2(wnd: HWND; var pt: TPoint); var r: TRect; begin if GetWindowRect(wnd, r) then begin pt.X := pt.X + r.Left; pt.Y := pt.Y + r.Top; end; end; function WindowFromRelativePoint(wnd: HWND; pt: TPoint): HWND; begin ClientToScreen2(wnd,pt); result := WindowFromPoint(pt); end; Aber wo bleibt dann der lern Effekt? Ansonsten wurde alles schon gesagt. gruss |
AW: Dynamische Position der unteren Taskbar
Delphi-Quellcode:
function TaskbarHandle: THandle;
begin Result := FindWindow('Shell_TrayWnd', nil); end; function TrayHandle: THandle; begin Result := FindWindowEx(TaskbarHandle, 0, 'TrayNotifyWnd', nil); end; procedure TForm2.Button1Click(Sender: TObject); var TR : TRECT; begin GetWindowRect(TrayHandle, TR); Memo1.Lines.Add(' LEFT: '+INTTOSTR(TR.Left)); Memo1.Lines.Add(' RIGHT: '+INTTOSTR(TR.Right)); Memo1.Lines.Add(' TOP: '+INTTOSTR(TR.Top)); Memo1.Lines.Add(' BOTTOM: '+INTTOSTR(TR.Bottom)); Memo1.Lines.Add(' HEIGHT: '+INTTOSTR(TR.Height)); Memo1.Lines.Add(' WIDTH: '+INTTOSTR(TR.Width)); end; procedure TForm2.Button2Click(Sender: TObject); var TR : TRECT; begin GetWindowRect(TaskBarHandle, TR); Memo1.Lines.Add(' LEFT: '+INTTOSTR(TR.Left)); Memo1.Lines.Add(' RIGHT: '+INTTOSTR(TR.Right)); Memo1.Lines.Add(' TOP: '+INTTOSTR(TR.Top)); Memo1.Lines.Add(' BOTTOM: '+INTTOSTR(TR.Bottom)); Memo1.Lines.Add(' HEIGHT: '+INTTOSTR(TR.Height)); Memo1.Lines.Add(' WIDTH: '+INTTOSTR(TR.Width)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11: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 by Thomas Breitkreuz