Форум: "Основная";
Текущий архив: 2002.06.20;
Скачать: [xml.tar.bz2];
Вниз
Невидимая форма Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c