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

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

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

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

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

Сообщение McLion »

Всем привет,

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

Код: Выделить всё

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
  Application.Restore;
  Application.BringToFront;
  MainForm.BringToFront;
end;


Пасиб!
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

А чем опция в свойствах с значением StayOnTop плоха? Или она только в Windows работает?
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

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


Первый раз о ней слышу. И она делает то, что я хочу?
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

В лине - зависит от ДЕ. Уже схожий вопрос был на форуме.
Да и в винде, кажись, не сильно работает. То работает, то нет.
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

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


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

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


Работает не совсем надежно, панель задач появляется если например вложить диск с автозапуском.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

гном, кеды ... и т.д.
rtn
новенький
Сообщения: 15
Зарегистрирован: 09.01.2015 12:59:38
Откуда: Архангельск

Сообщение rtn »

FormStyle:=fsSystemStayOnTop не помогает?
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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

Стопудового способа для винды не нашел, в итоге плюнул и оставил такой вариант (уж и не помню подробностей :mrgreen: ):

Код: Выделить всё

    { вытащить окно на передний план на рабочем столе, порядок важен!!! }
    ShowWindow(fMain.Handle, SW_SHOWNORMAL);
    SetForeGroundWindow(fMain.Handle);
    fMain.BringToFront;
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

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

Стопудового способа для винды не нашел, в итоге плюнул и оставил такой вариант (уж и не помню подробностей :mrgreen: ):

Код: Выделить всё

    { вытащить окно на передний план на рабочем столе, порядок важен!!! }
    ShowWindow(fMain.Handle, SW_SHOWNORMAL);
    SetForeGroundWindow(fMain.Handle);
    fMain.BringToFront;


В какое событие это ставить?
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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;


з.ы. Если таймер один, то Файрфокс у меня может заслонить окно.
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

У меня что то не работает как надо, у меня окно на весь экран, с твоими таймерами оно не максимальное... ну ладно. Я так вроде нашел решение, только виндовская панель управления еще выскакивает когда диск например вложишь.
Ответить