![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кто знает как приложение сделать активным? [D6]
Zemal © (2002-09-25 17:53:00)ShowWindow(Handle, SW_HIDE);
ShowWindow(Application.Handle, SW_HIDE);
Эти две строки прячут форму и приложение из таскбара...
ShowWindow(Application.Handle, SW_SHOW);
ShowWindow(Handle, SW_SHOW);
А эти две строки востанавливают.
В общем создаю в "трее" иконку и при клике по ней форма приложения показывается... только вот показывается НЕАКТИВНЫМ и позади других окон... некрасиво :(. Может кто знает как сделать мерцание заголовка окна как во многих приложениях? или просто сделать активным?
Zemal (2002-09-26 10:27:00) [1]Наткнулся по анологии на функцию GetForegroundWindows, которая возвращает дескриптор (HWND) или "хандле" по нашенски :) гы-гы :) достаточно легко оказывается получить дескриптор активного, в данный момент, окна.
Zemal (2002-09-26 10:20:00) [2]SetForegroundWindow(hWnd);
Уря! Спасибо большое! Ряботает! Класс! Я про эту функцию только что узнал. Оказывается есть такие класные функции на свете! :) По "хандлу" окна любое окно становится активным! Рулез!!! Ещё раз спасибо тому, кому "не спится"! Но, кстати, под вин2000 не мигает окно (цитата: "SetForegroundWindow(hWnd); - мигать будет")... не мигает, но становится активным... тоже неплохо :).
Не спится... (2002-09-25 23:01:00) [3]Попробуйте что-нибудь из этого:
SetForegroundWindow(hWnd); - мигать будет
procedure ForceForeground1(hWnd: Integer);
// Win98
var
OldTimeOut: DWORD;
begin
if hWnd = GetForegroundWindow then Exit;
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @OldTimeOut, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer({1}000), 0);
SetForegroundWindow(hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(OldTimeOut), 0);
end;
procedure ForceForeground2(hWnd: THandle);
var hFgWnd: THandle;
ThID, FgThID: Integer;
begin
hFgWnd := GetForegroundWindow;
ThID := GetCurrentThreadID;
FgThID := GetWindowThreadProcessId(hFgWnd, nil);
AttachThreadInput(FgThID, ThID, True);
SetForegroundWindow(hWnd);
AttachThreadInput(FgThID, ThID, False);
end;
Song (2002-09-25 22:02:00) [4]А если не использовать Application.Restore а сразу делать ShowWindow() ?
А вообще нужно WM_NULL передавать, если компонент сам этого не делает. Сегодня ссылку кидал, где написано как сделать значок в трею самому, посмотрите, станет понятно.
Zemal (2002-09-25 19:06:00) [5]procedure TfmMain.FormCreate(Sender: TObject);
begin
Application.OnMinimize := AppMinimize;
Application.OnRestore := AppRestore;
end;
procedure TfmMain.AppMinimize(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TfmMain.AppRestore(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_SHOW);
end;
procedure TfmMain.RxTrayIcon1Click(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Application.Restore;
end;
Вот что и как у меня... незнаю уж чего и думать... должно приложение активизироваться... но... но... но... фиг знает что такое... может это... да хрен его знает почему, пошол я домой - утро вечера... :)
Zemal (2002-09-25 19:00:00) [6]Да я вообще-то TRxTrayIcon попользовался... что-то он не так как надо работает... а окно так и не становится активным. Запутался я чего-то во флагах ShowWindows(). Наверное надо вручную самому в трей иконку пихать :).
SendMessage(Application.Handle, WM_ACTIVATE, WA_CLICKACTIVE, 0);
Вот почему это не пашет? Нифига не пойму... должно пахать... :(
Song (2002-09-25 18:18:00) [7]Напишите как отлавливаете клик по значку.
Sedunov Vitaly (2002-09-25 17:58:00) [8]А можно SendMessage(Handle,WM_ACTIVATE,WA_CLICKACTIVE,0)
Sedunov Vitaly (2002-09-25 17:55:00) [9]Есть что-то типа BringToFront(Application.Handle)