Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Klick wird nicht erkannt!? (https://www.delphipraxis.net/5854-klick-wird-nicht-erkannt.html)

Daniel B 21. Jun 2003 10:46


Klick wird nicht erkannt!?
 
Hallo,

Delphi-Quellcode:
procedure TForm1.WndProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_TRAYMSG:
      case Message.lParam of
        WM_RBUTTONDOWN : begin
                           ShowMessage('Blupp');
                         end;
      end;
    else
      inherited WndProc(Message);
  end;
end;
Ja wo bleibt denn meine Message? Die erscheint einfach nicht.

Grüsse, Daniel :hi:

Jens Schumann 21. Jun 2003 10:53

Hallo Daniel,
hast Du WM_TRAYMSG in TNotifyIconData auch als uCallBackMessage angegeben?

Daniel B 21. Jun 2003 10:59

Hallo Jens,

ja, habe ich. Linker Doppelklick geht, aber rechter Einfachklick nicht. Seltsam, seltsam...

Grüsse, Daniel :hi:

Jens Schumann 21. Jun 2003 11:21

Hallo Daniel,
es ist wirklich seltsam. Eigentlich müsste es funktionieren.
Poste daoch mal den kompletten Code:

S - tefano 21. Jun 2003 11:21

Hi,

Kenn mich damit jetz nich sooo astrein aus, aber gibts vielleicht irgendwo (bei der Form, beim TNA-Symbol) ne Eigenschaft die den Rechtsklick noch für ein eventuelles PopUp- Menü reserviert hat, die du erst "falsen" musst? :?

Bis dann,

S - tefano

Jens Schumann 21. Jun 2003 11:22

Hallo Daniel,
es ist wirklich seltsam. Eigentlich müsste es funktionieren.
Poste doch mal den kompletten Code.
Ich verwende für den Botschaftswert bei TBNA Anwendungen immer RegisterWindowMessage um eine systemweit eindeutige uCallBackMessage zu bekommen

Daniel B 21. Jun 2003 11:22

Hallo Jens,

ich vermute eher das die Klick schon "erkannt" wird, aber die Message an sich warum auch immer nicht angezeigt wird.
Delphi-Quellcode:
const
  WM_TRAYMSG = WM_USER + 10;
var
  NID : TNotifyIconData = (
    cbsize          : sizeof(TNotifyIconData);
    uID             : 0;
    uFlags          : NIF_MESSAGE or NIF_ICON or NIF_TIP;
    uCallbackMessage : WM_TRAYMSG;
    szTip           : 'Blupp';
  );
Delphi-Quellcode:
procedure TForm1.WndProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_TRAYMSG:
      case Message.lParam of
        WM_RBUTTONDOWN : begin
                           ShowMessage('Blupp');
                         end;
      end;
    else
      inherited WndProc(Message);
  end;
end;
Grüsse, Daniel :hi:

Daniel B 21. Jun 2003 11:25

Hallo,
Zitat:

Zitat von S - tefano
Kenn mich damit jetz nich sooo astrein aus, aber gibts vielleicht irgendwo (bei der Form, beim TNA-Symbol) ne Eigenschaft die den Rechtsklick noch für ein eventuelles PopUp- Menü reserviert hat, die du erst "falsen" musst? :?

Nein, genau das muss ich es erst noch Createn! Ich will beim Rechtsklick ein Menü aufklappen das ich aber vorher noch Createn muss usw. MenüItem erzeugen usw. Leider gibts sowas nciht fertig und man muss das alles von Hand machen. Daher habe ich mir gedacht, um überhaupt zu sehen ob der Rechtsklick überhaupt geht, zeigste mal ne Message an, aber das geht ja schon nicht, Menü kommt dann danach.

Grüsse, Daniel :hi:

Jens Schumann 21. Jun 2003 11:25

Hallo Daniel,
du setzt das Feld Wnd in TNotifyIconData nicht auf das Handle des Formulars . Woher weiss dann das System an welches Fenster es die Nachricht schicken soll ?

Daniel B 21. Jun 2003 11:28

Hallo Jens,

und wie mach ich das? Ich beschäftige mich grad zum ersten mal mit dem API-Mis*. :mrgreen:

Grüsse, Daniel :hi:

Jens Schumann 21. Jun 2003 11:32

Hallo Daniel,
so macht man das
Delphi-Quellcode:
procedure TFormWTC.ShowInTBNA;
var
    aNID : TNotifyIconData;
begin
  with aNID do begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd := Handle; // Hier wird das Handle des Formulars übergeben !!!
    uID := cTaskBarId;
    uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
    uCallBackMessage := WM_TRAYMSG;
    hIcon := LoadImage(hInstance, PChar('WTC16'), IMAGE_ICON, 16, 16, 0);
    szTip := 'WTC';
  end;
  Shell_NotifyIcon(NIM_ADD, @aNID);
  Application.ShowMainForm:=False;
  ShowWindow(Application.Handle,SW_HIDE);
end;
Du initialisierst TNotifyIconData im var Abschnitt. Davon kann ich nur abraten. Schreibe Die lieber ne Methode und mach es dort.

S - tefano 21. Jun 2003 11:34

Hi,

Aber dann würd doch der linke Doppelklick auch nicht gehen, oder?
Und so Sachen wie WM_TRAYMSG und so hast du auch richtig deklariert?
Oder ist das vielleicht auch unter Win32 plattformabhängig? Hab ich vor wenigen Tagen erst mit Hooks erlebt, das man mit denen unter NT-Systemen wegen der verschiedenen Messages ganz anders arbeiten muss als unter 9x...

Bis dann,

S - tefano

Nachtrag
Mist, zu langsam; Mist, falscher Einfall.

Jens Schumann 21. Jun 2003 11:39

Hallo Daniel,
ich verwende RegisterWindowsMessage um den Wert für die uCallBackMessage zu erhalten. Dieser Wert ist dann systemweit eindeutig.
Dann sieht das ganze so aus:
Delphi-Quellcode:
FTaskBarMessage : Word;
Im constructor dann
Delphi-Quellcode:
FTaskBarMessage := RegisterWindowMessage('JSWTCTaskBarMessage');
Delphi-Quellcode:
procedure TFormWTC.WndProc(var Message: TMessage);
begin
  If Message.Msg=FTaskBarMessage then
    begin
    Case Message.lParam of
      WM_RButtonDown  : ShowPopupMenu;
       end;
    end;
  inherited;
end;
Die Sache funktioniert unter Win9x,NT und 2000

Daniel B 21. Jun 2003 12:10

Hallo,

hmm, ich befürchte das es die ganze Zeit schon ging. Nur das nach dem komplizieren, das Editorfenster ja noch sichtbar ist, daher wurde die Message dahinter angezeigt. Sieht wohl so aus und da ich immer mit Strg+F2 Beende, fällt das auch nicht auf das die Message da noch irgendwo ist sondern mit verschwindet.
Jetzt wird die Message angezeigt und ich kann mich jetzt mal dem Menü zuwenden...

Aber trotzdem Danke vielmals für die Hilfe Jens! :thuimb:

Grüsse, Daniel :hi:

Christian Seehase 21. Jun 2003 12:39

Moin Jens,

um ganz sicher zu gehen lasse ich für den zu registrierenden Text immer ein GUID generieren (STRG-SHIFT-G)

Jens Schumann 21. Jun 2003 20:13

Hallo Christian,
gute Idee.
Danke

Christian Seehase 21. Jun 2003 20:22

Moin Jens,

danke für die Rückantwort.
Da konnte ich mir noch mal den dusseligen Satz ( :oops: ) durchlesen und korrigieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 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