Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 20.04.2010
Сообщений: 32
1

Модальное окно по типу "Закрытия Windows"?

06.09.2010, 13:14. Показов 2840. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Можно ли сделать Форму из которой фокус не будет уходить, пока в ней не сделать какие-то действия?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2010, 13:14
Ответы с готовыми решениями:

Свое модальное окно на события закрытия вкладки
Всем доброго ) У меня вот такой вопрос. Есть скрипт реагирующий на события закрытия, обновления...

Нужно закрыть модальное окно и сделать активным вызвавшее его окно
Мне нада средствами Win API закрыть модальное окно и сделать активным вызвавшее его окно. Кто знает...

Окно с тремя метками и модальное окно для изменения их текста
Главное окно (фиксированного размера) содержит три метки. При щелчке на одной из меток появляется...

Создать модальное окно (дочернее окно) как в одноклассниках
Здраствуйте всем, Нужна помощь. Я хочу создать модальное окно (дочерное окно) в ASP.NET на примере...

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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2010, 17:15
Помогаю со студенческими работами здесь

Модальное окно, сделать загрузку в окно по ссылке
Привет всем нашел в интернете скрипт модального окна. Очень он мне подходит но есть одно но я хочу...

Как создать окно в окне (модальное окно)?
Подскажите новичку, как создать на сайте в родительском окне небольшое окошко поверх него для ввода...

MessageBox: Как сделать так, чтобы если окно модальное, при клике на родительское окно MessageBox мигал?
Здравия всем! Никак не найду нужный MB_*, как можно сделать так, чтобы если сделать MessageBox...

Модальное окно
Здравствуйте. Мне нужно чтоб при нажатии на кнопку "+" открывалось модальное окно, а у меня...

Модальное окно
Здравствуйте,мне необходимо чтобы при нажатии на кнопку открывалось описание товара ('more'),сейчас...

Модальное окно
Ребята, помогите с кодом. Учусь делать модалку. Вроде сделала и всё вроде правильно было...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru