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

Вниз

Невидимая форма   Найти похожие ветки 

 
mixVictor   (2002-06-04 02:36) [0]

Хотелось бы узнать можно при запуске формы сделать так, чтобы она создавалась, но не показывалась пользователю. Типа сделать изначально "form1.visible=false". У меня получилось только запустить программу и только через некоторое время послать ей
showwindow(handle,Sw_hide);
В итоге форма, моргнув на экране, исчезает. Но если в это время ПК загрузить какой либо работой, то может и не исчезнуть.


 
Walker ©   (2002-06-04 03:13) [1]

скопируй модуль из Delphi\Source\VCL\forms.pas в папку с твоим проетком

затем в этом модуле подправь:

в самом начале, после объевления uses ... ;
// Added by Walker:
const
FVisibleOnTaskBar : Boolean= TRUE; // if Changing - need UpdateVisible
FMainFormVisibleAtStartup : Boolean= TRUE;
//... by Walker


дальше в {для Delphi 6}

procedure TApplication.Run;
begin
FRunning := True;
try
AddExitProc(DoneApplication);
if FMainForm <> nil then
begin
if FMainFormVisibleAtStartup then // by Walker
begin // by Walker
case CmdShow of
SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
end;
if FShowMainForm then
if FMainForm.FWindowState = wsMinimized then
Minimize else
FMainForm.Visible := True;
end; // by Walker

repeat
try
HandleMessage;
except
HandleException(Self);
end;
until Terminated;
end;
finally
FRunning := False;
end;
end;

{для Delphi 5}
procedure TApplication.Run;
begin
FRunning := True;
try
AddExitProc(DoneApplication);
if FMainForm <> nil then
begin
if FMainFormVisibleAtStartup then // by Walker
begin // by Walker
case CmdShow of
SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
end;
if FShowMainForm then
if FMainForm.FWindowState = wsMinimized then
Minimize else
FMainForm.Visible := True;
end; // by Walker
repeat
HandleMessage
until Terminated;
end;
finally
FRunning := False;
end;
end;


=========
а также

procedure TApplication.UpdateVisible;
..............................................
begin
if FHandle <> 0 then
begin
for I := 0 to Screen.FormCount - 1 do
begin
Form := Screen.Forms[I];
if Form.Visible and ((Form.ParentWindow = 0) or Form.HandleAllocated or
not IsChild(Form.Handle, Form.ParentWindow)) then
begin
//SetVisible(True); // Default
SetVisible(FVisibleOnTaskBar); // by Walker
Exit;
end;
end;
SetVisible(False);
end;
end;

а затем в файле проекта:
FVisibleOnTaskBar :=False;


 
mixVictor   (2002-06-04 03:20) [2]

Спасибо опробую!!!


 
Вовчик   (2002-06-04 06:41) [3]

Это слишком громоздко
попробуй в проектфайле project.dpr например
после
Application.CreateForm(TMainForm, MainForm);
написать
Application.ShowMainForm := False;
эта форма создастся и будет невидимой, пока естесственно не набрать MainForm.Show


 
Lefan ©   (2002-06-04 08:34) [4]

>Это слишком громоздко
>попробуй в проектфайле project.dpr например
>после
>Application.CreateForm(TMainForm, MainForm);
>написать
>Application.ShowMainForm := False;
>эта форма создастся и будет невидимой, пока естесственно не >набрать MainForm.Show

дык она и не работет... :( (в смысле программа, запускается, но никаких действий)


 
Song ©   (2002-06-04 08:58) [5]

А какие должны быть действия ?


 
Вовчик   (2002-06-04 19:10) [6]

Чтоб были какие нибудь действия нжно описать их. Из ничего ничего и не получается


 
Kettle of delphi   (2002-06-05 00:32) [7]

Мне кажется, проще всего сделать координаты вывода отрицательными )


 
Walker ©   (2002-06-05 03:15) [8]

что бы вы вс тут не говорили, но все другие способы будут примерно работать так:
при запуске программы окно вначале появится, потом сразу исчезнет, а если Left и Top координаты окна сделать отрицательными, то всё равно кнопка на панели задач останется....


 
Вовчик   (2002-06-05 07:12) [9]

Если писать как предлагаю я, а именно
Application.ShowMainForm := False;
то окно не появляется в принципе, оно просто не успеет, хотя не знаю как будет выглядеть на машине типа 486 с 8М ОЗУ, но по идее и там не должно :-)
А чтоб исчезла кнопка на панели задач, то это уже вопрос API, Если интересует как это сделать обращайтесь туда. Я в принципе это как то делал, она исчезает, но при минимизации опять появляется, гадина :-), что делать, чтоб не появлялось ничего кроме как постоянно скрывать не придумал :-(


 
Walker ©   (2002-06-06 01:13) [10]

рррр....

to Вовчик:
если у тя на форме всего одна кнопка - то не успеет...

а чтоб сделать на панели задач невидимой кнопку приложения -
ShowWindow(Application.Handle, SW_HIDE)
но опять же, если использовать эту функцию, то кнопка вначале появится а потом, через какое-то время, исчезнет.
P.S.:
я этот вопрос исследовал вдоль и поперёк... есть конечно ещё вариант, который не меняет модуль Forms.pas, но это надо писать обработчик событий... что-то типа HookWindow, а такое занятие займёт куда больше времени, чем добавить 6-7 строк в модуль Forms


 
Song ©   (2002-06-06 08:43) [11]

Ни кнопка не появится, ни окно не отобразится вообще !! при Application.ShowMainForm на каком угодно компутере. Чего Вы флейм разводите ?


 
Лех   (2002-06-07 16:15) [12]

Не знаю, под Виндой 98
Application.ShowMainForm := False;
работает как не фиг делать, только потом где тебе надо ставишь
[главная форма].show;


 
hooky-mars ©   (2002-06-07 16:38) [13]

Для скрытия формы пишеш:
Left:=Screen.Height;
Top:=Screen.Width;CODE>

Для скрытьия из таск бара в *.dpk пишеш:

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;


 
hooky-mars ©   (2002-06-07 16:40) [14]


> CODE>
Это не к прогре, при написании в форуме не правилно сделал!



Страницы: 1 вся ветка

Текущий архив: 2002.06.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
1-65079
Help mine mind!
2002-06-08 20:20
2002.06.20
Kак в TDBGrid добавить текст!


3-64990
Draculenok
2002-05-28 13:28
2002.06.20
Скорость работы ...


1-65066
Phil
2002-06-10 12:41
2002.06.20
Помогите!!!


3-64902
Browko Dmitrey
2002-05-29 15:18
2002.06.20
ADOQuery и команда CAST


1-65037
Cr@zy
2002-06-08 11:55
2002.06.20
Кнопки в WinXP