Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.09.2006, 18:00
Русло Русло вне форума
Прохожий
 
Регистрация: 23.09.2006
Сообщения: 5
Репутация: 10
Вопрос Работа с формой

Подскажите пожалуйста как сделать чтобы моя форма работала как Icq, т.е отображалась по верх всех окон и при сворачивании значок появился в разделе резедентных программ?
Ответить с цитированием
  #2  
Старый 23.09.2006, 22:56
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

1) Чтобы отображалась по верх всех окон - установи стиль формы StayOnTop
2) Чтобы при сворачивании значок появился в разделе резедентных программ - можно сделать самому, используя Shell_NotifyIcon, а можно установить компонент, например CoolTray - http://decoding.narod.ru/download/co...y/cooltray.zip
Ответить с цитированием
  #3  
Старый 23.09.2006, 23:24
Аватар для Майняк
Майняк Майняк вне форума
Начинающий
 
Регистрация: 03.02.2006
Адрес: Киров
Сообщения: 198
Репутация: 50
По умолчанию

не резидентных, а фоновых уж тогда Хотя и эта формулировка не верна.
Ответить с цитированием
  #4  
Старый 30.09.2006, 23:22
Arsen Arsen вне форума
Прохожий
 
Регистрация: 30.09.2006
Сообщения: 3
Репутация: 10
По умолчанию Поверх окон

Ребят, я вроде сделал так, что у меня прога сворачивается в трей. А вот с "поверх окон" что-то никак не разберусь. В процедуре Tform3.Create пишу formstyle:=fsStayOnTop... но форма не остается поверх всех окон (может это из-за того, что эту процедуру я вызываю много раз нажатием гор. клавиши). В общем непонятно.. я порылся нарыл вот такой код:

var
wnd: HWND;
begin
wnd := GetForegroundWindow;
Show;
FormStype := fsStayOnTop;
SetForegroundWindow(wnd);
SetActiveWindow(wnd);
end;

Казалось бы все замечательно, но 1) Приходится сразу при запуске программы создавать одну форму 2) Если я вызываю создание формы гор. клавишей, то она остается поверх всех окон только до того момента, как станет активной, почле того, как оно один раз стало активной оно перестает быть "onTop" ((

Вообще моя идея (надеюсь так будет легче понять):
У меня есть прога она при запуске создает иконку в трее (это есть).. Потом с помощью гор клавиш или с помощью меню popup я вызываю метод создания новой формы (тоже есть)... Мне надо, чтобы эта форма была всегда "onTop".

С уважением Arsen. Заранее спасибо за помощь.
Ответить с цитированием
  #5  
Старый 01.10.2006, 00:59
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

В форме, которую вызываешь с помощью гор клавиш или с помощью меню popup напиши:

Цитата:

procedure TForm3.FormCreate(Sender: TObject);
begin
SetWindowPos( Handle, HWND_TOPMOST, Left, Top, Width, Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE );
end;
Ответить с цитированием
  #6  
Старый 01.10.2006, 02:27
Arsen Arsen вне форума
Прохожий
 
Регистрация: 30.09.2006
Сообщения: 3
Репутация: 10
По умолчанию

Хм.. Не помогает (( Все по-прежнему.. Если окно становится активным, то потом оно уже не поверх всех. Сейчас у меня в программе такой код.. Может что-то зависит от положения Register Hotkey? Код:
Цитата:
procedure TForm3.FormCreate(Sender: TObject);
begin
RegisterHotkey (Handle, 1, MOD_ALT or MOD_SHIFT, VK_F7);
wnd := GetForegroundWindow;
formStyle := fsNormal;
Show;
FormStyle := fsStayOnTop;
SetForegroundWindow(wnd);
SetActiveWindow(wnd);

SetWindowPos( Handle, HWND_TOPMOST, Left, Top, Width, Height,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE );

// RegisterHotkey (Handle, 1, MOD_ALT or MOD_SHIFT, VK_F7);
end;
Ответить с цитированием
  #7  
Старый 01.10.2006, 13:53
Arsen Arsen вне форума
Прохожий
 
Регистрация: 30.09.2006
Сообщения: 3
Репутация: 10
По умолчанию

Господа, спасибо, проблемма решена. Использую код:

Цитата:
procedure TForm3.FormCreate(Sender: TObject);

begin
SetWindowPos( Handle, HWND_TOPMOST, Left, Top, Width, Height,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE );
Application.NormalizeTopMosts;
RegisterHotkey (Handle, 1, MOD_ALT or MOD_SHIFT, VK_F7);
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter