Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie kann ich prüfen ob die Taskbar gerade angezeigt wird? (https://www.delphipraxis.net/8435-wie-kann-ich-pruefen-ob-die-taskbar-gerade-angezeigt-wird.html)

aMuTeX 4. Sep 2003 15:26


Wie kann ich prüfen ob die Taskbar gerade angezeigt wird?
 
Sowas wie

Code:
if TaskBar.Visible then ...
gibts wohl nicht? Oder?

Die Muhkuh 4. Sep 2003 15:36

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Ausserdem müsste es eh so heißen
Delphi-Quellcode:
 if Taskbar.Visible = true {oder false} then...
Was hast du überhaupt vor???

Tpercon 4. Sep 2003 15:40

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Zitat:

Zitat von Spider
Ausserdem müsste es eh so heißen
Delphi-Quellcode:
 if Taskbar.Visible = true {oder false} then...

Und wo ist der Unterschied zu dem Code von aMuTeX? Das = treu kann man weg lassen!!

neolithos 4. Sep 2003 15:41

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Schreib es bitte nicht SO

Zitat:

if Taskbar.Visible = true {oder false} then...
das erzeugt zuviel Code und ist langsam.
außerdem ist der Programmierer faul

ALSO

Zitat:

if Taskbar.Visible then...

Ganz nebenbei

mittels SHAppBarMessage und dem Handle der SysTray (TaskBar) kann man das erfragen.

Dannyboy 4. Sep 2003 15:42

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Zitat:

if Taskbar.Visible = true {oder false} then...

if TaskBar.Visible then ...

Beide Varianten sind möglich und in der Negation kann man auch schreiben:


Delphi-Quellcode:
var a : boolean;

if not a then ...

 //oder

if a = false then ...
ist beides möglich.

Gruß. DANNYBOY

aMuTeX 4. Sep 2003 15:57

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
@neolithos


wie meinst du das? Kannst du bitte etwas präziser werden?

Code:
function IsTaskbarVisible: Boolean;
var
  tabd: TAppBarData;
begin
  FillChar(tabd, SizeOf(TAppBarData), 0);
  tabd.cbSize := SizeOf(TAppBarData);
  if SHAppBarMessage(ABM_GETTASKBARPOS, Tabd) = 0 then Exit;
  Result := tabd. ????;
end;
Wo im TAppBarData Objekt steht denn nun ob die sie gerade angezeigt wird oder nicht?

Danke für eure Hilfe.

neolithos 4. Sep 2003 16:27

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Erstmal in der MSDN steht die weißheit


Delphi-Quellcode:
abd.cbSize := SizeOf(app);
abd.rc := Rect(0, 0, 0, 0);
abd.lParam := 0;
abd.hWnd := FindWindow('Shell_TrayWnd', nil); // Handle auf Taskbar
SHAppBarMessage(ABM_GETSTATE, abd);
if (abd.lParam and ABS_AUTOHIDE) = 0 then
   begin // ist nicht AutoHide-Mode
     // Prüfung ob benutzer Sie klein gezogen hat is ja fast unsichtbar
     SHAppBarMessage(ABM_GETTASKBARPOS, abd);
     ...
  else
     // unsichtbar

aMuTeX 8. Sep 2003 14:51

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Also bei mir funktioniert das irgendwie nicht, oder wir verstehen uns falsch ;-)

Ist das evtl. vom OS abhängig? Ich benutze WinNT4SP6 und Delphi 6.

abd.lParam ist immer 0. Egal ob AutoHide eingeschaltet ist oder nicht.

Aber ich will ja eigentlich auch gar nicht wissen ob AutoHide ein ist oder nicht. Ich will nur wissen ob die Taskbar sichtbar ist oder nicht. Also wenn AutoHide = False und AlwaysOnTop = True dann ist ja die Taskbar immer sichtbar. Aber bei AutoHide = False kann die Taskbar ja versteckt sein oder eben sichtbar. Je nachdem wo die Maus gerade ist. Wie finde ich das raus?

neolithos 8. Sep 2003 15:26

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Reicht dir vielleicht das...

Delphi-Quellcode:
if IsWindowVisibleFindWindow('Shell_TrayWnd', nil)) then
   Sichtbar
else
   UnSichtBar

aMuTeX 9. Sep 2003 08:54

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Das geht leider auch nicht :-(

IsWindowVisible ist immer True. Auch wenn die Taskbar gerade ausgeblendet ist. Läuft das bei dir? OS?

Vielleicht noch andere Ideen?

Danke für jeden Tipp.

neolithos 9. Sep 2003 08:58

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Das war mir klar!

Aber ich weiß leider immer noch nicht warum du das wissen möchtest!

Das könnte helfen dein Problem zu lösen...

aMuTeX 9. Sep 2003 09:08

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Ich zeichne periodisch ein Bitmap und wandle das dann in ein Icon um welches als TrayIcon (neben der Uhr) angezeigt wird. Das muss nun aber nicht gemacht werden falls die Taskbar unsichtbar ist => Ressourcen sparen.

neolithos 9. Sep 2003 09:25

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Dann wäre es auch möglich zu prüfen in wieweit die Taskbar sichtbar ist.

Delphi-Quellcode:
GetWindowRect(FindWindow('Shell_TrayWnd', nil), rc1);
rc2 := Rect(0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
Vergleiche die zwei rechtecke!
Beachte das die Taskbar immer ein bisschen sicht bar ist aber dein Symbol nicht.

aMuTeX 9. Sep 2003 10:37

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Das ist zwar ein Ansatz aber auch nicht gerade einfach. Die Taskbar kann ja schliesslich an jeder Seite des Desktops platziert sein und sie kann auch unterschiedlich gross sein (auch noch abhängig vom OS). Das ergäbe eine ziemliche rechnerei, was womöglich den Aufwand der Bitmaperzeugung übersteigen würde und somit den Vorteil (Rechenzeit sparen) zunichte machen würde.

Am Besten wäre wenn Windows eine Nachricht schicken würde sobald die Taskbar aufklappt/zuklappt. Die könnte ich abfangen und ein Flag setzen. Das wäre Ressourcenschonend. Aber bis jetzt hab ich nocht nichts dergleichen gefunden. :cry: Oder gibts doch einen Event dafür?

neolithos 9. Sep 2003 10:47

Re: Wie kann ich prüfen ob die Taskbar gerade angezeigt wird
 
Sowas ist mir nicht bekannt, aber mach die keine sorgen. Da die wenigsten nutzer an den Einstellungen der Taskbar selten auf AutoHide stellen.


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