minimización de Delphi
Cuando hagas clic en minimizar, oculta la ventana directamente y usa el siguiente código para implementarla:
procedimiento WMSysCommand(var Mensaje: TWMSysCommand);message WM_SYSCOMMAND;//Respuesta al WM_SYSCOMMAND mensaje, cuando el mínimo Ocultar al cambiar
procedimiento TYMessageMainForm.WMSysCommand(var Message: TWMSysCommand);
begin
if (Message.CmdType and $FFF0 = SC_MINIMIZE) o ( Message.CmdType y $FFF0 = SC_CLOSE) luego
comenzar //Tratar la minimización como ocultación
YMessageMainForm.Hide;
ShowWindow(Application. Handle, SW_HIDE);
end else Inherited;//Llamar al procesamiento de la clase superior
end;
Coloque un gráfico en la barra del sistema y deje haga clic con el mouse o haga doble clic, haga clic derecho para implementar ciertas funciones, use el siguiente código para lograrlo:
{$WARN SYMBOL_DEPRECated OFF}
unit TrayIcon;
interfaz
usa
SysUtils, Windows, mensajes, clases, gráficos, controles, ShellAPI, formularios, menús;
const WM_TOOLTRAYICON = WM_USER+ 1;
WM_RESETTOOLTIP = WM_USER+2;
tipo
TTrayIcon = clase(TComponent)
privado
{ Variables de campo }
IconData: TNOTIFYICONDATA;
fIcon : TIcon;
fToolTip : String;
fWindowHandle : HWND;
fActive: booleano;
fShowDesigning: booleano;
{ Eventos }
fOnClick: TNotifyEvent;
fOnDblClick : TNotifyEvent;
fOnRightClick : TMouseEvent;
fPopupMenu : TPopupMenu;
función AddIcon : booleano;
función ModifyIcon : booleano;
función DeleteIcon: booleano;
procedimiento SetActive(Valor: booleano);
procedimiento SetShowDesigning(Valor: booleano);
procedimiento
ure SetIcon(Valor: TIcon);
procedimiento SetToolTip(Valor: Cadena);
procedimiento WndProc(var msg: TMessage);
procedimiento FillDataStructure;
procedimiento DoRightClick( Remitente: TObject );
protegido
público
constructor create(aOwner: TComponent override;
destructor destruir; anular;
publicado
propiedad Activa: lectura booleana fActive escritura SetActive;
propiedad ShowDesigning: lectura booleana fShowDesigning escritura SetShowDesigning;
Icono de propiedad: TIcon lee fIcon escribe SetIcon;
propiedad ToolTip: cadena lee fTooltip escribe SetToolTip;
propiedad OnClick: TNotifyEvent lee FOnClick escribe FOnClick;
propiedad OnDblClick : TNotifyEvent lee FOnDblClick escribe FOnDblClick;
propiedad OnRightClick : TMouseEvent lee FOnRightClick escribe FonRightClick;
propiedad PopupMenu : TPopupMenu lee fPopupMenu escribe fPopupMenu;
fin;
procedimiento Registro;
implementación
{$R TrayIcon.res}
procedimiento TTrayIcon.SetActive(Valor: booleano);
comenzar
si valor <> fActive entonces comenzar
fActive := Valor;
si no (csdesigning en ComponentState ) luego comienza
si Valor entonces comienza
AddIcon;
finaliza si no comienza
DeleteIcon;
finaliza ;
fin;
fin;
fin;
procedimiento TTrayIcon.SetShowDesigning(Valor: booleano);
comenzar
si csdesigning en ComponentState entonces comenzar
si valor <> fShowDesigning entonces comenzar
fShowDesigning := Valor;
si Valor entonces comenzar
AgregarIcon;
finalizar más comenzar
EliminarIcon;
finalizar;
finalizar;
fin;
fin;
procedimiento TTrayIcon.SetIcon(Valor: Ticon);
comenzar
si Valor < > fIcon luego
comenzar
fIcon.Assign(valor);
ModificarIcon;
finalizar;
end;
procedure TTrayIcon.SetToolTip(Value : string);
begin
// Esta rutina SIEMPRE restablece el valor del campo y recarga el
// icono. Esto es para que la información sobre herramientas se pueda dejar en blanco cuando el componente // se carga por primera vez. Si esto se cambia, el icono estará en blanco en
// la bandeja cuando no se especifica información sobre herramientas.
si longitud (Valor) > 62 entonces
Valor := copiar(Valor,1,62); p>
fToolTip := valor;
ModifyIcon;
end;
constructor TTrayIcon.create(aOwner: Tcomponent);
begin
heredado create(aOwner);
FWindowHandle := AllocateHWnd( WndProc );
FIcon := TIcon.Create;
end;
destructor TTrayIcon.destroy;
comenzar
if (not (csDesigning in ComponentState) y fActive)
o ((csDesigning in ComponentState) y fShowDesigning) luego
DeleteIcon;
FIcon.Free;
DeAllocateHWnd( FWindowHandle );
heredado destruir;
fin;
procedimiento TTrayIcon.FillDataStructure;
comenzar
con IconData comenzar
cbSize := sizeof(TNOTIFYICONDATA);
wnd := FWindowHandle;
uID := 0; // no se pasa con el mensaje, así que hágalo 0
uFlags : = NIF_MESSAGE + NIF_ICON + NIF_TIP;
hIcon := fIcon.Handle;
StrPCopy(szTip,fToolTip);
uCallbackMessage := WM_TOOLTRAYICON;
fin;
fin;
función TTrayIcon.AddIcon: booleano;
comienzo
FillDataStructure;
resultado := Shell_NotifyIcon(NIM_ADD,@IconData);
// Por alguna razón, si no hay información sobre herramientas configurada, entonces el icono
// no t mostrar. Esto soluciona eso.
if fToolTip = '' entonces
PostMessage( fWindowHandle, WM_RESETTOOLTIP,0,0 );
end;
función TTrayIcon.ModifyIcon: booleano;
comenzar
FillDataStructure;
si fActive entonces
resultado:= Shell_NotifyIcon( NIM_MODIFY,@IconData)
else
resultado:= Verdadero;
fin;
procedimiento TTrayIcon.DoRightClick( Remitente: TObject ) ;
var MouseCo: Tpoint;
comenzar
GetCursorPos(MouseCo);
si está asignado (fPopupMenu), luego comenzar
SetForegroundWindow( Application.Handle );
Application.ProcessMessages;
fPopupmenu.Popup( Mouseco.X, Mouseco.Y );
fin ;
si está asignado (FOnRightClick), entonces
comienza
FOnRightClick(self,mbRight,[],MouseCo.x,MouseC
o.y);
fin;
fin;
función TTrayIcon.DeleteIcon: booleano;
comenzar
resultado := Shell_NotifyIcon(NIM_DELETE,@IconData);
fin;
procedimiento TTrayIcon.WndProc(var msg: TMessage);
comenzar
con msg do
si (msg = WM_RESETTOOLTIP) entonces
SetToolTip( fToolTip )
de lo contrario si (msg = WM_TOOLTRAYICON) entonces comience
caso lParam de
WM_LBUTTONDBLCLK: si está asignado (FOnDblClick), entonces FOnDblClick(self);
WM_LBUTTONUP: si está asignado (FOnDblClick), entonces FOnClick(self);
WM_RBUTTONUP : DoRightClick(self);
end;
end
else // Maneja todos los mensajes con el controlador predeterminado
Resultado := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
fin;
registro del procedimiento;
comenzar
RegisterComponents('Win95', [TTrayIcon]);
end;
end.