Colección de citas famosas - Slogan de motivación - Información emergente de la bandeja Delphi

Información emergente de la bandeja Delphi

¿Qué versión de Delphi estás usando? Los sistemas Delphi2005 y superiores ya tienen su propio control de bandeja. Si es una versión anterior, puede encontrar un control de terceros. El siguiente código es el código fuente del control que viene con Delphi2006. citarlo directamente, o puede registrarlo como control y directamente colocar el control en el formulario:

TCustomTrayIcon = class(TComponent)

privado

FAnimate : booleano;

FData: TNotifyIconData;

FIsClicked: booleano;

FCurrentIcon: TIcon

FIcon: TIcon; >

FIconList: TImageList;

FPopupMenu: TPopupMenu;

FTimer: TTimer

FHint:

FIconIndex; Entero;

FVisible: Booleano;

p>

FOnMouseMove: TMouseMoveEvent;

FOnClick: TNotifyEvent

FOnDblClick: TNotifyEvent;

FOnMouseDown: TMouseEvent;

FOnMouseUp: TMouseEvent;

FOnAnimate: TNotifyEvent

FBalloonHint: cadena; p> FBalloonTitle: cadena;

FBalloonFlags: TBalloonFlags;

clase var

RM_TaskbarCreated:

protegido

procedimiento SetHint(const Valor: cadena);

función GetAnimateInterval: Cardenal

procedimiento SetAnimateInterval(Valor: Cardenal);

procedimiento SetAnimate(Valor: Boolean);

procedimiento SetBalloonHint(const Valor: cadena);

función GetBalloonTimeout: Integer

procedimiento SetBalloonTimeout(Valor: Integer);

procedimiento SetBalloonTitle(const Valor: cadena);

procedimiento SetVisible(Valor: booleano);

tual;

procedimiento SetIconIndex(Valor: Entero);

procedimiento SetIcon(Valor: TIcon);

procedimiento SetIconList(Valor: TImageList);

procedimiento WindowProc(var Mensaje: TMessage); virtual;

procedimiento DoOnAnimate(Remitente: TObject);

propiedad Datos: TNotifyIconData leer FData; p>

p>

función Actualizar (Mensaje: Entero): sobrecarga;

público

constructor Crear (Propietario: TComponent); >

destructor Destruir;

procedimiento Actualizar;

procedimiento SetDefaultIcon

procedimiento ShowBalloonHint; propiedad Animate: lectura booleana FAnimate escritura SetAnimate valor predeterminado False

propiedad AnimateInterval: lectura cardinal GetAnimateInterval escritura SetAnimateInterval valor predeterminado

propiedad Sugerencia: cadena lee FHint escribe SetHint

<; p> propiedad BalloonHint: cadena lee FBalloonHint escribe SetBalloonHint;

propiedad BalloonTitle: cadena lee FBalloonTitle escribe SetBalloonTitle

propiedad BalloonTimeout: entero lee GetBalloonTimeout escribe SetBalloonTimeout predeterminado

<; p> propiedad BalloonFlags: TBalloonFlags lee FBalloonFlags escribe FBalloonFlags por defecto bfNone;

Icono de propiedad: TIcon lee FIcon escribe SetIcon;

Iconos de propiedad: TImageList lee FIconList escribe SetIconList;

propiedad Ic

onIndex: entero leer FIconIndex escribir SetIconIndex valor predeterminado 0;

propiedad PopupMenu: TPopupMenu leer FPopupMenu escribir FPopupMenu

propiedad Visible: booleano leer FVisible escribir SetVisible valor predeterminado False; > propiedad OnClick: TNotifyEvent lee FOnClick escribe FOnClick;

propiedad OnDblClick: TNotifyEvent lee FOnDblClick escribe FOnDblClick

propiedad OnMouseMove: TMouseMoveEvent lee FOnMouseMove escribe

propiedad; OnMouseUp: TMouseEvent lee FOnMouseUp escribe FOnMouseUp;

propiedad OnMouseDown: TMouseEvent lee FOnMouseDown escribe FOnMouseDown;

propiedad OnAnimate: TNotifyEvent lee FOnAnimate escribe FOnAnimate;

fin;

TTrayIcon = clase(TCustomTrayIcon)

publicado

propiedad Animate;

propiedad AnimateInterval;

propiedad Hint;

propiedad BalloonHint;

propiedad BalloonTitle;

propiedad BalloonTimeout;

propiedad BalloonFlags

propiedad Icon;

iconos de propiedad;

propiedad IconIndex;

propiedad PopupMenu;

propiedad Visible;

propiedad OnDblClick;

propiedad OnMouseMove

propiedad OnMouseUp;

end;

{ TTrayIcon}

constructor TCustomTrayIcon.Create(Propietario: TComponent);

comenzar

heredado;

FAnimate := False

FBalloonFlags := bfNone

BalloonTimeout : = 3000;

FIcon:= TIcon.Create;

FCurrentIcon:= TIcon.Create;

FTimer:= TTimer.Create(Nil);

p>

FIconIndex:= 0;

FVisible:= False;

FIsClicked:= False;

FTimer.Enabled: = False;

p>

FTimer.OnTimer:= DoOnAnimate;

FTimer.Interval:= 1000;

si no (csDesigning en ComponentState) entonces

comenzar

FillChar(FData, SizeOf(FData), 0);

FData.cbSize:= SizeOf(FData);

FData .Wnd:= Classes.AllocateHwnd (WindowProc);

FData.uID := FData.Wnd

FData.uTimeout := 3000; hIcon := FCurrentIcon.Handle;

FData.uFlags:= NIF_ICON o NIF_MESSAGE;

FData.uCallbackMessage:= WM_SYSTEM_TRAY_MESSAGE;

StrPLCopy(FData.szTip, Application.Title, SizeOf(FData .szTip) - 1);

si Longitud(Application.Title) gt; entonces

FData.uFlags:= FData.uFlags o NIF_TIP;

Actualizar;

finalizar;

finalizar;

destructor TCustomTrayIcon.Destroy;

comenzar

si no (csDesigning en ComponentState) entonces

Refresh(NIM_DELETE);

FCurrentIcon.Free

FIcon.Free;

FTimer.Free;

Classes.DeallocateHWnd(FData.Wnd);

heredado

fin

procedimiento TCustomTrayIcon; .SetVisible(Valor

ue: booleano);

comenzar

si FVisible lt;gt; Valor entonces

comenzar

FVisible := Valor; p>

si (no FAnimate) o (FAnimate y FCurrentIcon.Empty) entonces

SetDefaultIcon;

si no (csDesigning en ComponentState) entonces

comenzar

si FVisible entonces

comenzar

si no Actualizar(NIM_ADD) entonces

generar EOutOfResources.Create(STrayIconCreateError);

p>

final

si no (csLoading en ComponentState) entonces

comenzar

si no Actualizar (NIM_DELETE) entonces

elevar EOutOfResources.Create(STrayIconRemoveError);

end;

si FAnimate entonces

FTimer.Enabled := Valor

fin ;

fin;

fin;

procedimiento TCustomTrayIcon.SetIconList(Valor: TImageList);

comienzo

si FIconList lt; Valor entonces

comenzar

FIconList := Valor;

si no (csDesigning en ComponentState) entonces

comenzar

si está asignado (FIconList) entonces

FIconList.GetIcon(FIconIndex, FCurrentIcon)

más

SetDefaultIcon ;

Actualizar

fin

fin

final

procedimiento TCustomTrayIcon.SetHint(const; Valor: cadena) ;

comenzar

si CompareStr(FHint, Value) lt; entonces

comenzar

FHint; = Valor;

StrPLCopy(FData.szTip, FHint

, SizeOf(FData.szTip) - 1);

si Longitud(Hint) gt; 0 entonces

FData.uFlags:= FData.uFlags o NIF_TIP

else

FData.uFlags:= FData.uFlags y no NIF_TIP

Actualizar

fin

fin; p>

fin p>

función TCustomTrayIcon.GetAnimateInterval: Cardinal;

comenzar

Resultado:= FTimer.Interval;

fin;

procedimiento TCustomTrayIcon.SetAnimateInterval(Valor: Cardinal);

comenzar

FTimer.Interval:= Valor;

fin;

procedimiento TCustomTrayIcon .SetAnimate(Valor: Booleano);

comenzar

si FAnimate lt;gt Valor entonces

comenzar

<; p> FAnimate := Valor;

si no (csDesigning en ComponentState) entonces

comenzar

si (FIconList lt; gt; nil) y (FIconList. Count gt; 0) y Visible entonces

FTimer.Enabled := Valor;

si (no FAnimate) y (no FCurrentIcon.Empty) entonces

FIcon .Assign(FCurrentIcon);

end;

end;

end;

{ Controlador de mensajes para la ventana de notificación del shell oculto. La mayoría de los mensajes

utilizan WM_SYSTEM_TRAY_MESSAGE como ID del mensaje, con WParam como ID de los datos del icono de notificación del shell

LParam es un ID de mensaje para el mensaje real, por ejemplo,

WM_MOUSEMOVE Otro mensaje importante es WM_ENDSESSION, que le indica al shell

icono de notificación que se elimine para que Windows pueda cerrarse.

Envíe los eventos habituales para este.

e mensajes del mouse. También interpola el evento OnClick

cuando el usuario hace clic en el botón izquierdo, y abre el menú, si hay

uno, para eventos de clic derecho }

procedimiento TCustomTrayIcon.WindowProc(var Message: TMessage);

{ Devuelve el estado de las teclas mayúsculas }

función ShiftState: TShiftState;

comenzar

Resultado:= [];

si GetKeyState(VK_SHIFT) lt; entonces

Incluir(Resultado, ssShift);

si GetKeyState(VK_CONTROL) lt; 0 entonces

Incluir(Resultado, ssCtrl);

si GetKeyState(VK_MENU) lt; 0 entonces

Incluir( Resultado, ssAlt);

final;

var

Punto: TPoint;

Cambio: TShiftState; >comenzar

caso Mensaje.Msg de

WM_QUERYENDSESSION:

Mensaje.Resultado:= 1;

WM_ENDSESSION:

comenzar

si TWmEndSession(Message).EndSession luego

Actualizar(NIM_DELETE);

finalizar

WM_SYSTEM_TRAY_MESSAGE:

comenzar

caso Message.lParam de

WM_MOUSEMOVE:

comenzar

si está asignado (FOnMouseMove) entonces

comenzar

Shift := ShiftState;

GetCursorPos(Punto);

FOnMouseMove(Self, Shift, Point.X, Point. Y);

finalizar

finalizar

WM_LBUTTONDOWN:

comenzar

si está asignado (FO)

nMouseDown) luego

comenzar

Shift := ShiftState [ssLeft];

GetCursorPos(Point

FOnMouseDown(Self, mbMiddle); , Mayús, Punto:

comenzar

Mayús:= ShiftState [ssLeft]

GetCursorPos(Punto); y Asignado(FOnClick) entonces

comenzar

FOnClick(Self);

FIsClicked := False

final; >

si está asignado (FOnMouseUp) entonces

FOnMouseUp(Self, mbLeft, Shift, Point.X, Point.Y);

fin;

WM_RBUTTONDOWN:

comenzar

si está asignado (FOnMouseDown) entonces

comenzar

Shift := ShiftState [ssRight]

;

GetCursorPos( Punto);

FOnMouseDown(Self, mbRight, Shift, Point.X, Point.Y

fin

fin;

WM_RBUTTONUP:

comenzar

Shift:= ShiftState [ssRight]

GetCursorPos(Point

si está asignado (FOnMouseUp) entonces

FOnMouseUp(Self, mbRight, Shift, Point.X, Point.Y);

si está asignado (FPopupMenu) entonces

comenzar

SetForegroundWindow(Aplicación

ion.Handle);

Application.ProcessMessages;

FPopupMenu.AutoPopup:= False;

FPopupMenu.PopupComponent:= Propietario;

FPopupMenu.Popup(Punto.x, Punto.y);

fin

fin

WM_LBUTTONDBLCLK, WM_MBUTTONDBLCLK, WM_RBUTTONDBLCLK:

si está asignado (FOnDblClick) entonces

FOnDblClick(Self);

WM_MBUTTONDOWN:

comienza

si está asignado (FOnMouseDown) entonces

comenzar

Shift := ShiftState [ssMiddle];

GetCursorPos(Point);

FOnMouseDown(Self, mbMiddle, Shift, Punto. > si está asignado (FOnMouseUp) entonces

comenzar

Shift := ShiftState [ssMiddle]

GetCursorPos(Point). > FOnMouseUp (Self, mbMiddle, Shift, Point. p> comenzar

FData.uFlags:= FData.uFlags y no NIF_INFO;

finalizar;

finalizar ;

fin;

si (Message.Msg = RM_TaskBarCreated) y Visible entonces

Actualizar(NIM_ADD);

fin;

p>

procedimiento TCustomTrayIcon.Refresh;

comenzar

si no (csDesigning en ComponentState) entonces

comenzar

FData.hIcon:= FCurrentIcon.Handle;

si es visible, entonces

Refresh(NIM_MODIFY);

end;

end;

función TCustomTrayIcon.Refresh(Mensaje: entero): Booleano;

comenzar

Resultado:= Shell_NotifyIcon(Mensaje, @FData;

finalizar

procedimiento TCustomTrayIcon.SetIconIndex(Valor); : Entero);

comenzar

si FIconIndex lt; gt; Valor entonces

comenzar

FIconIndex := Valor; >

si no (csDesigning en ComponentState) entonces

comenzar

si está asignado (FIconList) entonces

FIconList.GetIcon(FIconIndex, FCurrentIcon);

Actualizar;

finalizar;

finalizar;

finalizar;

procedimiento TCustomTrayIcon.DoOnAnimate(Remitente: TObject

comenzar

si está asignado (FOnAnimate) luego

FOnAnimate(Self);

si está asignado (FIconList) y (FIconIndex); lt; FIconList.Count - 1) entonces

IconIndex:= FIconIndex 1

else

IconIndex:= 0;

Actualizar;

fin;

procedimiento TCustomTrayIcon.SetIcon(Valor: TIcon);

comienzo

FIcon.Assign(Valor);

p>

FCurrentIcon.Assign(Value);

Actualizar;

fin

procedimiento TCustomTrayIcon.SetBalloonHint(const Valor: string);

p>

comenzar

si CompareStr(FBalloonHint, Value) lt; entonces

comenzar

FBalloonHint:= Valor;

StrPLCopy(FData.szInfo, FBalloonHint, SizeOf(FData.szInfo) - 1

Actualizar(NIM_MODIFY

fin

);

fin;

procedimiento TCustomTrayIcon.SetDefaultIcon;

comenzar

si no es FIcon.Empty entonces

FCurrentIcon.Assign(FIcon )

else

FCurrentIcon.Assign(Application.Icon

Actualizar

fin; procedimiento TCustomTrayIcon.SetBalloonTimeout(Valor: Entero);

comenzar

FData.uTimeout:= Valor;

fin;

función TCustomTrayIcon .GetBalloonTimeout: Entero;

comienzo

Resultado:= FData.uTimeout;

final

procedimiento TCustomTrayIcon.ShowBalloonHint

p>

p>

comenzar

FData.uFlags:= FData.uFlags o NIF_INFO;

FData.dwInfoFlags:= Integer(FBalloonFlags);

Actualizar (NIM_MODIFY);

fin;

procedimiento TCustomTrayIcon.SetBalloonTitle(const Valor: cadena

comenzar

); si CompareStr(FBalloonTitle, Value) lt; 0 entonces

comenzar

FBalloonTitle:= Valor;

StrPLCopy(FData.szInfoTitle, FBalloonTitle, SizeOf( FData.szInfoTitle) - 1);

Actualizar (NIM_MODIFY

fin

final;

// Este código es para notificar a la aplicación cuando se reconstruye la ventana de notificación

TCustomTrayIcon.RM_TaskBarCreated:= RegisterWindowMessage('TaskbarCreated');