Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Как спрятать форму при открытии?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
4-42257
Julliete
2003-08-14 11:20
2003.11.13
Запуск приложений.


1-41147
md
2003-11-03 13:54
2003.11.13
paramstr


3-41001
KIR
2003-10-16 11:03
2003.11.13
При запуске UDF разрывается коннект с базой...?!


3-40828
Miwa
2003-10-22 05:45
2003.11.13
С чего начать или Какую СУБД/технологию/литературу посоветуете?


6-41828
Дмитрий П
2003-09-14 14:27
2003.11.13
Программно изменить адрес шлюза в настройках TCP/IP.