![]() |
SystemTray - TNA erweitert!
Hallo Leute,
zuerst möchte ich sagen das die üblichen Fragen wie PopUp, Icon-Animierung im Tray usw. nicht das Problem sind. Vielmehr interessiert es mich wie kann ich das realizieren (siehe Bild)? ![]() Es geht nicht speziell um die Anzeige der Uhr sondern vielmehr um die Größe sowie das Ermöglichen von Buttons in der Darstellung. Nachdem ich mich heute schon wundgesucht habe (MSDN, Google, versch. Delphi Foren Newsgroups etc.) bin ich immer noch nicht zu einem brauchbaren Ansatz gekommen. Oder ist das nur mit einem DeskBand zu bewerkstelligen? Grüsse Alexander |
Re: SystemTray - TNA erweitert!
Zitat:
...:cat:... |
Re: SystemTray - TNA erweitert!
Das sieht mir aber eher danach aus als ob sich das Programm frech ueber der TNA positioniert.
|
Re: SystemTray - TNA erweitert!
Und ich glaube, es ist einfach eine andere Uhr :mrgreen:
![]() ![]() |
Re: SystemTray - TNA erweitert!
Hi.
Zitat:
Ich würde eher sagen, es ist ein besonders breites Icon, das im "OnClick" abprüft, wohin geklickt wurde. |
Re: SystemTray - TNA erweitert!
Zitat:
QnD: multiple TNA anlegen! :p |
Re: SystemTray - TNA erweitert!
Hallo Leute,
@jfheins: Das dachte ich auch zuerst aber es ist eine voll funktionsfähige Anwendung im Tray. @Waldteufel: Das mit dem Breitem Icon habe ich auch schon probiert. Ich erstellte ein 100px X 20px Icon und verfrachtete es in den Tray. Aber es wird nur ca. 16x16 Angezeigt. Ausserdem habe ich versucht über die JvTrayIcon.pas (JEDI) die Breite oder überhaupt Size einzustellen was leider nicht geklappt hat. ////////////////////////////////////////////////////////////////////////////////////////////////// Da ich noch in der Arbeit bin kann ich nicht so wie ich will. Auf einem "Jedermans" Laptop habe ich die Anwendung (Screenshot) installiert und ein Capturing der Funktionen gemacht, anzusehen unter: ![]() Das programm findet Ihr hier: ![]() Eines kann ich sagen dass das Programm mit Delphi 6 erstelt wurde. Bei der Installation wird die D6 Runtime package in das Inst. Verzeichnis kopiert. @Robert Marquardt: Soetwas dachte ich auch. Denn die App. ist nicht nur ein Bildchen (großes Icon) sondern lädt sich und verankert sich wie ein DeskBand. See on: ![]() Hätte ich fast ganz vergessen: Es geht mir nicht um die Uhr, soetwas würde ich mir pers. nie antun, sondern um das verstehen wie die das gemacht haben. Darauf kann man dann seine eigenen Visionen aufbauen. Alexander |
Re: SystemTray - TNA erweitert!
Zitat:
Ansonsten würde ich mal ganz frech empfehlen, dir "PEiD" zu krallen, die Exe damit zu öffnen und zu gucken, welche Funktionen aus den Windows - Bibliotheken dort aufgerufen werden. Is' aber mühsam... (Aber es sagt ja auch keiner, das Programmieren einfach sein soll) |
Re: SystemTray - TNA erweitert!
Zitat:
Zitat:
Hätte ich eh vor. Alexander |
Re: SystemTray - TNA erweitert!
Na dann schau dir doch mal die .dfm Files der Uhr an.
Die JCL enthaelt z. B. das Beispielprogramm PEViewer. Damit kann man sich die Resourcen des Programms ansehen und die .dfm Files sind einfach als Klartext eingebunden. Damit kann man die eingesetzten Komponenten erkennen und welche Events zugewiesen sind. |
Re: SystemTray - TNA erweitert!
Hallo Leute,
das ließ mir einfach keine Ruhe, nun bin ich schlauer. Ein Anfang:
Code:
Gefunden auf unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; StaticText1: TStaticText; procedure Button1Click(Sender: TObject); procedure StaticText1Click(Sender: TObject); procedure ReplaceSystemClock; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin ReplaceSystemClock; end; procedure TForm1.ReplaceSystemClock; var // We need this for calc'ing the size of the System Tray Window Rect: TRect; TaskbarHwnd, TrayHwnd: HWND; begin // First we'll find the taskbar TaskbarHwnd := FindWindow('Shell_TrayWnd',nil); // Next the Tray Window TrayHwnd := FindWindowEx(TaskbarHwnd,0,'TrayNotifyWnd',nil); // Now we need the Rect. of the Tray window so we can // position the TStatictext somewhat accurately GetWindowRect(TrayHwnd,Rect); // Right Justify is recommended because the text will //otherwise extend beyond the TrayWindow bounds StaticText1.Alignment := taRightJustify; // Change the borderstyle to single so we can see if its positioned properly StaticText1.BorderStyle := sbsSingle; // Reposition it so it covers the System Clock StaticText1.Left := (Rect.Right - Rect.Left) - StaticText1.Width - 3; StaticText1.Top := 2; StaticText1.Font.Name := 'Tahoma'; // Disable this, or StaticText1 will move around when you change the text StaticText1.AutoSize := FALSE; // Now comes the interesting part: we shift the Statictext1's parent to the Traywindow Windows.SetParent(StaticText1.Handle,TrayHwnd); // Even though Statictext1 changed owner, we can still manipulate // it like it were in our own form! Which is a great advantage. } StaticText1.Caption := 'Test'; end; procedure TForm1.StaticText1Click(Sender: TObject); const ClickTest: array[0..3] of string = ('this','is','a','test'); begin { Your events will work just as if they were on your form } StaticText1.Caption := ClickTest[StaticText1.Tag]; if StaticText1.Tag < 3 then StaticText1.Tag := StaticText1.Tag + 1 else StaticText1.Tag := 0; end; end. ![]() Autor + Zitat: Mickey Petersen (Jun 7 2001 9:51AM) The example I provided isn't the smartest way to "hide" the system clock.. a better way would be to use GetWindowRect and then SetWindowPos to make sure the Statictext covers the clock completely. It would also ensure that, when you resized the taskbar, that the statictext changed it size to accomodate this. Alexander |
Re: SystemTray - TNA erweitert!
Wirklich nett.
Wenn ich allerdings die ausgeblendeten Symbole einblende verschiebt sich bei mir das Ausgabefeld in den mittleren Bereich. Also doch noch nicht ganz das Optimum. MfG Thorsten |
Re: SystemTray - TNA erweitert!
Ich mach hier mal ein Link, aber Vorsicht, Ausländisch. (und etwas langsam)
![]() ...dort sind die Fensterklasses schön dargestellt. |
Re: SystemTray - TNA erweitert!
Vielleicht dürften diese Links interessant sein:
![]() ![]() //Edit: Und dann noch von den Jungs aus'm DF: ![]() Am interessantesten finde ich diese Aussage von Motzi im o.g. Thread: Zitat:
//Edit2:
Delphi-Quellcode:
Zu dieser Klasse gibt es bei Microsoft ja überhaupt keine Infos?
TrayClockWClass
|
Re: SystemTray - TNA erweitert!
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Habe mal den Code den axellang gepostet hat umgebaut, so dass er exakt ins TrayClock - Fenster passt. Nachtei ist das jeden mal beim WM_Paint Ereignis der Uhr das neue Fenster wieder Übermalt wird.
Delphi-Quellcode:
procedure TForm1.ReplaceSystemClock;
var Rect: TRect; begin TaskbarHwnd := FindWindow('Shell_TrayWnd', nil); TrayHwnd := FindWindowEx( TaskbarHwnd, 0, 'TrayNotifyWnd', nil); ClockHwnd := FindWindowEx(TrayHwnd, 0, 'TrayClockWClass', nil); GetWindowRect(ClockHwnd, Rect); Panel1.AutoSize := False; Panel1.Left := 0; Panel1.Top := 0; Panel1.Width := Rect.Right - Rect.Left; Panel1.Height := Rect.Bottom - Rect.Top; Windows.SetParent(Panel1.Handle, ClockHwnd); Panel1.Caption := 'Test'; end; Um das zu umgehen muss man halt "nur" dieses Ereignis auf seine Paint-Routine umlenken. Ein Link zu selben Thema dazu in russisch: ![]() Leider habe ich bei diesem Code ein Problem mit :
Code:
[Fehler] ...: Ausdruckstyp muß BOOLEAN sein ?
[b]procedure[/b] GetAndSet(h: integer);
[b]var[/b] p, p2: Trect; hand, h2: integer; [b]begin[/b] [b]if[/b] [color=red]pointer(getwindowlong(h, GWL_WNDPROC))@WinProc[/color] [b]then[/b] [b]begin[/b] SavedProc := pointer(SetWindowLong(h, GWL_WNDPROC, cardinal(@Winproc))); [b][...][/b] |
Re: SystemTray - TNA erweitert!
sieht nach tippfehler aus:
Delphi-Quellcode:
Sollte tun.
pointer(getwindowlong(h, GWL_WNDPROC))=@WinProc //man beachte das '='
|
Re: SystemTray - TNA erweitert!
Zitat:
|
Re: SystemTray - TNA erweitert!
Hallo Leute,
ersmal möchte ich mich bei euch allen für die angeregte Dikussion und vor allem für das Über-Den-Tellerrand-Denken bedanken. Gestern Nacht habe ich den kompetten Source einer Anwendung die alle Funktionen beinhaltet erhalten. Leider ist der Source (mit exe) in C/C++ (BCB) geschreiben. Da ich aber nicht grade eine Leuchte in Sachen C/C++ bin, obwohl das Lesen von C/C++ Source auch bei mir Aha-Effekte auslöst werde ich aus dem Ganzen nicht ganz schlau. Leider habe ich nicht die Möglichkeit den Source in eine IDE zu laden um vielleicht das ganze besser zu verstehen (durchzusteppen). Die App. hier zum Download: ![]() Grüsse an die Runde Alexander |
Re: SystemTray - TNA erweitert!
sorry, dass ich diesen Thread aus der Versenkung zurück hole, allerdings versuche ich seit gestern vergeblich die TNA zu vergrößern. Ich habe (mithilfe des Codes aus diesem Thread schon einen Panel an die Stelle der Uhr gesetzt und kann dessen Text halt auch beliebig verändern). Mein Ziel ist allerdings eigentlich _neben_ der Uhr einen weiteren Textbereich zu erstellen indem ich dann eine Zahl (ca. 6 stellig, beliebig wär' mir natürlich auch lieber, weiß aber echt nicht wie es gehensoll) anzeigen möchte.
Ich habe bisher mit SetWindowPos(ClockHwnd, HWND_TOP, ClockRect.Left, ClockRect.Top, ClockRect.Right - ClockRect.Left, ClockRect.Bottom - ClockRect,Topm 0); (dabei ist ClockRect die Größe des zu ClockHwnd gehörenden Dingsbums (Fenster ists ja nich wirklich) und ClockHwnd halt der Handle vom Dingsbums) versucht die Größe der Uhr zu verändern (habe mir halt überlegt, dass ich ja ne eigene anzeigen könnte und daneben den Text (elegantere Wege sind willkommen), allerdings wenn ich diesen Bereich nun größer mache dann scheint sich mein Panel über die anderen Icons drüberzulegen und verdeckt sie ... Wäre für die ein oder andere Zeile Quellcode oder nen klugen Kommentar dankbar :) Lg Lars |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 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