Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-65066
Phil
2002-06-10 12:41
2002.06.20
Помогите!!!


1-65100
z_z
2002-06-06 22:30
2002.06.20
Вопросик про TTimer


1-65042
Great DAN
2002-06-10 07:20
2002.06.20
Qrep


1-65067
garry
2002-06-06 17:25
2002.06.20
Excel, Колонтитулы и т.п


3-64978
diww
2002-05-28 15:37
2002.06.20
Что за ошибка такая?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский