Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2010, 22:45   #1
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание System Tray - как показать форму поверх программы Opera

Здравствуйте!!!

С новым годом!!!

При Form1.Show, если открыто еще что-то ( например Opera ) форма показывается под оперой, как сделать чтобы она показывалась поверх нее? Толи фокус поставить на форму, или как вообще с этим бороться?
Код:
procedure TForm1.CreateNotifyIcon;
Begin
 TrayIconData.cbSize:=SizeOF(TrayIconData);
 TrayIconData.Wnd:=Handle;
 TrayIconData.uID:=0;
 TrayIconData.uFlags:= NIF_MESSAGE + NIF_ICON + NIF_TIP;
 TrayIconData.uCallbackMessage:=WM_ICONTRAY;
 TrayIconData.hIcon:=Application.Icon.Handle;
 StrPCopy(TrayIconData.szTip, Application.Title);
 Shell_NotifyIcon(NIM_ADD, @TrayIconData);
End;

Procedure TForm1.TrayMessage(var Msg: TMessage);
Begin
 Case Msg.LParam of
  WM_LBUTTONUP:
   Begin
    IF Form1.Visible Then
     Begin
      Form1.Hide;
     End
     Else
      Begin
       Form1.Show;
      End;
   End;
  WM_RBUTTONUP:
   Begin
    PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
    PostMessage(Handle, WM_NULL, 0, 0);
   End;
 End;
End;

procedure TForm1.DestroyNotifyIcon;
Begin
 Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
End;
Заранее очень благодарен!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 01.01.2010, 23:01   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

попробуйте...
Код:
...
Form1.Show;
setforegroundwindow(form1.Handle);
...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.01.2010, 23:09   #3
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Я конечно понимаю что "умничать" нехорошо, но всегда пользуюсь одной функцией (не помню где взял) под названием ForceForegroundWindow - это расширенная надстройка SetForegroundWindow которая более корректно работает.
Использование :
Код:
ForceForegroundWindow(Form1.Handle);
Сама функция в прикрепленном файле.
Вложения
Тип файла: zip ForceForegroundWindow.zip (664 байт, 12 просмотров)
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 01.01.2010, 23:15   #4
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

Простите а можно как-то без этого?
А стандартными методами!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 01.01.2010, 23:26   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...кроме setforegroundwindow() можете также - SetWindowPos().
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.01.2010, 23:26   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

А что сложного то ?
Цитата:
А стандартными методами!
А ты думаешь setforegroundwindow() - не стандартный метод ?
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 01.01.2010, 23:51   #7
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

Большое спасибо всем за то что не оставили без внимания!!!
Разобрался!!! =-)))
Код:
    Form1.Show;
    Application.BringToFront;
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 02.01.2010, 00:24   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

молодцы однако bringtofront скрывает вот что...
Код:
procedure TApplication.BringToFront;
var
  TopWindow: HWnd;
begin
  if Handle <> 0 then
  begin
    TopWindow := GetLastActivePopup(Handle);
    if (TopWindow <> 0) and (TopWindow <> Handle) and
      IsWindowVisible(TopWindow) and IsWindowEnabled(TopWindow) then
      SetForegroundWindow(TopWindow);
  end;
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.01.2010, 03:25   #9
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

Спасибо!!! =)
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
System Tray xRamzeSx Общие вопросы Delphi 9 19.09.2010 14:47
builder. Как показать вторую форму? Как подключить другой юнит? TwiX C++ Builder 2 21.12.2009 21:29
Программное добавление программы в System Tray .Phoenix Общие вопросы Delphi 5 30.09.2009 11:42
Как показать форму в Visual C++? Vitek-pm Visual C++ 2 21.02.2009 22:19
Как определить координаты иконки приложения в system tray? SkAndrew Общие вопросы Delphi 5 18.08.2008 16:52