Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как убрать кнопку приложения из панели задач


Автор: Rakhim 4.2.2005, 14:41
Как убрать кнопку приложения из панели задач при запуске
Приложение запускается минимизированным.

При добавлении в событие Create - иконка добавляется, но кнопка потом появляется.
А в событие Show - не исполняется (не прорисовывается)

Код

 Ic(1, Application.Icon);
 ShowWindow(Form1.Handle, SW_HIDE);
 ShowWindow(Application.Handle, SW_HIDE);


Куда добавть этот код

Автор: Vit 4.2.2005, 16:53
ShowWindow(Application.Handle, SW_HIDE);

На onCreate главной фрормы

Автор: Rakhim 5.2.2005, 12:43
WindowsState=wsMinimized
Я пробовал вставить ShowWindow(Application.Handle, SW_HIDE) на onCreate главной фрормы, но кнопка остаются.

Судя по троссировке кнопка появляется после Application.Run, а onShow не запускается совсем.



Если вставить, следующий код (при WindowsState=wsNormal)
Ic(1, Application.Icon);
ShowWindow(Form1.Handle, SW_HIDE);
ShowWindow(Application.Handle, SW_HIDE);

на onShow - то кнопка уходит, но после этого события появляется форма


Автор: Song 5.2.2005, 12:58
Rakhim
какая ОС?

Автор: Akella 5.2.2005, 13:14
Все работает WinXP+SP2
Код

procedure TForm1.FormShow(Sender: TObject);
begin
 ShowWindow(Application.Handle, SW_HIDE);
 ShowWindow(Form1.Handle, SW_HIDE);//это не обязятельно
end;

Автор: Rakhim 14.2.2005, 15:08
ОС - WinXP+SP1
это зависит от ОС ?

Автор: ~FoX~ 15.2.2005, 14:09
Цитата(Rakhim @ 14.2.2005, 15:08)
это зависит от ОС ?

Зависит.......под линуксом работать не станет smile

Цитата

procedure TForm1.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  ShowWindow(Form1.Handle, SW_HIDE);//это не обязятельно
end;

Работает на всех винда позднее 3х

Если так не нравиться, то под 9х будет работать CreateProcess......можно вывернуться еще хитрее.....регистрировать твою прогу как драйвер......тогда её даже в диспетчере задач видно не будет smile

Автор: Rakhim 18.2.2005, 10:17
У меня не получается может я что то пропусти привожу полный код.
Или остаются форма или кнопка на панели задач

Код

unit MainUnit;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, ComCtrls, Winsock, Buttons, ShellApi,
 IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, IdSNTP, IdIPWatch,
 IdTime, Spin, IniFiles, IdTCPClient, IdTCPConnection, IdException;

type
 TForm1 = class(TForm)
   StatusBar1: TStatusBar;
   Procedure Ic(n:Integer;Icon:TIcon);
   procedure ControlWindow(var Msg: TMessage); message WM_SYSCOMMAND;
   procedure IconMouse(var Msg: TMessage); message WM_USER + 1;
   procedure FormShow(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}



Procedure TForm1.Ic(n:Integer;Icon:TIcon);
 Var Nim:TNotifyIconData;
begin
 With Nim do
 Begin
   cbSize:=SizeOf(Nim);
   Wnd:=Form1.Handle;
   uID:=1;
   uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
   hicon:=Icon.Handle;
   uCallbackMessage:=wm_user+1;
   szTip:='ssssssssss';
 End;


 Case n OF
  1: Shell_NotifyIcon(Nim_Add, @Nim);
  2: Shell_NotifyIcon(Nim_Delete, @Nim);
  3: Shell_NotifyIcon(Nim_Modify, @Nim);
 End;
end;

procedure TForm1.ControlWindow(var Msg: TMessage);
begin
 if Msg.WParam = SC_MINIMIZE then
 begin
   Ic(1, Application.Icon);
   ShowWindow(Form1.Handle, SW_HIDE);
   ShowWindow(Application.Handle, SW_HIDE);
 end
 else
   inherited;
end;

procedure TForm1.IconMouse(var Msg: TMessage);
var
 p: tpoint;
begin
 GetCursorPos(p);
 case Msg.LParam of
   WM_LBUTTONUP, WM_LBUTTONDBLCLK:
     begin
       Ic(2, Application.Icon);
       ShowWindow(Form1.Handle, SW_SHOWNORMAL);
       ShowWindow(Application.Handle,SW_SHOWNORMAL);
     end;
   WM_RBUTTONUP:
     begin
       SetForegroundWindow(Application.Handle);
       PostMessage(Application.Handle, WM_NULL, 0, 0)
     end;
 end;
end;


procedure TForm1.FormShow(Sender: TObject);
begin
 Ic(1, Application.Icon);
 ShowWindow(Application.Handle, SW_HIDE);
 ShowWindow(Form1.Handle, SW_HIDE);
end;

end.




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)