Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.11;
Скачать: [xml.tar.bz2];

Вниз

Минимизировать Модальное окно!   Найти похожие ветки 

 
Igel   (2003-08-28 10:03) [0]

КАК?
Ведь должен быть способ!! То, что я видел не получается!!


 
KSergey   (2003-08-28 10:06) [1]

А точно надо именно модальное окно одно минимиировать? А зачем?
Модальное - то, с которым пользователь сейчас работает. И только с ним. Если его минимизировать (не минимизировав остальные окна приложения) - что тогда делать пользователю? Смотреть на другие окна? Так для этого можно просто сдвинуть, например...


 
AndreySoft   (2003-08-28 10:28) [2]

Если тебя интересует это, то вот как:
...
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Minimize;
end;
...
Если не то - конкретней задай вопрос.


 
Андрей Сенченко   (2003-08-28 10:42) [3]

Опасное дело затеял. Это ТЫ знаешь, что минимизировал МОДАЛЬНОЕ окно, а вот пользователь может упереться в то, что ничего не сможет сделать с работающим по его понятиям приложением.
Зачем вводить людей в заблуждение ?


 
Dred2k   (2003-08-28 11:04) [4]

Тут выход один - при минимизации свертывать все приложение (как уже сказал > AndreySoft © (28.08.03 10:28) [2] ).
Лучше даже так, по кнопке в заголовке будет работать:

TForm1 = ...
private
procedure WMSysCommand(var Msg : TMessage); message WM_SYSCOMMAND;
...
procedure TForm1.WMSysCommand(var Msg : TMessage);
begin
if((Msg.WParam = SC_MINIMIZE) and MinimizeApplication) then
Application.Minimize
else
inherited;
end;


При восстановлении все замечательно ресторится. Это очень удобно, кстати - модальная форма на фоне полноэкранного MDI, к примеру, не должна пользователя лишать возможности свернуть все приложение целиком.


 
Igel   (2003-08-28 11:14) [5]

Опишу проблему:
Сделал ДЛЛ-ку, которая вызывает модальную форму. Тут все ок!
Дальше... В самой форме идет диалог запроса файла. Тут уже заморочка. Когда использую эту ДЛЛ-ку окно открывается, но когда хочу указать файл (жму кнопку, идет обработка OpenDialog) то он появляется ЗА окном.
Поскольку я еще начинающий, то решил просто, перед запуском OpenDialog минимизировать окно, что-бы не мешало выбору файла...

Вот так. И еще, как мне узнать в нутри обработчика HWND окна формы? TForm1.handle - не идет. Не уж-то нужно брать внешне описанную переменную Form1.handle?


 
AndreySoft   (2003-08-28 12:04) [6]

Не-а, тебе нельзя сворачивать модальное окно, т.к. автоматически сворачивается всё приложение и соответственно все окна в этом приложении.
А если тебе надо просто на время спрятать окно, пока виден OpenDialog, то можно в событии OpenDialog1Show написать так:
...
procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
Form1.Hide;
end;
...
А в OpenDialog1Close - так:
...
procedure TForm1.OpenDialog1Close(Sender: TObject);
begin
Form1.Show;
end;
...
Попробуй! Тебя это интересовало?


 
Igel   (2003-08-28 12:28) [7]

Попробовал, только чой-то не то. HIDE - срабатывает как-то не так, точнее не работает..


 
KSergey   (2003-08-28 13:45) [8]

О каком диалоге выбора файла идет речь? О TOpenDialog?
Тогда все должно быть нормально, только что проверил

Ситуация та же: dll, в ней модальная форма, на форме - кнопка, в обработчике написано

OpenDialog1.Execute;

Все работает отлично, никто не прячется, диалог открывается поверх всех.

К стати, Application.Handle в Dll не забываете назначить (из значения Application.Handle вызывающей программы, если она на дельфи)?


 
Igel   (2003-08-28 14:04) [9]

А пример про Application.Handle в Dll? Я не совсем понял...


 
Dred2k   (2003-08-28 14:56) [10]

> Igel (28.08.03 14:04) [9]

А у тебя модальная форма в DLL не StayOnTop, случаем ?
OpenDlg := TOpenDialog.Create(DLLDlgForm); тоже не повредит.


 
Dred2k   (2003-08-28 15:01) [11]

> Igel (28.08.03 14:04) [9]
> А пример про Application.Handle в Dll? Я не совсем понял...


Вот нелп на Application.Handle:

Provides access to the window handle of the main form (window) of the application.

property Handle: HWND;

Description

Use Handle when calling a Windows API functions that require a parent window handle. For example, a DLL that displays its own top-level pop-up windows will need a parent window to display its windows in the application. Using the Application.Handle makes such windows part of the application, so that they will be minimized, restored, enabled and disabled with the application.

Note: When writing a DLL that uses VCL forms, assign the window handle of the host EXE’s main window to the DLL’s Application.Handle property. This makes the DLL’s form part of the host application. Never assign to Application.Handle in an EXE.



Ферштейн? Про F1 не забывай.



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

Форум: "Основная";
Текущий архив: 2003.09.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
1-33605
AlexTregubov
2003-09-01 14:32
2003.09.11
E-mail


1-33656
Lex
2003-08-29 12:42
2003.09.11
Элементы управления на Web странице


1-33671
Sfagnum
2003-08-29 10:54
2003.09.11
Объявление массива...


14-33764
jack128
2003-08-24 01:05
2003.09.11
Именинники 24 августа


1-33570
isff
2003-09-01 15:23
2003.09.11
dll, изменение в главной форме.





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