Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.5 MB
Время: 0.034 c
1-41385
kavlad
2003-10-30 12:28
2003.11.13
Все (почти) пропало


3-40790
AlexPul
2003-10-22 13:05
2003.11.13
Как сделать поля TIBQuery редактируемыми.


1-41377
Aleksandr
2003-10-30 13:09
2003.11.13
Почему неправильно рисуется PageControl?


3-40845
Denisiy
2003-10-21 16:16
2003.11.13
Как передать в переменную резльтат запроса от Query?


14-42137
Jek
2003-10-20 16:24
2003.11.13
Прикольное сообщение об ошибке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский