AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CallbackMessage TNotifyIconData

Ein Thema von Desmulator · begonnen am 25. Dez 2007 · letzter Beitrag vom 26. Dez 2007
Antwort Antwort
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#1

CallbackMessage TNotifyIconData

  Alt 25. Dez 2007, 00:43
HalliHallo

Bevor ich anfange zu texten erst einmal allen Frohe Weihnachten ...

Naja also es geht um Messages und um das Icon in der SysTray...

Folgender Code:

Delphi-Quellcode:
const
 WM_TASKBARICON = WM_USER + 0; { Wichtige Message }

...

type
  TTaskBarIcon = class(TObject)
    private
      ...
      //MessageFunktion
      procedure WMTaskbarEvent(var Msg: TMessage); message WM_TASKBARICON;

...

IcoData.uCallbackMessage := WM_TASKBARICON;

...

procedure TTaskBarIcon.WMTaskbarEvent(var Msg: TMessage);
var
  Point: TPoint;
begin
  showmessage('klick');
  try
    case Msg.LParamLo of
      WM_LBUTTONDOWN: begin
                          if Assigned(OnClick) then
                            OnClick();
                      end;
      WM_RBUTTONDOWN: begin
                          SetForegroundWindow(FOwner);
                          GetCursorPos(Point);
                          FPopupMenu.popup(Point.X,Point.Y);
                     end;
    end;
  except
    //Fehler: nichts
  end;
end;
Eigendlich müsste ja testweise bei einem Klick auf das Icon die Nachricht "klick" angezeigt werden, aber das passier nicht. Ich weiß nicht sowarn es liegt, die namen habe ich auch schon tausendmal kontrolliert, es stimmt allse.

Zur Info: das ganze ist in einer selbstgeschriebnen Unit. Ka ob das was damit zu tun hat, glaube net...

Und es läuft wärend dessen eine Schleife dauerhaft... ich mal dass das auch nicht schlimm ist...

Delphi-Quellcode:
while not Application.Terminated do begin


end;
Naja danke für eure Hilfe vorab!
Lars
  Mit Zitat antworten Zitat
ManfredG

Registriert seit: 12. Feb 2007
Ort: Berlin
34 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: CallbackMessage TNotifyIconData

  Alt 25. Dez 2007, 09:13
ich denke du mußt windows noch sagen, wie es deine botschaft zu verwenden hat
und zwar durch aufruf von TaskBarAddIcon

Delphi-Quellcode:
//******************************************************************************
// TASKBAR
procedure TaskBarAddIcon;
var tnid : TNOTIFYICONDATA;
begin
 tnid.cbSize := sizeof(TNOTIFYICONDATA);
 tnid.Wnd := HF.Handle;
 tnid.uID := 1;
 tnid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
 tnid.uCallbackMessage := WMU_TASKBAREVENT;
 tnid.hIcon :=HF.IconImg.picture.icon.handle;
 strcopy(tnid.szTip,'Outlookmodul');
 Shell_NotifyIcon(NIM_ADD, @tnid);
end;

procedure TaskBarRemoveIcon;
var tnid : TNOTIFYICONDATA ;
begin
 tnid.cbSize := sizeof(TNOTIFYICONDATA);
 tnid.Wnd := HF.Handle;
 tnid.uID := 1;
 Shell_NotifyIcon(NIM_DELETE, @tnid);
end;

procedure TaskBarChgTip(Tip: string);
var tnid : TNOTIFYICONDATA ;
begin
 tnid.cbSize := sizeof(TNOTIFYICONDATA);
 tnid.Wnd := HF.Handle;
 tnid.uID := 1;
 tnid.uFlags := NIF_TIP;
 strcopy(tnid.szTip,pChar(Tip));
 if not Shell_NotifyIcon(NIM_MODIFY, @tnid)
 then ShowMessage('Modifikation falsch');
end;
// TASKBAR
//******************************************************************************
frohe weihnachten alle
manfred
Manfred Götze
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: CallbackMessage TNotifyIconData

  Alt 25. Dez 2007, 10:35
Zitat von Desmulator:
Und es läuft wärend dessen eine Schleife dauerhaft... ich mal dass das auch nicht schlimm ist...
Delphi-Quellcode:
while not Application.Terminated do begin


end;
Naja danke für eure Hilfe vorab!
Delphi-Quellcode:
while not Application.Terminated do begin
  Application.processMessages; //find ich allerdings nicht besonders sauber
  
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#4

Re: CallbackMessage TNotifyIconData

  Alt 25. Dez 2007, 11:09
@ManfredG : ich weiß nicht was du meinst, ich habe eine extra unit für das icon geschrieben, die alles kann... nur bei der message hackts noch was...

@sirius: hm... geht trozdem nicht
Lars
  Mit Zitat antworten Zitat
ManfredG

Registriert seit: 12. Feb 2007
Ort: Berlin
34 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: CallbackMessage TNotifyIconData

  Alt 25. Dez 2007, 11:41
wie verwendest du denn deine unit?
Manfred Götze
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#6

Re: CallbackMessage TNotifyIconData

  Alt 25. Dez 2007, 19:07
Ja das ist ganz einfach:

Delphi-Quellcode:
var
 Ico: TTaskBarIcon;

...

Ico := TTaskBarIcon.Create(Application.Handle,'C:/beispiel.ico'); //Ab hier ist das Iocn in der Leiste
Ico.ToolTipp := 'Das ist ein Beispiel'; //Ab hier wird nun auch noch der ToolTipp angezeigt

...

Ico.Destroy; //Das Icon is wieder weg
Warum willst du das wissen? Es geht doch eigendlcih nur um die Message die nicht ankommt/abgesendet wird...
Lars
  Mit Zitat antworten Zitat
ManfredG

Registriert seit: 12. Feb 2007
Ort: Berlin
34 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: CallbackMessage TNotifyIconData

  Alt 25. Dez 2007, 22:28
Ich wollte wissen, mit welchem handle du dein objekt initialisierst.

Bin mir nicht ganz sicher, aber das problem liegt wohl darin, daß du an windows "Application.Handle" übergibst.
In TNOTIFYICONDATA wird windows mitgeteilt, wohin die botschaften gehen sollen und es wird ein Fenster-Handle verlangt.
Die botschaft WM_TASKBARICON wird dann an das fenster geschickt, dessen Handle du übergeben hast.
Dein objekt ist aber kein fenster und kann deshalb keine botschaft empfangen, deshalb reagiert die botschaftsfunktion dort nicht.

Entweder du änderst TTaskBarIcon in eine Class wie TForm, damit dort ein Fenster-Handle verfügbar ist (kann ja unsichtbar sein) oder du legst die Botschaftsfunktion in das Hauptfenster, was weniger gut ist, weilt du dann das objekt imer benachrichtigen müßtest und das widerspricht dem sinn.

vielleicht hat jemand eine idee, wie man das einfach machen kann.

gruß manfred
Manfred Götze
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#8

Re: CallbackMessage TNotifyIconData

  Alt 26. Dez 2007, 10:56
Hm.. du meinst also, dass ich ein unsichbares fenster in der Instanz erzeugen soll, von dem der handle übergeben werden soll.
Delphi-Quellcode:
type
 TTaskBarIcon = class(TObject)
   private
    Form: TForm;
  ...

constrctor TaskBarIcon.Create(...);
begin
...
Form := TForm.Create(Application.Owner);
...
end;
Dann übergebe ich noch das handle...

Naja werds mal aufprobieren, bin atm nicht zu hause^^
Lars
  Mit Zitat antworten Zitat
ManfredG

Registriert seit: 12. Feb 2007
Ort: Berlin
34 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: CallbackMessage TNotifyIconData

  Alt 26. Dez 2007, 13:06
nein, mehr in der form:

Delphi-Quellcode:
const WM_TASKBARICON = WM_USER+nnn;

type
TTaskBarIcon = class(TWinControl)
   private
      procedure WMTaskbarEvent(var Msg: TMessage); message WM_TASKBARICON;
  ...

constructor TaskBarIcon.Create(AOwner: TComponent);
var tnid : TNOTIFYICONDATA;
begin
  inherited Create(AOwner);
  Visible := FALSE;
  tnid.cbSize := sizeof(TNOTIFYICONDATA);
  tnid.Wnd := Self.Handle;
  tnid.uID := 1;
  tnid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
  tnid.uCallbackMessage := WM_TASKBARICON;
  tnid.hIcon :=Application.MainForm.IconImg.picture.icon.handle;
  strcopy(tnid.szTip,'ProgName');
  Shell_NotifyIcon(NIM_ADD, @tnid);
...
end;

procedure TaskBarIcon.WMTASKBAREVENT(var message: TMessage);
var point : TPoint;
begin
 case message.LParamLo of
  WM_LBUTTONDOWN : begin
                    Application.MainForm.Show; // so ungefähr
                   end;
  WM_RBUTTONDOWN : begin
                    GetCursorPos(point);
                    PM_Task.PopUp(point.x,point.y); // z.B. ein PopUp-Menü
                   end;
 end;
end;
Manfred Götze
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:54 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