Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.19;
Скачать: CL | DM;

Вниз

Как сделать окно активным   Найти похожие ветки 

 
Керик   (2002-06-09 05:36) [0]

Помогите, плиз! Моя прога запускается вместе с Windows. Главное окно её при этом не показывается. Для этого я использую Application.ShowMainForm. Когда юзер щёлкает крысой на значок в трее моей проги, то окно появляется на экране, но за всеми другими окнами и неактивным. Я использовал: BringWindowToTop, SetWindowPos, Self.Activate, но ничего не работает! ХЭЛП!


 
SPeller   (2002-06-09 06:14) [1]

SetWindowPos как использовал?


 
Song   (2002-06-09 10:15) [2]

А Вы все эти окна открывали перед тем как засунуть приложение в трей ?

И покажите процедуру обработки сообщения от значка.


 
easy   (2002-06-10 16:17) [3]

попробуй

SetForegroundWindow(form1.Handle);


 
Керик   (2002-06-11 06:13) [4]

Song! Я не открывал эти окна перед тем, как засунуть его в трей. Использую Application.ShowMainForm := False ещё до создания окна!
Вот процедура обработки клика по значку в трее:
procedure TLogForm.TrayIconClick(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
LogForm.Show;
TrayIcon.Active := False;
AnimateTray := False;
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, swp_nosize+swp_nomove);
SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, swp_nosize+swp_nomove);
Activate;
end;


easy! SetForegroundWindow(...); - к сожалению не активизирует окно моей проги!


 
SPeller   (2002-06-11 11:43) [5]

swp_nosize+swp_nomove

Это что-то новое... :) swp_nosize or swp_nomove


 
Song   (2002-06-11 14:27) [6]

2SPeller © (11.06.02 11:43)
Идентично. Битовую арифметику давно не изучали ? :-))


 
SPeller   (2002-06-11 14:39) [7]

Давно. Я просто знаю и везде где не смотрел везде было логическое "или". Простое сложение первый раз вижу в таком случае.


 
короед   (2002-06-11 15:26) [8]

2Керик

А зачем второй
SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, swp_nosize+swp_nomove); ?

и еще

SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0{а разве это не Width окна???}, 0{а это не Height???}, swp_nosize+swp_nomove);


 
Керик   (2002-06-12 06:27) [9]

2Song © (11.06.02 14:27)
Верно!:-) Это одно и тоже в этом случае!

короед © (11.06.02 15:26)
А второй для того, чтобы окно не постоянно оставалось поверх всех. Только появилось сверху на экране и всё! А BringWindowToTop и SetForegroundWindow не работают :-(

Насчёт SetWindowPos: ты прав, это Width и Height окна, но ты забыл посмотреть на флаги: swp_nosize{не менять размеры} и swp_nomove {не перемещать}.

Только ответ на свой вопрос, изложенный вначале, я так и не получил :-( Может быть кто-то знает?


 
Tkach_   (2002-06-12 12:50) [10]

достаточно задать стиль этой формы StayOnTop. А если необходимо, чтобы форма была поверх всех окон системы, даже если она теряет фокус необходимо описать обработчик Application.OnDeactivate.
ИМХО лучше в таких случаях работать именно с объектом Application а не бороться со свойствами самой формы.


interface

TStartForm = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure SetOnTop(Sender: TObject);
end;

implementation

procedure TStartForm.SetOnTop(Sender: TObject);
begin
Application.BringToFront;
end;

procedure TStartForm.FormCreate(Sender: TObject);
begin
FormStyle:=StayOnTop;
Application.OnDeactivate:=setontop;
end;




 
Diamond Cat   (2002-06-13 01:32) [11]

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


 
Керик   (2002-06-14 05:19) [12]

Tkach, мне не надо чтобы окно было всегда на верху, а только чтобы оно при появлении установилось поверх всех, а потом уже если юзер захочет сделать его не на самом верху, то окно должно послушно выполнить перемещение окна из верха в зад. Кстати, а что такое ИМХО?

Diamond Cat ©.
В принцине это работает, выводит окно на верх, но не активизирует его!


 
Cobalt   (2002-06-14 06:23) [13]

Попробуй сначала Form.Show, Application.ProcessMessages а затем SetForegroundWindow.



Страницы: 1 вся ветка

Текущий архив: 2002.08.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
3-60545
Alinka
2002-07-30 16:52
2002.08.19
Помогите, Мастера. Срочно!


1-60652
Андрусь
2002-08-05 20:46
2002.08.19
Помогите разобраться


3-60517
bobr12
2002-07-30 12:06
2002.08.19
Создание триггера в InterBase=проблема


8-60759
vetall
2002-04-04 10:44
2002.08.19
jpg


1-60743
billybons
2002-08-07 14:29
2002.08.19
как программно назначить/освободить процедуру обработки event-a