Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Icongröße der TNA (Tray) ermitteln (https://www.delphipraxis.net/58313-icongroesse-der-tna-tray-ermitteln.html)

Pichel 5. Dez 2005 14:15


Icongröße der TNA (Tray) ermitteln
 
Betr.: Icongröße der TNA (Tray) ermitteln

Hallöchen

Habe schon heftig gesucht, aber leider nichts verwertbares gefunden.

Man kann ja alle möglichen Systemparameter ermitteln nur wo erfährt man die Icon-Größe des System-Tray. Bis XP auftrauchte waren die Icons immer 16x16 nur seit XP sind 20x20 Icons dort.

Ich meine, mann kan zwar einfach im Programm festellen: wenn OS = XP oder höher dann 20x20er Icons erzeugen ansonsten weiterhin 16x16er. Aber aus Interesse wäre es doch schon wenn man dies direkt abfragen könnte.
Hat da jemand ne Idee.

Gruße aus Kassel.

Luckie 5. Dez 2005 14:23

Re: Icongröße der TNA (Tray) ermitteln
 
Hm, mir ist da nichts bekannt. Aber das ist im Endeffekt auch nur eine Toolbar. Man könnte also die nötigen Informationen übr die Nachricht TB_GETBUTTONINFO ermitteln.

Schöne Grüße aus Vellmar übrigens. :)

Pichel 5. Dez 2005 14:50

Re: Icongröße der TNA (Tray) ermitteln
 
Zitat:

Zitat von Luckie
Schöne Grüße aus Vellmar übrigens. :)

Hey, noch jemand im Schatten des Herkules ;-)

Also habe es mal auf die Schnelle probiert was gesammelt und zusammengebaut (quick&dirty)
Ergebnis ist aber unter XP immer 32, möchte aber die tatsächliche Größe (20) zurück bekommen.

Delphi-Quellcode:
uses commCtrl;
var tBB : TTBBUTTON;
    tBI : TBBUTTONINFO;
    TaskbarHwnd, TrayHwnd: HWND;
begin
  TaskbarHwnd := FindWindow('Shell_TrayWnd',nil);
  TrayHwnd := FindWindowEx(TaskbarHwnd,0,'TrayNotifyWnd',nil);
  FillChar(tBB, SizeOf(tBB), 0);
  SendMessage (TrayHwnd, TB_GETBUTTON, 0, Integer(@tBB));
  FillChar(tBI, SizeOf(tBI), 0);
  tBI.cbSize := SizeOf(tBI);
  tBI.dwMask := TBIF_STYLE;
  SendMessage(TrayHwnd, TB_GETBUTTONINFO, tBB.idCommand, Integer(@tBI));
  Caption := IntToStr(tBi.cbSize);
end;
Grüße aus Kassel, nach Vellmar und dem Rest der Welt.

Luckie 5. Dez 2005 20:58

Re: Icongröße der TNA (Tray) ermitteln
 
Unter Windows 2000 bekomme ich auch 32 zurück. :gruebel:

Pichel 6. Dez 2005 05:31

Re: Icongröße der TNA (Tray) ermitteln
 
Zitat:

Zitat von Luckie
Unter Windows 2000 bekomme ich auch 32 zurück. :gruebel:

Yep... und da ist das Problem. Unter < XP werden Sie in der Regel als 16x16 angezeigt. Aber das muß man doch nun wirklich irgendwo abfragen können.
Eine Abfrage der Höhe und Breite der NotificationArea bringt auch nix, da man ja die Taskleiste auch höher bzw. breiter machen kann und somit mehrzeilig die Icons vorhanden sein können.
Irgendwie komme ich da nicht weiter und die bisherige Lösung ist nicht gerade elegant: wenn XP zeichne ein 20er Icon ansonsten ein 16er.

Luckie 6. Dez 2005 08:15

Re: Icongröße der TNA (Tray) ermitteln
 
Warum eigentlich nich, wenn du weißt, dass es unter XP die großen sind?

teebee 6. Dez 2005 10:26

Re: Icongröße der TNA (Tray) ermitteln
 
Habe hier leider gerade kein XP, aber ich glaube, wenn man das klassische Design aktiviert hat, werden die System-Tray-Icons auch unter XP mit 16x16 dargestellt. Vielleicht hilft ein Aufruf von
Delphi-Quellcode:
size := GetSystemMetrics(SM_CXSMICON);
? Kann ich wie gesagt leider gerade selber nicht ausprobieren.

Gruß, teebee

turboPASCAL 6. Dez 2005 10:44

Re: Icongröße der TNA (Tray) ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das Window heisst "SysPager" und hat auch nur eine grösse von 16x16 (18x18 bzw. 20x20 Win. intern).

Delphi-Quellcode:
// Shell_TrayWnd
//    |- Button
//    |- ReBarWindow32
//    |    |- MSTaskSwWClass
//    |    |    +- ToolbarWindow32
//    |    +- ToolbarWindow32
//    +- TrayNotifyWnd
//         |- TrayClockWClass
//         |- SysPager
//         |    +- ToolbarWindow32
//         +- Button

  Shell_TrayWnd_HWND := FindWindow('Shell_TrayWnd', nil);
  TrayNotifyWnd_HWND := FindWindowEx(Shell_TrayWnd_HWND, 0, 'TrayNotifyWnd',nil);
  SysPager_HWND     := FindWindowEx(TrayNotifyWnd_HWND, 0, 'SysPager',nil);

Pichel 6. Dez 2005 15:32

Re: Icongröße der TNA (Tray) ermitteln
 
Zitat:

Zitat von turboPASCAL
Das Window heisst "SysPager" und hat auch nur eine grösse von 16x16 (18x18 bzw. 20x20 Win. intern).

Vorab: ich finde es genial gleich ein solches Beispiel zu posten, danke!

Daraus kann man jedoch leider noch keine endgültigen Schlüsse auf die tatsächliche Icon-Größe schliessen, da das Fenster halt nicht quadratische Maße liefert sofern mehr als 1 Icon vorhanden sind.
Einfach die Höhe anzunehmen ist auch nicht 100% schlüssig, denn es soll doch Leute geben die die Taskleiste höher machen so das zB 12 Icons in drei Reihen passen... :-(

turboPASCAL 7. Dez 2005 10:45

Re: Icongröße der TNA (Tray) ermitteln
 
Zitat:

...denn es soll doch Leute geben die die Taskleiste höher machen so das zB 12 Icons in...
Sitmmt, war aber nur ein hinweis auf das richtige Fensterhandle der TNA, wobei man sich auf die ToolbarWindow32 beziehen sollte. TrayNotifyWnd ist ja das gesamte Fenster mit Uhr, Icons und Inaktive Symbole-Button. Merkwürdigerweise wird auch hier eine Buttongrösse von 32 zurückgegeben.
Delphi-Quellcode:
Size := SendMessage(ToolbarWindow32_Handle, TB_GETBUTTONINFO, ...);
:gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 Uhr.
Seite 1 von 2  1 2      

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