古詩詞大全網 - 成語解釋 - delphi最小化

delphi最小化

點最小化的時候,直接隱藏窗口,用下面的代碼實現:

procedure WMSysCommand(var Message: TWMSysCommand);message WM_SYSCOMMAND;//響應WM_SYSCOMMAND消息,當最小化的時候隱藏

procedure TYMessageMainForm.WMSysCommand(var Message: TWMSysCommand);

begin

if (Message.CmdType and $FFF0 = SC_MINIMIZE) or (Message.CmdType and $FFF0 = SC_CLOSE) then

begin //把最小化當隱藏處理

YMessageMainForm.Hide;

ShowWindow(Application.Handle, SW_HIDE);

end else Inherited;//調用上級類的處理

end;

在系統欄放壹個圖表,讓鼠標單擊、雙擊、右鍵實現壹定的功能,使用下面的代碼實現:

{$WARN SYMBOL_DEPRECATED OFF}

unit TrayIcon;

interface

uses

SysUtils, Windows, Messages, Classes, Graphics, Controls, ShellAPI, Forms, menus;

const WM_TOOLTRAYICON = WM_USER+1;

WM_RESETTOOLTIP = WM_USER+2;

type

TTrayIcon = class(TComponent)

private

{ Field Variables }

IconData: TNOTIFYICONDATA;

fIcon : TIcon;

fToolTip : String;

fWindowHandle : HWND;

fActive : boolean;

fShowDesigning : Boolean;

{ Events }

fOnClick : TNotifyEvent;

fOnDblClick : TNotifyEvent;

fOnRightClick : TMouseEvent;

fPopupMenu : TPopupMenu;

function AddIcon : boolean;

function ModifyIcon : boolean;

function DeleteIcon : boolean;

procedure SetActive(Value : boolean);

procedure SetShowDesigning(Value : boolean);

procedure SetIcon(Value : TIcon);

procedure SetToolTip(Value : String);

procedure WndProc(var msg : TMessage);

procedure FillDataStructure;

procedure DoRightClick( Sender : TObject );

protected

public

constructor create(aOwner : TComponent); override;

destructor destroy; override;

published

property Active : boolean read fActive write SetActive;

property ShowDesigning : boolean read fShowDesigning write SetShowDesigning;

property Icon : TIcon read fIcon write SetIcon;

property ToolTip : string read fTooltip write SetToolTip;

property OnClick : TNotifyEvent read FOnClick write FOnClick;

property OnDblClick : TNotifyEvent read FOnDblClick write FOnDblClick;

property OnRightClick : TMouseEvent read FOnRightClick write FonRightClick;

property PopupMenu : TPopupMenu read fPopupMenu write fPopupMenu;

end;

procedure Register;

implementation

{$R TrayIcon.res}

procedure TTrayIcon.SetActive(Value : boolean);

begin

if value <> fActive then begin

fActive := Value;

if not (csdesigning in ComponentState) then begin

if Value then begin

AddIcon;

end else begin

DeleteIcon;

end;

end;

end;

end;

procedure TTrayIcon.SetShowDesigning(Value : boolean);

begin

if csdesigning in ComponentState then begin

if value <> fShowDesigning then begin

fShowDesigning := Value;

if Value then begin

AddIcon;

end else begin

DeleteIcon;

end;

end;

end;

end;

procedure TTrayIcon.SetIcon(Value : Ticon);

begin

if Value <> fIcon then

begin

fIcon.Assign(value);

ModifyIcon;

end;

end;

procedure TTrayIcon.SetToolTip(Value : string);

begin

// This routine ALWAYS re-sets the field value and re-loads the

// icon. This is so the ToolTip can be set blank when the component

// is first loaded. If this is changed, the icon will be blank on

// the tray when no ToolTip is specified.

if length( Value ) > 62 then

Value := copy(Value,1,62);

fToolTip := value;

ModifyIcon;

end;

constructor TTrayIcon.create(aOwner : Tcomponent);

begin

inherited create(aOwner);

FWindowHandle := AllocateHWnd( WndProc );

FIcon := TIcon.Create;

end;

destructor TTrayIcon.destroy;

begin

if (not (csDesigning in ComponentState) and fActive)

or ((csDesigning in ComponentState) and fShowDesigning) then

DeleteIcon;

FIcon.Free;

DeAllocateHWnd( FWindowHandle );

inherited destroy;

end;

procedure TTrayIcon.FillDataStructure;

begin

with IconData do begin

cbSize := sizeof(TNOTIFYICONDATA);

wnd := FWindowHandle;

uID := 0; // is not passed in with message so make it 0

uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;

hIcon := fIcon.Handle;

StrPCopy(szTip,fToolTip);

uCallbackMessage := WM_TOOLTRAYICON;

end;

end;

function TTrayIcon.AddIcon : boolean;

begin

FillDataStructure;

result := Shell_NotifyIcon(NIM_ADD,@IconData);

// For some reason, if there is no tool tip set up, then the icon

// doesn't display. This fixes that.

if fToolTip = '' then

PostMessage( fWindowHandle, WM_RESETTOOLTIP,0,0 );

end;

function TTrayIcon.ModifyIcon : boolean;

begin

FillDataStructure;

if fActive then

result := Shell_NotifyIcon(NIM_MODIFY,@IconData)

else

result := True;

end;

procedure TTrayIcon.DoRightClick( Sender : TObject );

var MouseCo: Tpoint;

begin

GetCursorPos(MouseCo);

if assigned( fPopupMenu ) then begin

SetForegroundWindow( Application.Handle );

Application.ProcessMessages;

fPopupmenu.Popup( Mouseco.X, Mouseco.Y );

end;

if assigned( FOnRightClick ) then

begin

FOnRightClick(self,mbRight,[],MouseCo.x,MouseCo.y);

end;

end;

function TTrayIcon.DeleteIcon : boolean;

begin

result := Shell_NotifyIcon(NIM_DELETE,@IconData);

end;

procedure TTrayIcon.WndProc(var msg : TMessage);

begin

with msg do

if (msg = WM_RESETTOOLTIP) then

SetToolTip( fToolTip )

else if (msg = WM_TOOLTRAYICON) then begin

case lParam of

WM_LBUTTONDBLCLK : if assigned (FOnDblClick) then FOnDblClick(self);

WM_LBUTTONUP : if assigned(FOnClick)then FOnClick(self);

WM_RBUTTONUP : DoRightClick(self);

end;

end

else // Handle all messages with the default handler

Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);

end;

procedure Register;

begin

RegisterComponents('Win95', [TTrayIcon]);

end;

end.