![]() |
Trayicon Position mit Jedi. Fehler??
Hi,
ich habe das bisher immer mit dem JediTrayIcon gemacht. Dort gibt es die Funktion function GetIconRect(const AWnd: THandle; const AID: UINT; var IconRect: TRect): Boolean; Lieder musste ich eben feststellen das es nichtmehr und Win7-64bit geht. Ich habe mir auch mal die neuste SVN gezogen. "Fehler" bleibt. Gibt es da etwas anderes/besseres was auch unter 64bit funktioniert? Danke im voraus |
AW: Trayicon Position
Was heißt "funktioniert nicht mehr"? Welchen Fehlercode bekommst du denn?
|
AW: Trayicon Position
False. Ich habe das nun rauf und runter probiert. Es ist bei Win7-64bit (3 verschiedene Installationen).
Ich habe Win2k, XP, Win7 mit 32bit probiert. Überall kommt True und die Position zurück. Selbst wenn ich das False missachte, steht das irgendwas drin. So wie ich das nachverfolgen konnte findet er das Icon nicht. Das MoveNext gibt schon False zurück. |
AW: Trayicon Position mit Jedi. Fehler??
Der Code von TTrayIconEnumerator.Init/MoveNext verrät schon woran es liegt. Hier wird VirtualAllocEx und ReadProcessMemory verwendet um Daten aus der Explorer.exe auszulesen. Da dein Programm jedoch ein 32-Bit Programm und die Explorer.exe ein 64-Bit Programm ist, erlaubt dir Windows die "Kommunikation" nicht.
Da kann man auch nichts machen, außer dass du eine 64-Bit Version deines Programms erstellst. |
AW: Trayicon Position mit Jedi. Fehler??
Schade, 64bit kann ich leider nicht erstellen. Ausserdem wäre das ein OverKill, "nur" für das TrayIcon eine 64bit version zu erstellen. Da muss ich mir dann was anderes einfallen lassen.
Obwohl ich in google und hier im Board leider nix gefunden habe. Vielleicht kennt ja jemand eine lösung des Probs. Vielleicht sogar eine Komponente. Danke im voraus |
AW: Trayicon Position mit Jedi. Fehler??
Wozu brauchst du denn die Position des Trayicons überhaupt?
|
AW: Trayicon Position mit Jedi. Fehler??
Im grunde spielt es keine rolle wofür man es braucht. Aber egal. Mir ging es auf den keks das ich immer den WMP starten muss um Radio zu hören. Zumal WMP die Streams speichert. Und die Programme die es als Freeware gibt, machen noch tausend sachen mehr, die ich nicht brauche.
Also habe ich mir ein kleines Programm gemacht was Radio abspielt. Wenn ich das minimiert habe und auf das TrayIcon klicke, kommt genau über dem Icon ein Schieberegler für die lautstärke. bzw. es kam ;) nun kommt nix mehr. Kennst du eine andere möglichkeit um den "Schieberegler" genau darüber zu positionieren? |
AW: Trayicon Position mit Jedi. Fehler??
Hast Du Dir das mal genau bei der Lautstärkeregelung angeschaut? Der Schieberegler erscheint nämlich nicht genau über dem Icon, sondern zentriert über der Position des Mausklicks.
|
AW: Trayicon Position mit Jedi. Fehler??
Bei mir nicht. Deswegen hab ich ja die Position des TrayIcons ausgelesen. Nicht mit dem Windows regler verwechseln. Das ist eine Form aus meinem Programm.
|
AW: Trayicon Position mit Jedi. Fehler??
Zeig mal den Code für den Klick auf das Icon. Ich habe neben dem Icon des Lautstärkereglers auch Icons und wenn ich auf die Klicke geht der Lautstärgeregler nicht auf. Der Fehler liegt wohl in deinem Code. Und deswegen ist die Frage schon berechtigt wozu man das braucht, weil für so was braucht man es nämlich nicht.
|
AW: Trayicon Position mit Jedi. Fehler??
Also nochmal. Es handelt sich NICHT um den Regler von Windows. Ich habe eine EIGENE Form wo eine TrackBar drauf ist, und die angezeigt wird. Zumal ich nicht wüßte warum es auf 32bit laufen soll. Bevor die frage aufkommt: Die Form heißt VolFrm. Es ist wohl so wie jbg geschrieben hat. Eventuell liest du mal von oben das 4. Post. Hier in dem Beispiel missachte ich das False von GetIconRect. Wenn man rein tracet dann sieht man das MoveNext mit False zurückkommt. Der findet "sein" Icon nicht.
Eigentlich brauchen wir uns nicht weiter daran "aufzuhängen". Es geht halt nicht auf 64bit wenn man ein 32bit Prg erzeugt. Deswegen dachte ich, jemand kennt eventuell eine combo die das kann. Oder hat einen Codeschnipsel wie man die Pos. findet. Gruß
Delphi-Quellcode:
procedure TMainFrm.TrayIconClick(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var TPos :TRect; i :Integer; begin TrayIcon.GetIconRect(TPos); VolFrm.Top:=TPos.Top-(VolFrm.Height+3); i:=TPos.Right-TPos.Left; VolFrm.Left:=(TPos.Left+(i div 2))-(VolFrm.Width div 2); VolFrm.Visible:=True; VolFrm.SetFocus; ForceForegroundWindow(VolFrm.Handle); end; |
AW: Trayicon Position mit Jedi. Fehler??
Aber da man doch dort auf das Icon klickt wo es eben auch auf dem Bildschirm zu sehen ist... was spricht dagegen statt der Icon-Position den Mauszeiger als Ortsreferenz zu nehmen? Die Usability ist defacto die selbe.
|
AW: Trayicon Position mit Jedi. Fehler??
Zitat:
|
AW: Trayicon Position mit Jedi. Fehler??
Siehst du, meine Frage nach dem Warum war doch nicht so verkehrt. ;)
|
AW: Trayicon Position mit Jedi. Fehler??
Zitat:
User1: Wie bekomme ich meinen Bildschirmhintergrund Rot? User2 mit 100.000 Posts: Wozu willst du das machen? Sowas find ich sowas von daneben. Ist doch egal warum er den Rot haben will, oder? Aber wir beide haben an einander vorbei geredet (hatte ich so den eindruck). Das kann passieren. Finde ich im Grunde auch nicht schlimm. Immerhin möchte ich ja hilfe haben. Und bin froh wenn überhaupt einer versucht zu helfen. Ich hoffe du hast meine Antwort nicht so verstanden, das mir die frage auf den keks ging. Sollte der eindruck enstanden sein, dann Sorry. Gruß und nix für ungut :thumb: |
AW: Trayicon Position mit Jedi. Fehler??
Ups, fast vergessen zu "schließen". Ich habe das mit CoolTray gelöst. Ist zwar alt, aber es Funktioniert. Und das ist ja die hauptsache.
Getestet auf: WinXP, Win7 32bit, Win7 64bit Gruß und danke an alle |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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