Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 11:31   #1
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию Диалоговое окно

Как сделать что бы диалоговое окно типа Application.MessageBox ,
было на переднем плане,что бы не перекрывалось другими окнами
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 01.06.2009, 11:49   #2
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Если вы создаете его с помощью:

H := MessageBox(Handle, 'йцу', 'кен', MB_OK);

То оно перенимает свойства предка, т.е. если родитель обладал свойством fsStayOnTop, то и окошко это тоже.

Ещё, обычно MessageBox блокирует основное окно, чтобы этого не было нужно сделать его родителем рабочий стол -

MessageBox(HWND(0), 'йцу', 'кен', MB_OK);

Теперь оно ещё и в панели задач отображается

Аналогичный Вопрос

А как такому окошку отправить сообщение? Что-то оно не поддается ни SendMeSSage, FindWindow, SetWindowPos?

Последний раз редактировалось BaronTreep; 01.06.2009 в 12:17.
BaronTreep вне форума Ответить с цитированием
Старый 01.06.2009, 12:06   #3
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Можно написать свой диалог и переместить его на передний план с помощью SetWindowPos, например ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 01.06.2009, 12:19   #4
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

А как это сделать?

А как это сделать? Полностью создавать/регистрировать в системе под ВинАпи, или можно проще?

Последний раз редактировалось Stilet; 01.06.2009 в 12:23.
BaronTreep вне форума Ответить с цитированием
Старый 01.06.2009, 12:26   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
А как такому окошку отправить сообщение?
Какое именно?
Цитата:
т.е. если родитель обладал свойством fsStayOnTop, то и окошко это тоже.
Я бы так не сказал. Просто оно выводится поверх указанного хендла.
Цитата:
было на переднем плане,что бы не перекрывалось другими окнами
Код:
MessageBox(GetForegroundWindow,...);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.06.2009, 12:30   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

К примеру в событии OnShow твоего диалога пишешь :
Код:
procedure TOKBottomDlg.FormShow(Sender: TObject);
begin
with OKBottomDlg do SetWindowPos(Handle, HWND_TOPMOST,Left,Top,Width,Height,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
HWND_TOPMOST - перенести окно на передний план (поверх остальных), HWND_NOTOPMOST - соответственно наоборот...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 01.06.2009, 12:33   #7
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Ну например можно его найти FindWindow и отправить SendMeSSage. У меня почему-то не получилось..
BaronTreep вне форума Ответить с цитированием
Старый 01.06.2009, 12:46   #8
Михаил Юрьевич
Форумчанин
 
Аватар для Михаил Юрьевич
 
Регистрация: 25.12.2007
Сообщений: 655
По умолчанию

Дело в том,что главное окно скрывается при запуске приложения командой:
Application.Showmainform:=false
и когда вызывается диалоговое окно,то оно перекрывается другими окнами
За частые поиски был забанен во всех известных
поисковых системах!
Михаил Юрьевич вне форума Ответить с цитированием
Старый 01.06.2009, 12:58   #9
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Ну чего, код Stilet'a прекрасно сработает:

Код:
Application.Showmainform:=false;
MessageBox(GetForegroundWindow, 'q', 'q', MB_OK);
BaronTreep вне форума Ответить с цитированием
Старый 01.06.2009, 13:12   #10
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
MessageBox(0,'q','q',MB_ICONQUESTION+MB_YESNO+MB_SYSTEMMODAL)
MessageBox(0,'q','q',MB_ICONQUESTION+MB_YESNO+MB_SETFOREGROUND)
SERG1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диалоговое окно при создании файла tae1980 Microsoft Office Excel 5 16.03.2009 21:41
Диалоговое окно Beggins Общие вопросы C/C++ 3 09.05.2008 05:03
Помогите поставить условия в StringGrid, чтобы выходило диалоговое окно. Digimon Помощь студентам 2 18.02.2008 08:28
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28