0 / 0 / 1
Регистрация: 20.04.2010
Сообщений: 32
|
|
1 | |
Модальное окно по типу "Закрытия Windows"?06.09.2010, 13:14. Показов 2840. Ответов 18
Метки нет (Все метки)
0
|
06.09.2010, 13:14 | |
Ответы с готовыми решениями:
18
Свое модальное окно на события закрытия вкладки Нужно закрыть модальное окно и сделать активным вызвавшее его окно Окно с тремя метками и модальное окно для изменения их текста Создать модальное окно (дочернее окно) как в одноклассниках |
1 / 1 / 1
Регистрация: 26.08.2010
Сообщений: 133
|
|
06.09.2010, 15:46 | 2 |
В пределах приложения можно обычным модальным окном, а в пределах системы, имхо, только по таймеру отлавливать потерю фокуса и восстанавливать его. Хотя, кажется, в NT-системах есть какая-то апишная функция, создающая подобное системное окно. Точнее не скажу, не сталкивался.
0
|
0 / 0 / 1
Регистрация: 20.04.2010
Сообщений: 32
|
|
06.09.2010, 17:49 [ТС] | 3 |
Доп. вопрос:
Как вернуть фокус? Вот то, что я пробовал - не работает: ShowWindow(Application.Handle, SW_SHOW); SetForegroundWindow(Application.Handle); Application.BringToFront;
0
|
1 / 1 / 1
Регистрация: 26.08.2010
Сообщений: 133
|
|
06.09.2010, 18:22 | 4 |
[code]
type TForm1 = class(TForm) procedure _ncActivate(var Msg:Tmessage);message wm_ncactivate; end; ......... procedure TForm1._ncActivate(var Msg: Tmessage); begin Application.NormalizeTopMosts; Application.ProcessMessages; end; [/end]
0
|
0 / 0 / 1
Регистрация: 20.04.2010
Сообщений: 32
|
|
07.09.2010, 10:49 [ТС] | 5 |
Вызов процедуры такой?
procedure TForm1.Timer1Timer(Sender: TObject); var Msg: Tmessage; begin Form1._ncActivate(Msg); end;
0
|
1 / 1 / 1
Регистрация: 26.08.2010
Сообщений: 133
|
|
07.09.2010, 11:04 | 6 |
Эта процедура - обработчик windows-сообщения wm_ncactivate, ее не надо специально вызывать, она будет вызвана автоматически при получении приложением сообщения с этим кодом.
Создай новое приложение, допиши код, что я привел и жми F9.
0
|
0 / 0 / 1
Регистрация: 20.04.2010
Сообщений: 32
|
|
07.09.2010, 13:43 [ТС] | 7 |
Сделал как ты написал.
Прикол в том, что заголовок и правда остается активным, но я легко могу перейти в другое приложение.
0
|
1 / 1 / 1
Регистрация: 26.08.2010
Сообщений: 133
|
|
07.09.2010, 18:10 | 8 |
Это был ответ на:
'Доп. вопрос: Как вернуть фокус?' Самый прикол в том, что этого (см. 'доп.вопрос') можно добиться даже так: Код
procedure TForm1._ncActivate(var Msg: Tmessage); begin // end;
0
|
0 / 0 / 1
Регистрация: 20.04.2010
Сообщений: 32
|
|
07.09.2010, 18:29 [ТС] | 9 |
А мне нужен не визуальный эффект, а реальный возврат фокуса.
Как будто щелкнули мышью по форме.
0
|
0 / 0 / 0
Регистрация: 05.04.2008
Сообщений: 73
|
|
10.09.2010, 14:18 | 10 |
SetForegroundWindow(Form1.WindowHandle);
0
|
1 / 1 / 1
Регистрация: 26.08.2010
Сообщений: 133
|
|
12.09.2010, 09:25 | 11 |
Ничего из этого у меня (W2k SP1 D6) не сработало:
SetForegroundWindow(Application.Handle); BringWindowToTop(Application.Handle); Application.NormalizeAllTopMosts; Windows.SetFocus(Application.Handle); Application.BringToFront; Application.Active:=true; SetActiveWindow(Application.Handle) SetForegroundWindow(WindowHandle)
0
|
0 / 0 / 1
Регистрация: 20.04.2010
Сообщений: 32
|
|
14.09.2010, 12:18 [ТС] | 12 |
то же самое на Win 98
0
|
3 / 3 / 3
Регистрация: 09.07.2008
Сообщений: 422
|
|
19.09.2010, 16:20 | 13 |
В пропертях формы поставь FormStyle = StayOnTop,
Период таймера сделай коротким, примерно 100 (1/10 секунды). Далее на событие таймера было нечто вроде Form1.SetFocus() или Form1.BringToFront(). К сожалению, нет Дельфей под рукой, не могу сказать точно. FormStyle кажись ввели только в 7-й Дельфи. Единственая кака этого метода в том, что окно перекроется таскбаром - его приоритет всегда выше. Выход один - лови и блокируй. Если время до завтра терпит - скину мой исходнинк...
0
|
0 / 0 / 1
Регистрация: 20.04.2010
Сообщений: 32
|
|
19.09.2010, 16:29 [ТС] | 14 |
Время терпит. Скинь по возможности плиз
0
|
0 / 0 / 0
Регистрация: 09.07.2010
Сообщений: 55
|
|
20.09.2010, 10:15 | 15 |
Вот здесь есть пример правда на VB http://procoder.ru/programming/vb_sources/063.zip может можно его перевести в Delphi.
Или если вот сделать так: Вывести окно типа заставки на весь экран и на canvas её сфотографировать рабочий стол с окнами и т.д, а также заблокировать системные клавиши чтобы нельзя было выйти или переключиться на другие программы. Кажется так работает в XP окно типа выключить компьютер – правда не уверен.
0
|
0 / 0 / 0
Регистрация: 09.07.2010
Сообщений: 55
|
|
20.09.2010, 10:15 | 16 |
Вот здесь есть пример правда на VB http://procoder.ru/programming/vb_sources/063.zip может можно его перевести в Delphi.
Или если вот сделать так: Вывести окно типа заставки на весь экран и на canvas её сфотографировать рабочий стол с окнами и т.д, а также заблокировать системные клавиши чтобы нельзя было выйти или переключиться на другие программы. Кажется так работает в XP окно типа выключить компьютер – правда не уверен.
0
|
xedin
|
|
30.09.2010, 19:18 | 17 |
Вот этот код создает новый десктоп, в котором далее нужно создать
(!в новом потоке!) форму закрытия Код
HDESK hDesktop = CreateDesktop('MyDesktop', NULL, NULL, 0, DESKTOP_CREATEWINDOW|DESKTOP_SWITCHDESKTOP, NULL); SwitchDesktop(hDesktop); Sleep(10000); CloseDesktop(hDesktop); |
0 / 0 / 0
Регистрация: 10.08.2010
Сообщений: 4
|
|
04.10.2010, 16:43 | 18 |
> FormStyle кажись ввели только в 7-й Дельфи.
Поставь на досуге Delphi 1.0 - узнаешь много нового :-)
0
|
3 / 3 / 3
Регистрация: 09.07.2008
Сообщений: 422
|
|
04.10.2010, 17:15 | 19 |
> Поставь на досуге Delphi 1.0 - узнаешь много нового :-)
Нет уж, спасибо, я уже вышел из дельфского возраста...
0
|
04.10.2010, 17:15 | |
04.10.2010, 17:15 | |
Помогаю со студенческими работами здесь
19
Модальное окно, сделать загрузку в окно по ссылке Как создать окно в окне (модальное окно)? MessageBox: Как сделать так, чтобы если окно модальное, при клике на родительское окно MessageBox мигал? Модальное окно Модальное окно Модальное окно Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |