Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Menú en el icono de la barra de título de una aplicación (https://www.clubdelphi.com/foros/showthread.php?t=80662)

dec 02-07-2006 01:33:52

Menú en el icono de la barra de título de una aplicación
 
Para hacer este truco añadir un popup a un formulario.

No olvideis añadir ShellApi, sino os dará problema el TNotifyIconData Recordar añadir al popup alguna opción para terminar la aplicación y para poder ver el popup. En WndProc se pueden añadir diferentes mensajes del ratón, entre otros, como:

Código:

WM_LBUTTONDBLCLK
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_RBUTTONDBLCLK
WM_RBUTTONDOWN
WM_RBUTTONUP

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    Sonia1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Sonia1Click(Sender: TObject);
  private
    MessageIcon: Cardinal;
    procedure RButtonUp;

  protected
    procedure WndProc(var Msg: TMessage); override;
  public
    procedure PonerIcono(operacion: word);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.PonerIcono (operacion: word);
var
  IconoInfo: TNotifyIconData;
begin
  with IconoInfo do
  begin
    cbSize := SizeOf(IconoInfo); //tamaño de la estructura
    uID := 0;   //identificador del icono en la barra de tareas
    uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
    Wnd := Self.Handle; //handle de la ventana recibirá la notificación
    uCallbackMessage := MessageIcon;  //Mensaje que se generará
    hIcon := Application.Icon.Handle; //handle  del icono
    szTip := 'Icono en la barra de tareas con menú';  //Mensaje que mostrará el icono
  end;
  Shell_NotifyIcon(operacion, @IconoInfo);
end;

procedure TForm1.WndProc(var Msg: TMessage);
begin
  //Si se ha generado nuestro mensaje
  if Msg.Msg = MessageIcon then
    case Msg.LParam of
      WM_RBUTTONUP: RButtonUp; //Si se ha pulsado el botón derecho del ratón
    end
  else
    inherited WndProc(Msg);
end;

procedure TForm1.RButtonUp;
var
  Pt: TPoint;
begin
  GetCursorPos(Pt); //Obtemos la posición del cursor
  SetForegroundWindow(Application.Handle);
  Application.ProcessMessages;
  PopupMenu1.Popup(Pt.X, Pt.Y); //Situamos el popup en el punto donde está el cursor
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  //Ocultamos el formulario para que se deba inicializar desde
  //la barra de tareas
  Application.ShowMainForm := False;
  ShowWindow(Application.Handle, SW_HIDE);
  //Creamos el mensaje que se generará cuando se trate nuestro icono
  MessageIcon := RegisterWindowMessage('Pon Icono');
  //Ponemos el icono en la barra de tareas
  PonerIcono (NIM_ADD);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  //Quitamos el icono de la barra de tareas
  PonerIcono (NIM_DELETE )  ;
end;

end.


La franja horaria es GMT +2. Ahora son las 17:55:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi