Как держать Form всегда на переднем плане?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как держать Form всегда на переднем плане?

Сообщение McLion » 15.05.2015 14:34:57

Всем привет,

как держать Form всегда на переднем плане (Win, Linux, Mac)? Сейчас я делаю это так. Но как то это не совсем элегантно, всплывающие окна все равно видать на пару миллисекунд.

Код: Выделить всё
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
  Application.Restore;
  Application.BringToFront;
  MainForm.BringToFront;
end;


Пасиб!
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: Как держать Form всегда на переднем плане?

Сообщение Sharfik » 15.05.2015 14:56:55

А чем опция в свойствах с значением StayOnTop плоха? Или она только в Windows работает?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Как держать Form всегда на переднем плане?

Сообщение McLion » 15.05.2015 15:01:05

Sharfik писал(а):А чем опция в свойствах с значением StayOnTop плоха? Или она только в Windows работает?


Первый раз о ней слышу. И она делает то, что я хочу?
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: Как держать Form всегда на переднем плане?

Сообщение pupsik » 15.05.2015 15:26:25

В лине - зависит от ДЕ. Уже схожий вопрос был на форуме.
Да и в винде, кажись, не сильно работает. То работает, то нет.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Как держать Form всегда на переднем плане?

Сообщение McLion » 15.05.2015 16:27:44

pupsik писал(а):В лине - зависит от ДЕ. Уже схожий вопрос был на форуме.
Да и в винде, кажись, не сильно работает. То работает, то нет.


Что такое "лине" и "ДЕ"?

Добавлено спустя 27 минут 21 секунду:
Sharfik писал(а):А чем опция в свойствах с значением StayOnTop плоха? Или она только в Windows работает?


Работает не совсем надежно, панель задач появляется если например вложить диск с автозапуском.
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: Как держать Form всегда на переднем плане?

Сообщение pupsik » 15.05.2015 17:50:10

гном, кеды ... и т.д.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Как держать Form всегда на переднем плане?

Сообщение rtn » 16.05.2015 12:20:03

FormStyle:=fsSystemStayOnTop не помогает?
rtn
новенький
 
Сообщения: 15
Зарегистрирован: 09.01.2015 13:59:38
Откуда: Архангельск

Re: Как держать Form всегда на переднем плане?

Сообщение resident » 16.05.2015 13:35:50

pupsik писал(а):Да и в винде, кажись, не сильно работает. То работает, то нет.

Стопудового способа для винды не нашел, в итоге плюнул и оставил такой вариант (уж и не помню подробностей :mrgreen: ):
Код: Выделить всё
    { вытащить окно на передний план на рабочем столе, порядок важен!!! }
    ShowWindow(fMain.Handle, SW_SHOWNORMAL);
    SetForeGroundWindow(fMain.Handle);
    fMain.BringToFront;
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Как держать Form всегда на переднем плане?

Сообщение McLion » 16.05.2015 18:45:53

resident писал(а):
pupsik писал(а):Да и в винде, кажись, не сильно работает. То работает, то нет.

Стопудового способа для винды не нашел, в итоге плюнул и оставил такой вариант (уж и не помню подробностей :mrgreen: ):
Код: Выделить всё
    { вытащить окно на передний план на рабочем столе, порядок важен!!! }
    ShowWindow(fMain.Handle, SW_SHOWNORMAL);
    SetForeGroundWindow(fMain.Handle);
    fMain.BringToFront;


В какое событие это ставить?
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: Как держать Form всегда на переднем плане?

Сообщение resident » 17.05.2015 16:09:41

McLion писал(а):В какое событие это ставить?

На таймер.

Если вероятность показа 50% - или показывается или нет, то добавив еще один таймер (в другим периодом времени), вероятность показа увеличивается до 100%. :mrgreen:
И для разнообразия сделал обработчики разными. Сейчас играюсь, ну никак не могу заслонить окно другими. Два таймера похоже рулят.

Код: Выделить всё
procedure TfMain.Timer1Timer(Sender: TObject);
  begin
    // 10 ms Interval
    if GetForegroundWindow <> fMain.Handle then SetForeGroundWindow(fMain.Handle);
  end;

procedure TfMain.Timer2Timer(Sender: TObject);
  begin
   // 100 ms Interval
   ShowWindow(fMain.Handle, SW_SHOWNORMAL);
   BringWindowToTop(fMain.Handle);
   fMain.BringToFront;
  end;


з.ы. Если таймер один, то Файрфокс у меня может заслонить окно.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Как держать Form всегда на переднем плане?

Сообщение McLion » 18.05.2015 13:35:45

У меня что то не работает как надо, у меня окно на весь экран, с твоими таймерами оно не максимальное... ну ладно. Я так вроде нашел решение, только виндовская панель управления еще выскакивает когда диск например вложишь.
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 223

Рейтинг@Mail.ru