Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Trayicon Position mit Jedi. Fehler?? (https://www.delphipraxis.net/176382-trayicon-position-mit-jedi-fehler.html)

DelTurbo 1. Sep 2013 09:54


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

Zacherl 1. Sep 2013 17:29

AW: Trayicon Position
 
Was heißt "funktioniert nicht mehr"? Welchen Fehlercode bekommst du denn?

DelTurbo 2. Sep 2013 07:40

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.

jbg 2. Sep 2013 11:21

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.

DelTurbo 2. Sep 2013 11:30

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

Luckie 2. Sep 2013 11:53

AW: Trayicon Position mit Jedi. Fehler??
 
Wozu brauchst du denn die Position des Trayicons überhaupt?

DelTurbo 2. Sep 2013 12:03

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?

Thom 2. Sep 2013 12:09

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.

DelTurbo 2. Sep 2013 12:13

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.

Luckie 2. Sep 2013 13:00

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.

DelTurbo 2. Sep 2013 13:19

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;

Medium 2. Sep 2013 14:58

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.

DelTurbo 2. Sep 2013 15:00

AW: Trayicon Position mit Jedi. Fehler??
 
Zitat:

Zitat von Medium (Beitrag 1226880)
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.

So werd ich das denn auch machen. Geht ja wohl nicht anders. Danke.

Luckie 2. Sep 2013 21:12

AW: Trayicon Position mit Jedi. Fehler??
 
Siehst du, meine Frage nach dem Warum war doch nicht so verkehrt. ;)

DelTurbo 3. Sep 2013 10:04

AW: Trayicon Position mit Jedi. Fehler??
 
Zitat:

Zitat von Luckie (Beitrag 1226925)
Siehst du, meine Frage nach dem Warum war doch nicht so verkehrt. ;)

Nein natürlich nicht. Aber bei meinen "suchen" im netz lese ich sehr oft z.b.

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:

DelTurbo 9. Sep 2013 08:24

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