AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Was muss in die Function rein für trayiconpopupmenü
Thema durchsuchen
Ansicht
Themen-Optionen

Was muss in die Function rein für trayiconpopupmenü

Ein Thema von Delphi-Noobie · begonnen am 22. Mär 2004 · letzter Beitrag vom 1. Mai 2004
Antwort Antwort
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#1

Was muss in die Function rein für trayiconpopupmenü

  Alt 22. Mär 2004, 17:42
Code:
unit TNA;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms, ExtCtrls,
  ShellApi, Menus;

const
  k_WM_TASKMSG = WM_APP + 100; //die "100" ist ein frei wählbarer Wert

type
  TForm1 = class(TForm)
    TPopupMenu1: TPopupMenu;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDblClick(Sender: TObject);
    procedure PopupMenuClick(Sender: TObject);
  private
    { Private-Deklarationen } 
    tTNA: TNotifyIconData;

    procedure WMTaskMsg(var Msg: TMessage); message k_WM_TASKMSG;
    procedure AppActive;
    procedure AppDeactivate;
    procedure ShowIcon;
    procedure ChangeIcon;

  public
    { Public-Deklarationen } 
  end;

var
  Form1: TForm1;


implementation


{$R *.DFM} 
{$R TNA.RES} //eine Resource mit 2 Icons oder Bitmaps


procedure TForm1.FormCreate(Sender: TObject);
begin
  {läßt die Form schon bei Programmstart verschwinden} 
  Application.ShowMainForm := False;

  {Symbol im TNA anzeigen} 
  Self.ShowIcon;
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  {Symbol aus dem TNA entfernen} 
  Shell_NotifyIcon(NIM_DELETE, @tTNA);
end;


procedure TForm1.FormDblClick(Sender: TObject);
begin
  {lassen wir doch die Form wieder verschwinden ...} 
  Self.AppDeactivate;

  {... und ändern das Symbol in dem TNA
  Self.ChangeIcon;
end;


procedure TForm1.PopupMenuClick(Sender: TObject);
begin
  case TPopupMenu(Sender).Tag of

    {hier steht dann die Auswahl was getan werden soll} 
    {wenn auf das erschienene Popupmenü geklickt wurde} 
  end;
end;


procedure TForm1.WMTaskMsg(var Msg: TMessage);
var
  rCursor: TPoint;
begin
  {wenn die Nachricht aus unserem definierten Bereich kommt dann ...} 
  if Msg.wParam = tTNA.uID then
  begin
    {... tu was wenn das Ereignis ein ...} 
    case Msg.lParam of

      {... rechter Mausklick ist oder ...} 
      WM_RBUTTONDOWN:
        begin
          {aktuelle Cursoposition holen} 
          GetCursorPos(rCursor);

          {ACHTUNG!!!!! Der folgende Aufruf ist an dieser Stelle ganz wichtig!!!!} 
{Erst durch diese API-Funktion wird das Popupmenü dazu bewegt zu verschwinden
wenn ein Klick außerhalb des Popupmenüs erfolgt} 

          SetForegroundWindow(Self.Handle);

          {Also, nicht vergessen!!!} 


          {Das Popupmenü erscheint an der gewünschten Position in dem TNA
          TPopupMenu1.Popup(rCursor.x, rCursor.y);
        end;

      {... ein linker doppelter Mausklick ist} 
      WM_LBUTTONDBLCLK: Self.AppActive;
    end;
  end;
end;


procedure TForm1.AppActive;
var
  hOwner: THandle;
begin
  {Form einblenden} 
  SendMessage(Self.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
  ShowWindow(Self.Handle, SW_SHOW);
  SetForegroundWindow(Self.Handle);

  {Symbol in der Taskbar einblenden} 
  hOwner := GetWindow(Self.Handle, GW_OWNER);
  SendMessage(hOwner, WM_SYSCOMMAND, SC_RESTORE, 0);
  ShowWindow(hOwner, SW_SHOW);
end;


procedure TForm1.AppDeactivate;
begin
  {Form ausblenden} 
  ShowWindow(Self.Handle, SW_HIDE);

  {Symbol in der Taskbar ausblenden} 
  ShowWindow(GetWindow(Self.Handle, GW_OWNER), SW_HIDE);
end;


procedure TForm1.ShowIcon;
begin
  tTNA.cbSize := SizeOf(tTNA);
  tTNA.Wnd   := Self.Handle;
  tTNA.uID   := 24112000;                    //frei wählbarer Wert zur Identifizierung
  tTNA.uCallbackMessage := k_WM_TASKMSG;
  tTNA.hIcon := LoadIcon(hInstance, 'xxx');
  //xxx ist die Bezeichnung eines Icons aus "TNA.res"
  StrCopy(tTNA.szTip, 'Hallo');            //Hint
  tTNA.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
  {CB Symbol in dem TNA einrichten CE} 
  Shell_NotifyIcon(NIM_ADD, @tTNA);
end;


procedure TForm1.ChangeIcon;
begin
  tTNA.cbSize := SizeOf(tTNA);
  tTNA.hIcon := LoadIcon(hInstance, 'yyy');
  //yyy ist die Bezeichnung eines weiteren Icons aus "TNA.res"
  StrCopy(tTNA.szTip, 'Welt');             //Hint

  {CB Symbol im TNA ändern CE} 
  Shell_NotifyIcon(NIM_MODIFY, @tTNA);
end;


end.
Ich hab das aus Swissdelphicenter und das icon is nun unten neben der Uhr aber was muss in die Function
Code:
procedure TForm1.PopupMenuClick(Sender: TObject);
begin
  case TPopupMenu(Sender).Tag of

  // <---- ???????¿¿¿¿ 
  end;
end;
rein, damit ein Menü erscheint wo ich was auswählen kann und er dann irgendwas macht??
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Markus K.

Registriert seit: 26. Jan 2004
Ort: Halle
346 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Was muss in die Function rein für trayiconpopupmenü

  Alt 22. Mär 2004, 17:46
Hallo Delphi-Noobie,
da müssen glaub ich die Tags der MenuItem des PopUpMenues rein (Tag=Variable vom Typ LongInt). Zum Beispiel:
Delphi-Quellcode:
procedure TForm1.PopupMenuClick(Sender: TObject);
begin
  case TPopupMenu(Sender).Tag of
    1: {Prozedur einfügen}
    ...
  end;
end;
Tschüß Markus
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#3

Re: Was muss in die Function rein für trayiconpopupmenü

  Alt 22. Mär 2004, 18:56
Das Problem war bei mir, dass da gar kein Popup menu erst kommt! also ich kann da rausdrücken wie ich will da passiert immer nur dieses appactivate oder so aber es kommt kein menü. Wie kann ich da eins hinmachen?
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Markus K.

Registriert seit: 26. Jan 2004
Ort: Halle
346 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Was muss in die Function rein für trayiconpopupmenü

  Alt 22. Mär 2004, 19:01
Du musst wissen wo und wann das PopUpMenu angezeigt werden soll. Das Formular sowie einzelne Komponenten besitzen die Eigenschaft PopUpMenu, wo du leicht ein PopUpMenu der entsprechenden Komponente/Form zuweisen kann.

Tschüß Markus
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#5

Re: Was muss in die Function rein für trayiconpopupmenü

  Alt 22. Mär 2004, 19:15
K da kommt jetzt nen Menü! Und bei der Procedure von oben hab ich das mit der 1 eingefügt un da müsste doch eigendlich was passieren wenn ich dann den ersten Eintrag anklicke?? als BSp. hab ich showmessage genommen aber funzt net :/ why?
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Delphi-Noobie

Registriert seit: 28. Nov 2003
102 Beiträge
 
#6

Re: Was muss in die Function rein für trayiconpopupmenü

  Alt 22. Mär 2004, 19:18
Ach jetzt hab ichs ) ich musste doppelklick aus die Popup Componente machen und dann bei den einmzelnen Einträgen nochmal on click ne Procedure reinhauen ^^ Darauf muss man erstmal kommen
Wieviel Lösungen hat die Gleichung x^13=1? .... 13!
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Was muss in die Function rein für trayiconpopupmenü

  Alt 30. Apr 2004, 02:27
Hi,

wo müsste ich denn den Code hier einfügen damit wenn ich auf den Minimieren-Button klicke das Programm nicht in die Taskleiste geht sondern wieder in die SysTray?

Delphi-Quellcode:
If IsWindowVisible(Handle) Then
  Begin
    ShowWindow(GetWindow(Handle, GW_OWNER), SW_HIDE);
    Hide;
  End;
Danke!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Was muss in die Function rein für trayiconpopupmenü

  Alt 30. Apr 2004, 06:57
Krass, so viel source für nen einfaches Tray mit popup
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Was muss in die Function rein für trayiconpopupmenü

  Alt 30. Apr 2004, 07:02
@Mackhack: Die DP hat eine Code-Lib

Siehe Luckie's Post.
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#10

Re: Was muss in die Function rein für trayiconpopupmenü

  Alt 1. Mai 2004, 01:19
Danke,

hab es gefunden.
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  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 20:42 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