Keresés

Aktív témák

  • zenit

    tag

    válasz emre33 #3 üzenetére

    Nem tippelgetek tovább, valahogy így kellene csinálnod:
    (hosszú lesz, de igazából egyszerű. :) )

    const
      WM_NOTIFY_ICON = WM_USER;

    type
    TMainForm = class(TForm)
    PopupMenu: TPopupMenu;
    MenuShow: TMenuItem;
    MenuExit: TMenuItem;
    HideButton: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure MenuShowClick(Sender: TObject);
    procedure MenuExitClick(Sender: TObject);
    procedure HideButtonClick(Sender: TObject);
    private
    procedure AddNotifyIcon;
    procedure DeleteNotifyIcon;
    procedure WMNotifyIcon(var Msg: TMessage); message WM_NOTIFY_ICON;
    end;

    var
    MainForm: TMainForm;

    implementation

    {$R *.dfm}

    procedure TMainForm.AddNotifyIcon;
    var
    NotifyIconData: TNotifyIconData;
    begin
    FillChar(NotifyIconData, SizeOf(NotifyIconData), 0);
    with NotifyIconData do
    begin
    cbSize := SizeOf(NotifyIconData);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE;
    uCallbackMessage := WM_NOTIFY_ICON;
    hIcon := Icon.Handle;
    end;
    Shell_NotifyIcon(NIM_ADD, Addr(NotifyIconData));
    end;

    procedure TMainForm.DeleteNotifyIcon;
    var
    NotifyIconData: TNotifyIconData;
    begin
    FillChar(NotifyIconData, SizeOf(NotifyIconData), 0);
    with NotifyIconData do
    begin
    cbSize := SizeOf(NotifyIconData);
    Wnd := Handle;
    uID := 0;
    end;
    Shell_NotifyIcon(NIM_DELETE, Addr(NotifyIconData));
    end;

    procedure TMainForm.FormCreate(Sender: TObject);
    begin
    AddNotifyIcon;
    end;

    procedure TMainForm.FormDestroy(Sender: TObject);
    begin
    DeleteNotifyIcon;
    end;

    procedure TMainForm.WMNotifyIcon(var Msg: TMessage);
    var
    P: TPoint;
    begin
    case Msg.lParam of
    WM_LBUTTONDOWN,
    WM_LBUTTONDBLCLK:
    Show;
    WM_RBUTTONDOWN:
    begin
    GetCursorPos(P);
    PopupMenu.Popup(P.X, P.Y);
    end;
    end;
    end;

    procedure TMainForm.MenuShowClick(Sender: TObject);
    begin
    Show;
    end;

    procedure TMainForm.MenuExitClick(Sender: TObject);
    begin
    Close; // Elég a Close, mert ez a főform.
    end;

    procedure TMainForm.HideButtonClick(Sender: TObject);
    begin
    Hide;
    end;

    ------------
    Na, ez így működik.

    [Szerkesztve]

Aktív témák