tsl |
Отправлено: 15.02.2004, 17:57 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 65
|
Понимаю, что простой вопрос, но не могу победить. Чего-то не знаю.
Пробовал в форме вызывать this->Activate(); this->SetFocus(); Форма не выходит на поверхность.
Как форму перенести на верх, чтобы она стала верхней и активной.
Сделать это надо по таймеру из самой формы. |
|
Asher |
Отправлено: 16.02.2004, 10:57 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
->BringToFront();
|
|
trigger |
Отправлено: 16.02.2004, 11:28 |
|
Не зарегистрирован
|
а
Form->Show()
или
Form->ShowModal()
это не то?
|
|
tsl |
Отправлено: 16.02.2004, 22:19 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 65
|
Все это работает внутри одного приложения. Если в рамках одного приложения открыто много окон, то в рамках этой группы все работает. Мне же нужно, чтобы окно вышло на абсолютную поверхность. Т.е. стало поверх окон стороних приложений. |
|
Pirs |
Отправлено: 16.02.2004, 22:52 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 39
|
FormStyle=fsStayOnTop
Active -это свойство только для чтения
А вообще посмотри есть ли на формах которые теряют и получают фокус, компоненты с фокусом ввода напр. TEdit. Тогда надо сначала его деактивировать. |
|
tsl |
Отправлено: 17.02.2004, 07:49 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 65
|
Сделал тестовую программу. Шаблон FormStyle=fsStayOnTop работает. Интересно, что я его тоже пробовал, но поместил в обработчик OnActivate. Там это присвоение вызывает ошибку (запрещенная операция). Это ввело меня в заблуждение. Я решил, что после активации формы такое присвоение невозможно. На самом деле, обработчик OnActivate — это единственное мной обнаруженое на данный момент место, где возникает данная ошибка.
Зависимость от присутствия и активности компонента TEdit не наблюдал.
Есть еще особенности. Конструкция FormStyle = fsStayOnTop срабатывает только при первом присвоении этого значения. Для того что бы повторное присвоение выводило форму на верх, я предварительно выполнял FormStyle = fsNormal. Это работает даже если поверх окна находится другое окно в стиле "оставаться на верху". |
|
Pirs |
Отправлено: 17.02.2004, 23:26 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 39
|
Active , OnActivate() и подобные им работают только с формами MDI.
Посмотри Help там все есть. (правда на English, может с этим проблема?) |
|
tsl |
Отправлено: 18.02.2004, 12:28 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 65
|
Проблем нет, но каюсь, не посмотрел. Еще проблема. На вскидку никто не может сказать, как передать фокус окну, зная его handle?
Отредактировано tsl — 18/02/2004, 14:05 |
|
Gedeon |
Отправлено: 18.02.2004, 13:18 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
MSDN писал(а)
QUOTE |
The SetFocus function sets the keyboard focus to the specified window. The window must be attached to the calling thread's message queue.
|
CODE |
HWND SetFocus(HWND hWnd);
|
|
|
tsl |
Отправлено: 18.02.2004, 13:57 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 65
|
Я это видел и пробовал, но почему-то неполучается.
void __fastcall TForm1::OnMessage(...)
{
::SetFocus(this);
}
То, что выполняется видел по точке останова. Но фокус не передается.
В чем может быть дело? |
|
Gedeon |
Отправлено: 18.02.2004, 14:44 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
[QUOTE]
SetFocus(this)
[QUOTE]
this — это неявный указатель на форму, попробуй
CODE |
SetFocus(this->Handle);
|
|
|