AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Icongröße der TNA (Tray) ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Icongröße der TNA (Tray) ermitteln

Ein Thema von Pichel · begonnen am 5. Dez 2005 · letzter Beitrag vom 18. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#1

Icongröße der TNA (Tray) ermitteln

  Alt 5. Dez 2005, 14:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 5. Dez 2005, 14:23
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#3

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

  Alt 5. Dez 2005, 14:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

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

  Alt 5. Dez 2005, 20:58
Unter Windows 2000 bekomme ich auch 32 zurück.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#5

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

  Alt 6. Dez 2005, 05:31
Zitat von Luckie:
Unter Windows 2000 bekomme ich auch 32 zurück.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 6. Dez 2005, 08:15
Warum eigentlich nich, wenn du weißt, dass es unter XP die großen sind?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#7

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

  Alt 6. Dez 2005, 10:26
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 vonsize := GetSystemMetrics(SM_CXSMICON); ? Kann ich wie gesagt leider gerade selber nicht ausprobieren.

Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#8

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

  Alt 6. Dez 2005, 10:44
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);
Angehängte Dateien
Dateityp: zip shell_traywnd_481.zip (2,3 KB, 21x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#9

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

  Alt 6. Dez 2005, 15:32
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...
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#10

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

  Alt 7. Dez 2005, 10:45
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.Size := SendMessage(ToolbarWindow32_Handle, TB_GETBUTTONINFO, ...);
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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