![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как показать форму не отбирая фокуса [WinXP]
LuceferAB © (2007-04-04 00:09:00)Пишу утилитку, которая должна в определенный период времени показать некое окошко с текстом (на верху всех окон, стиль WS_EX_PALETTEWINDOW), не хочу что-бы оно воровало фокус.
Как этого добиться?
Пытался сделать так:
fmRemMsg :=TfmRemMsg.Create(Application);
fmRemMsg.Visible:=false;
ShowWindow(fmRemMsg.Handle, SW_SHOWNA);
---
Не получилось. Окно показывается, (фокус не воруется) но на нем (в окне) ничего не отображается (панель, кнопки, эдит) - отображается чистый прямоугольник :(
s_ (2007-04-06 09:31:00) [1]Удалено модератором
LuceferAB (2007-04-04 19:33:00) [2]
> Ну тут автор сам уже ерунду городит - то ему, вишь ли, текст
> подавай, а то ему теперь и контролы для ввода понадобились
>
> Картина маслом: юзер сидит-пыхтит, текст в вордовине верстает,
> вдруг выскакивает окно, без фокуса, но с кучей контролов,
> подразумевающих
> приглашение к вводу, особливо кнопки)
>
> Дурь да и только, что еще сказать ?)
>
----
Я бы сказал, что вы мало с компьютером работали. И не такое бывает в датском королевстве, что и не снилось нашим мудрецам.
Все именно так. Вот я сижу, пишу на форуме, мыслю мысль шедевральную. И если какое-то окно у меня эту мысль перебьет, мысля может уйти в песок. Вспоминай потом чего хотеть сказал :-) а если ещё ты, за секунду до появившегося окна, энтер нажал, то вообще тушите свет. Не было с вами такого? Значит вам повезло.
А теперь конкретный пример. Ты работаешь - тире пишешь текст, а следовательно нажимаешь энтер, вдруг твой антивирус/брандмауэр что-то обнаруживает, и предлагает сделать тебе выбор, ну например разрешить или блокировать. Вот тебе простой пример, когда кроме информации от пользователя требуется в вод информации. И таких примеров туева хуча.
И еще:
1. "балон" не подходит ещё по той простой причине что он видим только определенный промежуток времени.
2. Создать форму а потом её показывать/прятать не получается, потому что этих форм может быть несколько, чье кол-во нельзя посчитать за ранее.
Ну и на последок - тот пример (см. выше) с двухкратным Visible работает, что и требовалось.
Сергей М. (2007-04-04 14:54:00) [3]
> homm © (04.04.07 14:43) [16]
Можно, но не нужно)
Балоны для информированиясуществуют, а не для интерактивного ввода)
homm (2007-04-04 14:43:00) [4]Дядь сережа, ну скажи, не томи душу, можно ль контроллы в балонтип сувать? :)
Сергей М. (2007-04-04 14:41:00) [5]Вот пока Автор не определится (то ли только текст ему подавай, то ли интерактив), разговор дальше не пойдет)
homm (2007-04-04 14:32:00) [6]> Дык я и сказал - см. Baloon Window.
А на мой вопрос из [8] не ответили.
Сергей М. (2007-04-04 14:30:00) [7]Дык я и сказал - см. Baloon Window.
Чем не "без фокуса" ?)
homm (2007-04-04 14:04:00) [8]> Дурь да и только, что еще сказать ?)
«Штирлиц, что Вы только не придумаете, лишь бы на картошку не ездить» :)
Лучше бы сказали как окно без фокуса создать.
Сергей М. (2007-04-04 14:00:00) [9]
> homm © (04.04.07 13:42) [10]
>
> (панель, кнопки, эдит)
Ну тут автор сам уже ерунду городит - то ему, вишь ли, текст подавай, а то ему теперь и контролы для ввода понадобились
Картина маслом: юзер сидит-пыхтит, текст в вордовине верстает, вдруг выскакивает окно, без фокуса, но с кучей контролов, подразумевающих
приглашение к вводу, особливо кнопки)
Дурь да и только, что еще сказать ?)
homm (2007-04-04 13:42:00) [10]> Где "там" ?
> В окне балона что ли ?
Да. О нем же разговор то.
> Автору, кстати, судя по вопросу, и нужно как раз именно
> текст показать юзеру - аль не заметил ?)
Не заметил. :
> Окно показывается, (фокус не воруется) но на нем (в окне)
> ничего не отображается (панель, кнопки, эдит) - отображается
> чистый прямоугольник :(
Сергей М. (2007-04-04 13:35:00) [11]
> Разве там можео что-то кроме текстового сообщения отобразить?
Где "там" ?
В окне балона что ли ?
Автору, кстати, судя по вопросу, и нужно как раз именно текст показать юзеру - аль не заметил ?)
homm (2007-04-04 13:30:00) [12]> И почему текст при его визуализации в окне не есть "картинка" ?
Вот этого не понял. Разве там можео что-то кроме текстового сообщения отобразить? Или речь о псевдографике? :)
Сергей М. (2007-04-04 13:25:00) [13]
> текста со стандартной картинкой
Почему обязательно "стандартной" ?
И почему текст при его визуализации в окне не есть "картинка" ?
homm (2007-04-04 13:22:00) [14]> Для иконок, "запуздыренных в трей", есть замечательный механизм
> Baloon Tip
Ну не всегда задача сводится к отображению текста со стандартной картинкой, я думаю.
Сергей М. (2007-04-04 13:20:00) [15]
> при этом пользователь не должен почувствовать неудобство,
> что его работу прерывают
И для этого нужно обязательно городить огород с формой ?
Для иконок, "запуздыренных в трей", есть замечательный механизм Baloon Tip
homm (2007-04-04 13:19:00) [16]Идея не создавать окно каждый раз, а показывать, когда нужно, и прятать когда не нужно.
LuceferAB (2007-04-04 13:09:00) [17]У меня нет основной формы как таковой. Есть оконная процедура, иконка в трэе, несколько потоков... собственно все. Да и фокус я не могу знать у кого вообще. Задумка такая - пользователь например работает в ворде, и вдруг выскакивает окошко с собщением - при этом пользователь не должен почувствовать неудобство, что его работу прерывают. Или напрмер у него открыто меню пуск, если форма переставит фокус - меню схлопнется. Мне этого не надо.
Методом проб и ошибок, получилось этого добиться вот так:
fmRemMsg :=TfmRemMsg.Create(Application);
fmRemMsg.Visible:=false;
ShowWindow(fmRemMsg.Handle, SW_SHOWNA);
fmRemMsg.Visible:=true;
SergGG (2007-04-04 09:50:00) [18]
procedure TForm1.Button1Click(Sender: TObject);
begin
fmRemMsg :=TForm.Create(Application);
with fmRemMsg do
begin
FormStyle:=fsStayOnTop;
Visible:=True;
end;
SetFocus;
end;
serggg (2007-04-04 09:21:00) [19]При создании fmRemMsg сделай SetFocus на основную форму
>
fmRemMsg.Visible:=false;
ShowWindow(fmRemMsg.Handle, SW_SHOWNA);
-Это не нужно