Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dynamische Position der unteren Taskbar (https://www.delphipraxis.net/180581-dynamische-position-der-unteren-taskbar.html)

TheGroudonx 31. Mai 2014 10:36

Dynamische Position der unteren Taskbar
 
Hallo zusammen,

vorab ich habe zu dem Thema schon eine menge Codes ausprobiert, jedoch liefern alle nur eine statische Position der Taskbar.
Ich möchte, die Windowsfunktion <Taskleiste automatisch ausblenden> betreffend, die aktuelle Anzeigeposition der Taskleiste (Y-Position oben und deren Höhe wenn sie minimiert ist) ermitteln, auch während sie nach oben oder unten gescrollt wird.
Wenn ihr Ideen habt lasst sie mich wissen :)

mfg

Perlsau 31. Mai 2014 12:29

AW: Dynamische Position der unteren Taskbar
 
Der Satz ist leider unvollständig: Du möchtest "die aktuelle Anzeigeposition der Taskleiste" was, "... auch während ..."?
Abspeichern? Ermitteln? Ändern? Erhalten? Rot anmalen?

Zitat:

Zitat von TheGroudonx (Beitrag 1260864)
Ich möchte, die Windowsfunktion <Taskleiste automatisch ausblenden> betreffend, die aktuelle Anzeigeposition der Taskleiste (Y-Position oben und deren Höhe wenn sie minimiert ist), auch während sie nach oben oder unten gescrollt wird.


TheGroudonx 31. Mai 2014 13:03

AW: Dynamische Position der unteren Taskbar
 
*ermitteln

TheGroudonx 4. Jun 2014 07:38

AW: Dynamische Position der unteren Taskbar
 
Keiner hier der mir helfen könnte?

Sir Rufo 4. Jun 2014 07:50

AW: Dynamische Position der unteren Taskbar
 
Zitat:

Zitat von TheGroudonx (Beitrag 1261289)
Keiner hier der mir helfen könnte?

Doch, die Schweizer

Und bei Tante Google findet man das mit Bei Google suchendelphi taskbar position (man mag es kaum glauben)

PS: Es gibt keine untere Tastbar, sondern einfach nur eine Tastbar und die kann je nach Einstellung unten, oben, links oder rechts sein

TheGroudonx 4. Jun 2014 13:05

AW: Dynamische Position der unteren Taskbar
 
Tut mir Leid aber der verlinkte, bei den Schweizern gepostete Code funktioniert genausowenig wie die Codes, die ich bisher gefunden habe.
Vielleicht solltest du genauer lesen, welche Anforderungen gefragt sind, ich hätte keinen Thread aufgemacht wenn ich es eben über Google finden könnte.

himitsu 4. Jun 2014 14:09

AW: Dynamische Position der unteren Taskbar
 
Vielleicht könntest du nochmal verständlich erklären, was genau du brauchst.

Hab hier zwar schon mehrfach alles gelesen, aber versteh es dennoch nicht.

Der schöne Günther 4. Jun 2014 16:09

AW: Dynamische Position der unteren Taskbar
 
Hast du mal die Funktion "Taskbar automatisch ausblenden" benutzt? Die verschwindet dann wenn der Mauszeiger weit genug weg ist. Allerdings nicht einfach *puff* sondern wie ein Fenster das nach unten rausgeschoben wird.

Und er möchte nun feststellen, ob die Taskbar nun grade ihre volle Höhe hat oder ihre Aus/einblende-Animation grade dafür sorgt dass sie nur eine Höhe (oder Breite) von x Pixeln hat.

TheGroudonx 7. Jun 2014 08:06

AW: Dynamische Position der unteren Taskbar
 
Genau, der schöne Günther hat recht.
Jedoch weiß ich nicht, wie man auf diese aktuelle Posiion zugreiffen kann.

lbccaleb 7. Jun 2014 09:12

AW: Dynamische Position der unteren Taskbar
 
Verstehe den Sinn auch nicht wirklich, was soll es bringen die Taskbar-Höhe zu ermitteln, während sie sich gerade verkleinert? Wozu?
Und wie man die normale Taskbar-Höhe ermittelt wurde ja bereits genannt.

Luckie 8. Jun 2014 05:03

AW: Dynamische Position der unteren Taskbar
 
Für Interessierte: http://blogs.msdn.com/b/oldnewthing/.../10530714.aspx

Popov 8. Jun 2014 17:11

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.

Aphton 8. Jun 2014 18:42

AW: Dynamische Position der unteren Taskbar
 
Liste der Anhänge anzeigen (Anzahl: 1)
Meinst du soetwas hier?

TheGroudonx 11. Jun 2014 09:40

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? :|

himitsu 11. Jun 2014 09:47

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.

Popov 11. Jun 2014 10:59

AW: Dynamische Position der unteren Taskbar
 
Zitat:

Zitat von TheGroudonx (Beitrag 1261909)
Mir bringt das eine Menge.
Also weiß keiner, ob der aktuelle, dynamische Top-Wert oder die Höhe der minimierten Taskleiste irgendwo auszulesen ist? :|

Hast du eigentlich gelesen was ich geschrieben habe? Programme ändern ihre Größen wenn sich die WorkArea ändert. Die Taskleiste verändert nur die WorkArea. Vielleicht solltest du deine Frage in eine andere Richtung konzentrieren.

TheGroudonx 14. Jun 2014 13:21

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

TheGroudonx 21. Jun 2014 12:58

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?

EWeiss 21. Jun 2014 13:41

AW: Dynamische Position der unteren Taskbar
 
Zitat:

Zitat von TheGroudonx (Beitrag 1263105)
Aphton...?

Naja, der Quellcode seines Programms macht das was ich brauche.
Jemand eine Ahnung was der Quellcode davon sein könnte?

Delphi-Quellcode:
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;
Verwende anstelle von Button1Click das und kombiniere das Window Handle das zurückgegeben wird das unter der Maus liegt
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:
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;
Ich kann das zwar alles komplett für dich fertig machen.
Aber wo bleibt dann der lern Effekt?

Ansonsten wurde alles schon gesagt.

gruss

hathor 21. Jun 2014 14:14

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;

EWeiss 21. Jun 2014 14:17

AW: Dynamische Position der unteren Taskbar
 
Zitat:

Zitat von hathor (Beitrag 1263110)
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;

Er will die Positionen wenn er die Tasbar verschiebt.
Dann mach ihm das auch noch fertig.
Das ist ja nur die hälfte. LOL

gruss

TheGroudonx 22. Jun 2014 18:50

AW: Dynamische Position der unteren Taskbar
 
Dank euch funktioniert mein Programm jetzt noch besser :-D

Vielen Dank


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