Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизКак спрятать форму при открытии? Найти похожие ветки
← →
lamer666 (2003-10-29 17:44) [0]Приветствую, мастера!
Вопрос в следующем:
я сворачиваю форму в иконку в трее и если надо восстанавливаю.
Но у меня никак не получается спрятать форму после открытия.
Код выкладывать бессмысленно, т.к. он и так есть в FAQ.
Помогите, кто чем может!
← →
Anatoly Podgoretsky (2003-10-29 17:47) [1]И что их FAQ не работает?
Значит надо его привести.
← →
lamer666 (2003-10-29 17:50) [2]Да нет, FAQ работает - сворачивает форму до иконки. Но надо, чтобы еще и форма пряталась.
← →
Игорь Шевченко (2003-10-29 17:50) [3]
> Помогите, кто чем может!
10 коп ?
ShowWindow(Application.Handle, SW_HIDE) ?
← →
lamer666 (2003-10-29 17:58) [4]
> Игорь Шевченко ©
ShowWindow(Application.Handle, SW_HIDE) не срабатывает - ни сразу после создания формы, ни в ONCREATE.
← →
Игорь Шевченко (2003-10-29 18:04) [5]А ... Form.Visible := false тоже не срабатывает ?
← →
lamer666 (2003-10-29 18:05) [6]Абсолютно точно!
← →
nikkie (2003-10-29 18:06) [7]ну если еще и Application.ShowMainForm не поможет...
← →
lamer666 (2003-10-29 18:12) [8]Дело в том, что все три варианта я уже пробовал.
Во всех трех случаях после создания форма остается на столе.
Еще я пробовал минимизировать форму и скрывал ее по клику в пункте меню. Эта с_%^" скрывается на раз от Form.Visible := false. И все равно при запуске никак не хочес изчезать!
← →
IceBeerg (2003-10-29 18:13) [9]Я удивляюсь. Ответ Application.ShowMainForm только 7ой. Ну вы блин господа мастера даете... стране байта, мелгого, но много :)
← →
Юрий Зотов (2003-10-29 18:14) [10]> lamer666
http://www.delphikingdom.ru/helloworld/samples_win.htm
← →
lamer666 (2003-10-29 18:18) [11]На всякий случай кладу код:
program Plirder;
uses
Forms,
Windows,
Unit1 in "Unit1.pas" {Form1};
{$R *.RES}
var
ExtendedStyle : integer;
begin
Application.Initialize;
ExtendedStyle := GetWindowLong(application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
ExtendedStyle or WS_EX_TOOLWINDOW {AND NOT WS_EX_APPWINDOW});
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
procedure TForm1.ShellIcon;
begin
with NotifyIconData do
begin
uID := 0;
uFlags := NIF_ICON OR NIF_TIP OR NIF_MESSAGE;
Wnd := TForm1(Self).Handle;
uCallbackMessage:=WM_USER;
szTip:="Заставка";
end;
NotifyIconData.hIcon := LoadIcon(hInstance, "MAINICON");
NotifyIconData.cbSize := SizeOf (NotifyIconData);
Shell_NotifyIcon (NIM_ADD, PNotifyIconData (@NotifyIconData));
end;
procedure TForm1.WMAppCallback(var Message: TMessage);
begin
If Message.lParam=WM_MOUSEMOVE Then
Begin
Exit;
End;
if (Message.lParam=WM_LBUTTONDBLCLK)
OR (Message.lParam=WM_LBUTTONDOWN) Then
Begin
ExecuteShed();
Exit;
end;
If (Message.lParam=WM_RBUTTONDBLCLK)
OR (Message.lParam=WM_RBUTTONDOWN) Then
Begin
PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
// Shell_NotifyIcon (NIM_DELETE, PNotifyIconData (@NotifyIconData));
Exit;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if not (csDesigning in ComponentState) then
RegisterServiceProcess(GetCurrentProcessID, 1);
ShellIcon;
ShowWindow(Application.Handle, SW_HIDE);
end;
← →
lamer666 (2003-10-29 18:18) [12]На всякий случай кладу код:
program Plirder;
uses
Forms,
Windows,
Unit1 in "Unit1.pas" {Form1};
{$R *.RES}
var
ExtendedStyle : integer;
begin
Application.Initialize;
ExtendedStyle := GetWindowLong(application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
ExtendedStyle or WS_EX_TOOLWINDOW {AND NOT WS_EX_APPWINDOW});
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
procedure TForm1.ShellIcon;
begin
with NotifyIconData do
begin
uID := 0;
uFlags := NIF_ICON OR NIF_TIP OR NIF_MESSAGE;
Wnd := TForm1(Self).Handle;
uCallbackMessage:=WM_USER;
szTip:="Заставка";
end;
NotifyIconData.hIcon := LoadIcon(hInstance, "MAINICON");
NotifyIconData.cbSize := SizeOf (NotifyIconData);
Shell_NotifyIcon (NIM_ADD, PNotifyIconData (@NotifyIconData));
end;
procedure TForm1.WMAppCallback(var Message: TMessage);
begin
If Message.lParam=WM_MOUSEMOVE Then
Begin
Exit;
End;
if (Message.lParam=WM_LBUTTONDBLCLK)
OR (Message.lParam=WM_LBUTTONDOWN) Then
Begin
ExecuteShed();
Exit;
end;
If (Message.lParam=WM_RBUTTONDBLCLK)
OR (Message.lParam=WM_RBUTTONDOWN) Then
Begin
PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
// Shell_NotifyIcon (NIM_DELETE, PNotifyIconData (@NotifyIconData));
Exit;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if not (csDesigning in ComponentState) then
RegisterServiceProcess(GetCurrentProcessID, 1);
ShellIcon;
ShowWindow(Application.Handle, SW_HIDE);
end;
← →
Игорь Шевченко (2003-10-29 18:22) [13]IceBeerg © (29.10.03 18:13)
> Я удивляюсь.
На свете есть много удивительного. Тут не чемпионат по ответам и не олимпиада. Удивляйся дальше, оно рулез.
← →
icebeerg (2003-10-29 18:32) [14]-> Игорь Шевченко © (29.10.03 18:22) [13]
Я, это, извиняюсь, просто ответ на поверхносит "лежал".
← →
Игорь Шевченко (2003-10-29 18:37) [15]icebeerg © (29.10.03 18:32)
Ну и, это, ответил бы...Чего на других-то наезжать ?
← →
Kudesnik (2003-10-29 18:42) [16]Сам буквально только что писал (ещё пишу) прогу, которая должна вести себя так же и, вроде данная проблема решена. Как я понимаю, в общих чертах, есть две, так скать, сущности. Application и MainForm. Как они там в деталях взаимодействуют я не разбирался, но в данном конкретном случае прятать их надо обе.
Вот рабочая процедурка:
procedure TForm1.HideMainForm;
begin
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;
Засада в том, что восстанавливать потом задолбаешься :) Каждый WinControl на форме надо будет ShowWindow(Handle, SW_SHOWDEFAULT) отдельно. А вообще, подробно и понятно это рассказано на
<a href=" http://www.realcoding.net/teachdelphi/CHAPT~27/INDEX.HTM" target="_blank"> http://www.realcoding.net/teachdelphi/CHAPT~27/INDEX.HTM</a>
http://www.realcoding.net/teachdelphi/CHAPT~27/INDEX.HTM
← →
Юрий Зотов (2003-10-29 18:49) [17]> Kudesnik (29.10.03 18:42) [16]
Вы неправы. Все обстоит несколько проще.
http://www.delphikingdom.ru/helloworld/samples_win.htm
← →
lamer666 (2003-10-29 19:11) [18]
> Kudesnik
Круто! И спасибо!
Это действительно решение!
← →
nikkie (2003-10-29 19:24) [19]>IceBeerg
как видишь, хоть этот ответ и лежал на поверхности, автору он не подошел :))
← →
Kudesnik (2003-10-29 19:51) [20]> Юрий Зотов
Если главную форму скрыть раз и навсегда, а уже из неё рулить другими, то так действительно, оказывается, можно. Неуверен, что проще, хотя, наверное, изящнее и может даже удобнее. Но если прятать и обратно показывать главную форму из самой себя, то одного ShowMainForm := False не достаточно.
А вообще-то, в процессе поиска решения я натыкался на вашу статью. Но она показалась слишком умной, т.е. понятно что вобщем-то ничего не доступного, но как-то уж слишком далеко от изначальных Delphe-й. Там вообще у вас всё вручную. Сейчас специально внимательно посмотрел, разобрался, что к чему, но для понимания "сходу" вариант с SW_HIDE на всё что можно проще.
Вобщем, лишнее подтверждение тезиса, что часто лёгкое в освоении бывает менее удобно в использовании и наоборот.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c