Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кто знает как приложение сделать активным? [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)


Наверх

Титульная страница Поиск, карта сайта Написать письмо