Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> показать форму в фоновом режиме, не переводя на нее фокус 
V
    Опции темы
gonzales
Дата 18.10.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



как это реализовать?

нужно сделать OSD (с ним проблем нет), который располагается на прозрачной форме. Но при показе фокус естественно переводится на эту форму, чего не должно происходить

 smile 

--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
SamDark
Дата 18.10.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: нет
Всего: 38



gonzales,
Насколько помню, OSD обычно делался немного не так. Вывод осуществлялся не на форму, а на экран.

Если всё-таки надо в фоне: по onShow переведи фокус на главную форму. 


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
gonzales
Дата 18.10.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



Цитата(SamDark @  18.10.2006,  11:04 Найти цитируемый пост)
Насколько помню, OSD обычно делался немного не так. Вывод осуществлялся не на форму, а на экран.


на экран пробывал, но получается тухло, когда например плеер играет на полный экран, изображение естественно сразу перерисовывается, поэтому и сделал на форме, которую вывожу поверх всего. А переводить фокус надо не на главную форму а на активное приложение (а точнее как бы с него не уводить фокусsmile
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
Elfebet
Дата 18.10.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 2
Всего: 14



по пробуй поиграться с SetActiveWindow.
вот к примеру так можно активировать предыдущее окно
Код

windowPrev:=GetNextWindow(Handle, GW_HWNDPREV);
SetActiveWindow(windowPrev);



--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
gonzales
Дата 18.10.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



Код

ShowWindow(Form2.Handle, SW_SHOWNA);


вот так работает, НО форма перестала реагировать на form2.hide  smile  smile  smile 

как ее теперь убирать то  smile 
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
Elfebet
Дата 18.10.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 2
Всего: 14



или так
Код

procedure CreateParams(var Params: TCreateParams); override;
.....
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
 with Params do begin
   ExStyle := ExStyle or WS_EX_TOPMOST;
   WndParent := GetDesktopwindow;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var CurStyle: Integer;
begin
CurStyle := GetWindowLong(Handle, GWL_EXSTYLE);
CurStyle := (CurStyle or WS_EX_TOOLWINDOW) and (not WS_EX_APPWINDOW);
SetWindowLong(Handle, GWL_EXSTYLE, CurStyle);
end;


Добавлено @ 11:48 
Цитата

вот так работает, НО форма перестала реагировать на form2.hide  

неужели так не работает?
Код

ShowWindow(Form2.Handle, SW_HIDE);


Добавлено @ 11:50 
Цитата

SW_SHOWNA

?? - это какое действие?


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
Snowy
Дата 18.10.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Запоминаешь текущее активное окно через GetForegroundWindow
Показываешь своё
Устанавливаешь текущим предыдущее окно через SetForegroundWindow
Но с формой всё равно не всё просто. Есть доля секунды, когда оно активно.
И, если юзер в это время набивает текст, то есть вероятность, что нажмёт букву во время активности твоего окна. И тогда событие клавиши придёт окну позже активации предыдущего и снова активизирует твоё.
Можно конечно ловить сообщение кнопы и по ней снова деактивировать, если нужно.
А вообще OSD на API делается.
Апишному окну можно установить ExStyle = WS_EX_NOACTIVATE or WS_EX_TOPMOST;
Пробовал установить форме - не помогает.

Добавлено @ 11:52 
Цитата(Elfebet @  18.10.2006,  11:45 Найти цитируемый пост)
SW_SHOWNA
 - это какое действие?
ShowWindowNoActivate

PM MAIL   Вверх
gonzales
Дата 18.10.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 13.3.2006

Репутация: 1
Всего: 2



блин, ну и варианты  smile  smile  smile  smile  smile  smile  smile  smile 

все очень просто оказалось, как обычно

Код

ShowWindow(Form2.Handle, SW_SHOWNA);

активируем форму не переводя на нее фокус


Код

 form2.Hide;
 form2.Repaint;


убираем и перерисовываем форму

Код

ShowWindow(Form2.Handle, SW_HIDE);


так тоже работает


Это сообщение отредактировал(а) gonzales - 18.10.2006, 11:58
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.