Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Systray + Gauge1.Progress = FEHLOOOOR (https://www.delphipraxis.net/56864-systray-gauge1-progress-%3D-fehloooor.html)

A-M-X 12. Nov 2005 14:08


Systray + Gauge1.Progress = FEHLOOOOR
 
Huhu!!

Habe folgenden (teil)Code beim Minimieren meines Projektes und mein Problem ist , dass er ne Fehlermeldung bei dem Tooltip sagt:

Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
if CheckBox1.Checked = true then
begin
  //Vorgang: Minimieren der Anwendung, Entfernung des Taskleisteneintrags
  //und Hinzufügen des Programmicons neben der Uhr
  Form1.FormStyle:=fsStayOnTop;
  Hide;
  with NIM do begin
    cbSize := SizeOf (nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    hIcon := Application.Icon.Handle;
    szTip := Gauge1.Progress; //<--- DA T.T
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);
end
else
begin
end;
end;
Beim Markierten (" <--- DA T.T") wird eine Fehlermeldung gezeigt: Inkompatible Typen : Array und Integer;
mit IntToStr gehts auch ned :/

Neutral General 12. Nov 2005 14:15

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
Da stellen sich die Fragen : Was ist NIM ? Was ist szTip ? Ist szTip ein Array of Integer ? dann musst du ein Index angeben...

A-M-X 12. Nov 2005 14:17

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
so sieht der beispielcode einer homepage aus:

Delphi-Quellcode:
unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ShellApi, AppEvnts;

const
  IC_CLICK = WM_APP + 201;

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Minimize(Sender: TObject);
    private
      { Private-Deklarationen }
      procedure Systray(var sMsg: TMessage); message IC_CLICK;
    public
      { Public-Deklarationen }
    end;

var
  Form1: TForm1;
  NIM : TNotifyIconData;

implementation

{$R *.DFM}

procedure TForm1.Systray(var sMsg: TMessage);
begin
  // Vorgang: Klick auf das Icon neben der Uhr und Anzeige der Anwendung
  inherited;
  if (sMsg.LParam = WM_LBUTTONDOWN) then begin
    Show;
    Shell_NotifyIcon(NIM_DELETE, @NIM);
    Application.Restore; //zeigt die Anwendung wieder an
  end;
end;

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
  //Vorgang: Minimieren der Anwendung, Entfernung des Taskleisteneintrags
  //und Hinzufügen des Programmicons neben der Uhr
  Form1.FormStyle:=fsStayOnTop;
  Hide;
  with NIM do begin
    cbSize := SizeOf (nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    hIcon := Application.Icon.Handle;
    szTip := 'Test-Programm';
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);
end;

end.

dahead 12. Nov 2005 14:21

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
vielleicht:

szTip := @IntToStr(Gauge1.Progress)[1];

A-M-X 12. Nov 2005 14:23

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
Zitat:

Zitat von dahead
vielleicht:

szTip := @IntToStr(Gauge1.Progress)[1];

"Inkompatible Typen: Array und Pointer"

T.T

dahead 12. Nov 2005 14:38

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
mhh.

Delphi-Quellcode:
var
  HintText: String;
begin
  HintText := IntToStr(Gauge1.Progress);
  with NIM do
   begin
    Move(HintText[1], szTip, Length(szTip));
    Shell_NotifyIcon(NIM_MODIFY, @TrayIcon);
   end;
end;
kann das leider gerade nicht ausprobieren, könnte aber funktionieren.

A-M-X 12. Nov 2005 14:49

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
öhm entweder habs ned geblickt oder es geht ned >.<

dahead 12. Nov 2005 14:57

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
ich hab es wie folgt geschafft:

Delphi-Quellcode:
var
  tmpStr: String;
begin
  Form1.FormStyle:=fsStayOnTop;
  Hide;
  with NIM do begin
    cbSize := SizeOf (nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    hIcon := Application.Icon.Handle;
    tmpStr := IntToStr(Gauge1.Position);
    Move(tmpStr[1], szTip, Length(szTip));
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);

A-M-X 12. Nov 2005 15:02

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
cool das geht!! vielen dank!!

noch ne kleine frage: wenn die gauge nun hochgeht und ich drüberfahr mit der maus , wie geht es , dass es dauernd aktuallisiert? also ned nur den wert der gauge nimmt , der beim minimieren auftritt

dahead 12. Nov 2005 15:20

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
meinst du den hint/tooltip?

wenn ja, dann musst du den hint halt ständig aktualisieren (Gauge1.Hint := xx).

um die aktualisierung (für die gesamte application) zu ändern könntest du folg. befehle verwenden:

Application.HintHidePause := xx;
Application.HintPause := xx;

A-M-X 12. Nov 2005 15:23

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
was kommt dann ins xx rein und wo setz ich diesen befehl ein? in nen timer?

dahead 12. Nov 2005 15:26

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
also die generellen Hint-Eigenschaften (HintPause, HintHidePause, usw.) setzt du am besten im OnCreate deiner Form. Den Hint der Gauge kannst du durch einen Timer aktualisieren, ich würde den Wert allerdings dort aktualisieren, wo du die Position der Gauge erhöhst. Somit brauchst du keinen Timer extra dafür und das Ereignis wird nicht sinnlos wiederholt.

Informationen zu den xx gibt es in der Hilfe. Die Angabe ist die Zeit in Millisekunden.

A-M-X 12. Nov 2005 15:29

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
hm geht irgendwie ned o.o bei Gauge1.Hint := 1000 sagt er Inkompatible Typen "Integer und String"

dahead 12. Nov 2005 15:34

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
das ist ja klar. der hint ist vom typ string. 1000 ist eine zahl die du erst umwandeln musst.

zb. mit Hint := IntToStr(Gauge1.Position);
oder Hint := IntToStr(666);

A-M-X 12. Nov 2005 16:10

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
aber wenn ich Gauge1.Hint := IntToStr(1000) mache dann ändert sich das , klar , aber die zahl ändert sich doch? o.o

ich blick echt ned wie das gehen soll , kannste mir ma n paar codes aufschreiben plz? T.T

dahead 12. Nov 2005 16:15

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
was willst du denn im hint anzeigen? doch die position der Gauge, oder?

wenn ja, dann schreib folgendes:

Gauge1.Hint := 'Position ' + IntToStr(Gauge1.Position);

oder

Gauge1.Hint := Format('Position %d', [Gauge1.Position]);

A-M-X 12. Nov 2005 16:52

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
wo rein schreiben? ^^"

also ich möcht beim Mouseover beim Systrayicon dass da dann in diesem Hint steht , bei wievielen % er is ^^ also dass sich das bei ner änderung aktuallisiert

dahead 12. Nov 2005 17:00

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
achso.

als wie das bei onmouseover über dem TrayIcon geht, kann ich dir nicht sagen. Ich würde dir die TCoolTrayIcon Komponente von Torry empfehlen. Ist wesentlich schlanker als die bei den Jedis, und die dürfte dieses ereignis bereits implementiert haben. ansonsten musst du das per Hand machen (weiß ich aber nicht wie).

Zum ändern des Tooltips deines TrayIcon NIM:

(das hier bspw. in einen Timer packen oder in eine prozedur, sobald sich die Gauge Progress erhöht).

Delphi-Quellcode:
with NIM do
 begin
  ...
  HintText := IntToStr(Gauge1.Position);
  ...
  Move(HintText[1], szTip, Length(szTip)); //wie gehabt, HintText anpassen.
  Shell_NotifyIcon(NIM_MODIFY, @NIM); // <-- Hier wichtig: NIM_Modify teilt dem TrayIcon mit, dass es sich um eine Änderung handelt.
 end;

A-M-X 13. Nov 2005 10:21

Re: Systray + Gauge1.Progress = FEHLOOOOR
 
Super!! Das klappt wie geschmiert!

echt großes danke an dich! :thumb: :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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-2025 by Thomas Breitkreuz