Форум: "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