Конференция "WinAPI" » Окно поверх всех окон [D5, WinXP]
 
  • DJ Kondakov (22.04.08 14:57) [0]
  • DVM © (22.04.08 14:58) [1]
    никак
  • DJ Kondakov (22.04.08 15:00) [2]
    А Винамп же как-то это делает?!
  • DVM © (22.04.08 15:01) [3]

    > А Винамп же как-то это делает?!

    из двух винампов один все же ниже другого
  • DJ Kondakov (22.04.08 15:02) [4]
    Не понял...
  • DVM © (22.04.08 15:03) [5]

    > Не понял...

    окно не может быть всегда выше всех других окон ибо всегда найдется другое такое окно кторое тоже хочет быть выше
  • DVM © (22.04.08 15:07) [6]
    Попытаться удержаться наверху как можно дольше можно используя SetWindowPos(...., HWND_TOPMOST) + обработку сообщения WM_WINDOWPOSCHANGING
  • Anatoly Podgoretsky © (22.04.08 15:40) [7]
    > DVM  (22.04.2008 15:07:06)  [6]

    Да ладно не мучайся, просто запусти два экземпляра и попробуй осуществить свою мечту.
  • DVM © (22.04.08 15:44) [8]

    > Anatoly Podgoretsky ©   (22.04.08 15:40) [7]


    > попробуй осуществить свою мечту.

    Мою мечту???
  • Алексей К. (24.04.08 09:47) [9]
    используй таймер.
    т.е. при каждом срабатывании таймера (например, с интервалом в 1 сек или меньше) просто вызывай SetWindowPos(..., HWND_TOPMOST...)

    как-то я писал прогу типа локера, так вот этой штукой и спасалсо.
    ЗЫ
    такое окно и диспетчер задач будет загораживать собой ;)
  • {RASkov} © (24.04.08 11:16) [10]
    > [9] Алексей К.   (24.04.08 09:47)
    > такое окно и диспетчер задач будет загораживать собой ;)

    Ну а из двух таких окон - кто царь горы? :)
  • {RASkov} © (24.04.08 11:19) [11]
    ....т.е. даже не обязательно это будут приложения одного автора, а разных... двух разных и больных авторов :)

    Это "хорошо" еще секунда или более, не так эфектно, а если меньше интервал.... во борьба начнется :)
  • Дмитрий С (24.04.08 17:34) [12]

    > DVM ©

    + вычисление конкурентов и TerminateProcess :)
  • Dmitry S © (24.04.08 23:48) [13]
    Устраиваем турнир!
    Желающие, пишите программу для удержания окна выше остальных. Победит та программа, чье окно окажеться выше всех.
    Порядок запуска процессов выбирается случайно.

    Окно должно быть любого цвета с различимой надписью: имя участника.

    Условие: Касперский запущенный на всю катушку не должен паниковать по поводу методов удержания окна.

    Заодно и выясним=)
  • DVM © (25.04.08 10:39) [14]

    > Dmitry S ©   (24.04.08 23:48) [13]

    В конкурсе участвуют окна, распечатанные на принтере?
  • {RASkov} © (25.04.08 12:45) [15]
    > [14] DVM ©   (25.04.08 10:39)
    > В конкурсе участвуют окна, распечатанные на принтере?

    Могут, только участовавать будут в своей весовой категории...
    Кто первый прелипил, тот и проиграл...
    :о)
  • DVM © (25.04.08 13:03) [16]

    > {RASkov} ©   (25.04.08 12:45) [15]

    Тогда я предлагаю проецировать изображение окна с помощью проектора на поверхность экрана монитора. И пусть кто-нибудь попробует его перекрыть.
  • Поп Гапон (06.05.08 18:50) [17]
    SetWindowPos(Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE OR SWP_NOSIZE OR SWP_SHOWWINDOW);
  • Ins © (06.05.08 19:17) [18]

    > Насколько я знаю, FormStyle := fsStayOnTop делает окно поверх
    > только остальных окон приложения.

    Полагаю, ваша StayOnTop-форма утопает при переключении на другое приложение? Тогда смею предположить, что это неглавная форма, так как с главными такого эффекта не наблюдается. VCL очень хитро обращается с StayOnTop, в частности, этот флажок сбрасывается для всех форм кроме главной при деактивации приложения. Подавить такое поведение можно несколькими способами, я предпочитаю такой. Для формы, которая должна быть StayOnTop перекрываем CreateParams таким образом:

    TForm2 = class(TForm)
    protected
     procedure CreateParams(var Params: TCreateParams); override;
    end;
    ...

    procedure TForm2.CreateParams(var Params: TCreateParams);
    begin
     inherited;
     Params.WndParent:=0; // "Отвязываем" форму от Application.Handle
     Params.ExStyle:=Params.ExStyle or WS_EX_TOPMOST;
    end;

  • DJ Kondakov (05.07.08 09:48) [19]
    Хы-хы... Оказывается, в Delphi 10 Lite fsStayOnTop делает форму поверх всех окон в системе... А я мозги компостировал...
 
Конференция "WinAPI" » Окно поверх всех окон [D5, WinXP]
Есть новые Нет новых   [134434   +28][b:0][p:0.001]