Форум: "WinAPI";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизTaskBar Найти похожие ветки
← →
Quattro © (2005-07-28 01:39) [0]Добрый день!...подскажите,пожалуйста, где у меня ошибка??...по нажатию кнопки надобно чтоб по нажатию одной кнопки кирпичик либо скрывался,либо появлялся в панели задач....скрываться то он скрываеться,но не появляется...ниже приведён код...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellAPI,ExtCtrls,StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TSystemTrayIcon = class(TComponent)
private
FDefaultIcon:THandle;
FIcon:TIcon;
FPlaced:Boolean;
FHideTask:Boolean;
FHint:String;
FIconVisible:Boolean;
FTimer:TTimer;
NID:TNotifyIconData;
procedure SendTrayMessage(Msg:DWORD;Flags:UINT);
procedure SetIconVisible(Value:Boolean);
procedure LoadDefaultIcon;
procedure SetHideTask(Value:Boolean);
function ActiveIconHandle:THandle;
public
Constructor Create(AOwner:TComponent);override;
Destructor Destroy;override;
property IconVisible : Boolean read FIconVisible write SetIconVisible;
property HideTask : Boolean read FHideTask write SetHideTask default False;
end;
TIconManager = class
private
FHWindow:HWnd;
procedure TrayMsg(var Message:TMessage);
public
Constructor Create;
Destructor Destroy;override;
property HWindow:HWnd read FHWindow write FHWindow;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
IconManager:TIconManager;
DDGM_TRAYICON:Cardinal;
{ TSystemTrayIcon }
function TSystemTrayIcon.ActiveIconHandle: THandle;
begin
Result:=FDefaultIcon;
end;
constructor TSystemTrayIcon.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FIcon:=TIcon.Create;
FTimer:=TTimer.Create(Self);
with FTimer do begin
Enabled:=False;
Interval:=GetDoubleClickTime;
end;
LoadDefaultIcon;
end;
destructor TSystemTrayIcon.Destroy;
begin
if FIconVisible then SetIconVisible(False);
FIcon.Free;
FTimer.Free;
inherited Destroy;
end;
procedure TSystemTrayIcon.LoadDefaultIcon;
begin
FDefaultIcon:=LoadIcon(0,IDI_WINLOGO);
end;
procedure TSystemTrayIcon.SendTrayMessage(Msg: DWORD; Flags: UINT);
begin
with NID do begin
cbSize:= SizeOf(NID);
uFlags:=Flags;
uID:=uID;
Wnd:=IconManager.HWindow;
uCallBackMessage:=DDGM_TRAYICON;
hIcon:=ActiveIconHandle;
StrPLCopy(szTip,PChar(FHint),SizeOf(szTip));
end;
Shell_NotifyIcon(NIM_ADD,@NID);
end;
procedure TSystemTrayIcon.SetHideTask(Value: Boolean);
const
ShowArray: array[Boolean] of integer = (sw_ShowNormal,sw_Hide);
begin
if FHideTask <> Value then
FHideTask:=Value;
if not (csDesigning in ComponentState) then
ShowWindow(Application.Handle,ShowArray[FHideTask]);
end;
procedure TSystemTrayIcon.SetIconVisible(Value: Boolean);
const
MsgArray: array[Boolean] of DWORD = (NIM_DELETE,NIM_ADD);
begin
if (FIconVisible <> Value) then
begin
FIconVisible:=Value;
SendTrayMessage(MsgArray[Value],NIF_MESSAGE or NIF_ICON or NIF_TIP);
end;
end;
{ TIconManager }
constructor TIconManager.Create;
begin
FHWindow:=AllocateHWnd(TrayMsg);
end;
destructor TIconManager.Destroy;
begin
if FHWindow <> 0 then DeallocateHwnd(FHWindow);
inherited;
end;
procedure TIconManager.TrayMsg(var Message: TMessage);
var
TheIcon:TSystemTrayIcon;
begin
with Message do begin
if (Msg = DDGM_TRAYICON) then
TheIcon:=TSystemTrayIcon(wParam)
else
Result:=DefWindowProc(FHWindow,Msg,wParam,lParam);
end;
end;
const
TrayMsgStr ="DDG.TrayNotifyIconMsg";
procedure TForm1.Button1Click(Sender: TObject);
var
ST:TSystemTrayIcon;
begin
ST:=TSystemTrayIcon.Create(nil);
if ST.HideTask then
ST.SetHideTask(False)
else
ST.SetHideTask(True);
end;
initialization
DDGM_TRAYICON:=RegisterWindowMessage(TrayMsgStr);
IconManager:=TIconManager.Create;
finalization
IconManager.Free;
end.
это всё в стадии разработки:)..но уже почему то не работает:)...если сделать две кнопки-одна прячет кирпичик, вторая - показывает..тогда всё работает....а если сделать одну и действовать в зависимости от знавения HideTask-тогда не получается...подскажите,плиз, в чём проблема....не вижу ошибки-хоть убей....
← →
alex-drob © (2005-07-28 01:57) [1]Скорей всего ST.HideTask всегда становиться равно false при нажатии на кнопку.
Т.к. каждый раз выполняется ST:=TSystemTrayIcon.Create(nil);
Попробуй в formcreate запихнуть эту строку.
← →
Quattro © (2005-07-28 02:30) [2]=>alex-drob ©
Вай вай вай!!!....спасибо тебе!!..как это я не углядел!!..и точно ведь!!!....земной поклон!!!..=)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c