Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как проверить что форма сейчас наверху ? 
:(
    Опции темы
Гость_zogman
Дата 25.11.2005, 13:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











как проверить что форма сейчас наверху ?
т.е. видна пользователю, а не загорожена другими формами ?
  Вверх
sexton
Дата 25.11.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


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

Репутация: 5
Всего: 9



Мммм... А событие OnActivate тебе никак не поможет?
PM MAIL WWW ICQ   Вверх
_hunter
Дата 25.11.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



GetTopWindow() и сравниваеш результат с хендлом своей формы



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_zogman
Дата 25.11.2005, 15:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











по-моему нет хотя я не очень понимаю о чем идет речь,
я хочу сделать такое - есть много форм с кнопками, которые запускают разные процессы,
а одна общая форма куда все процессы будут делать оутпут,
- поэтому хотелось бы когда этот оутпут делается - то чтобы пользователь это видел,

один вариант сделать так:

Код

void tout(AnsiString s)
{
TextOutputForm->Visible=true;
TextOutputForm->FormStyle=fsStayOnTop;
TextOutputForm->FormStyle=fsNormal;
TextOutputForm->RichEdit1->Lines->Add(s);
Application->ProcessMessages();
}


но при тогда при каждом выводе происходит какое-то типа мигание - что не эстетично.

  Вверх
Гость_zogman
Дата 25.11.2005, 15:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











_hunter спасибо, сейчас попрубую !
(предыдущий мой мессадж был - sextonу)
  Вверх
Гость_zogman
Дата 25.11.2005, 15:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











_hunter проблем:

а как мне поставить форму on Top ?
я делаю так:

Код

TextOutputForm->FormStyle=fsStayOnTop;
TextOutputForm->FormStyle=fsNormal;



но после этого условие
GetTopWindow(NULL)==TextOutputForm->Handle

Не выполнено smilesmilesmile

  Вверх
_hunter
Дата 25.11.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



тогда проще сделать форму fsStayOnTop


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_zogman
Дата 25.11.2005, 15:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну тогда это будет мешать пользователю работать с другими прогоми
- у меня вывод происходит не так часто а прога считает долго, пока она считает и молчит нечего ей делать онТопе
  Вверх
Vyacheslav
Дата 25.11.2005, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



А почему просто не сделать
Код

TextOutputForm->Show();



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Cheremnov
Дата 28.11.2005, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В такой ситуации завожу пользовательское сообщение,
ставлю на нее ловушку, в которой делается вызов:

TextOutputForm->BringToFront();
TextOutputForm->WindowState:=wsNormal;
PM MAIL   Вверх
Гость_zogman
Дата 28.11.2005, 15:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











команды
TextOutputForm->BringToFront(); и TextOutputForm->Show();
делают форму видимой и самой верхней, среди всех форм данного приложения,
то есть если мое приложение загорожено чем-то еще, то это не помогает smile

А есть ли средство показать форму даже если она загорожена другими прогами ?

Cheremnov не понял что есть "пользовательское сообщение,
ставлю на нее ловушку" ?
  Вверх
sexton
Дата 28.11.2005, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


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

Репутация: 5
Всего: 9



что-то я все меньше понимаю чего хочет человек smile
PM MAIL WWW ICQ   Вверх
zogma
Дата 28.11.2005, 16:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











sexton ???
  Вверх
Гость_zogman
Дата 4.12.2005, 10:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Мне тут объяснили как поднять свою форму наверх
(http://forum.sources.ru/index.php?showtopic=123916)
приведу ето здесь может будет кому еще полезно

evGenius:
Как утверждает документация, SetForegroundWindow работает как нам нужно, только если вызывающий её процесс является активным. А активен тот процесс, чей поток обрабатывает пользовательский ввод. Оказывается, наш процесс может "прикинуться" активным, подключив свой поток к обработке пользовательского ввода. Это осуществляется при помощи функции AttachThreadInput. После вызова SetForegroundWindow можно будет отключиться от чужого потока, используя ту же функцию (но передавая в качестве третьего параметра FALSE, а не TRUE).

Реализация этой идеи выглядит так.

HWND hCurrWnd;
int iMyTID;
int iCurrTID;

hCurrWnd = ::GetForegroundWindow();
iMyTID = GetCurrentThreadId();
iCurrTID = GetWindowThreadProcessId(hCurrWnd,0);

AttachThreadInput(iMyTID, iCurrTID, TRUE);

// hWnd - дескриптор окна.
SetForegroundWindow(hWnd);

AttachThreadInput(iMyTID, iCurrTID, FALSE);


Моя практика показывает, что описанный метод успешно работает как под Windows 98/Me, так и под Windows 2000.

--------------------------------------------------------------
Цитата (Сергей К. @ 1.12.05, 09:06)
SetWindowPos однозначно должна работать -- для того и сделана

evGenius:
Нет, такая возможность для неактивных процессов заблокирована в новых версиях Windows. На замену пришло мигание в таскбаре.

  Вверх
Gala
Дата 5.12.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если находишся в программе форму которой ты проверяещь тогда так
if (Application->Form1->Active)
{
...
}
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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