Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
Керик   (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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.006 c
14-60820
sad
2002-07-23 08:15
2002.08.19
Запятая вместо точки в Win2K


1-60728
MikeFW
2002-08-06 11:11
2002.08.19
Как организовать сортировку в TreeView?


3-60489
BAY
2002-07-27 23:00
2002.08.19
Сигнал при добавлении


1-60595
Explorer
2002-08-08 09:51
2002.08.19
Цвет выделения в DBGrid


1-60658
Вечно молодой
2002-08-08 21:13
2002.08.19
TListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский