Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Окно top most [D6, WinXP]


Игорь М. ©   (2006-01-24 13:09:00) 

Подскажите как всё-таки форму сделать поверх всех окон других приложений?
Типа showModal только что бы не ждало modalResult.

Нашёл пример который по описанию должен это сделать но он не работает:

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


Игорь М.   (2006-01-24 16:22:00) [1]

Спасибо большое!!!, буду должен:)


Игорь Шевченко   (2006-01-24 16:12:00) [2]


> Можно ли как-то удалить его оттуда?


Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW


Игорь М.   (2006-01-24 16:03:00) [3]

Ну 10 не 10, а тормознул точно:)
Да, спасибо, работет.
Только в оличии от твоего случая не желательно показывать моё окно на таскбаре.
Можно ли как-то удалить его оттуда?


Eraser   (2006-01-24 15:05:00) [4]


> Игорь М.   (24.01.06 15:02) [4]

procedure TVideoF.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do  Style := (Style OR WS_POPUP) AND NOT WS_DLGFRAME AND (NOT WS_CHILD);
VideoF.ParentWindow := 0;
end;


и

procedure TfPopup.CreateParams (var Params : TCreateParams);
begin
inherited;
if AlwaysOnTopCheckBox.Checked then
  with Params do begin
    Style := (Style OR WS_POPUP) AND (NOT WS_CHILD);
    WndParent := HWND_DESKTOP;
  end;
end;

найди 10 отличий? )

А вот если окно не устанавливать HWND_TOPMOST, то строка
WndParent := HWND_DESKTOP;
приведёт к такому нехорошему эффекту
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1138016742&n=0


Игорь М.   (2006-01-24 15:02:00) [5]

Идея понятна, но нихрена почему-то под XP не работает:

procedure TVideoF.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 with Params do  Style := (Style OR WS_POPUP) AND NOT WS_DLGFRAME AND (NOT WS_CHILD);
 VideoF.ParentWindow := 0;
end;

WndParent - это чьё свойство?

В принципе переделать видеоокно под главное не проблема.
Всё - таки интересно, как побороть:)


Игорь Шевченко   (2006-01-24 14:18:00) [6]


> Да в том то и дело что мне нужно не для главной формы.


{
 Модуль: PopupForm

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

 Автор: Игорь Шевченко

 Дата создания: 13.06.2002

 История изменений:
}
unit PopupForm;

interface

uses
 Windows, Messages, SysUtils,
{$IFDEF VER140}
 Variants,
{$ENDIF}
 Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TfPopup = class(TForm)
   AlwaysOnTopCheckBox: TCheckBox;
   Edit1: TEdit;
   procedure FormDestroy(Sender: TObject);
   procedure FormActivate(Sender: TObject);
   procedure AlwaysOnTopCheckBoxClick(Sender: TObject);
 protected
   procedure CreateParams (var Params : TCreateParams); override;
 end;

var
 fPopup: TfPopup;

implementation

{$R *.dfm}

procedure TfPopup.CreateParams (var Params : TCreateParams);
begin
 inherited;
 if AlwaysOnTopCheckBox.Checked then
   with Params do begin
     Style := (Style OR WS_POPUP) AND (NOT WS_CHILD);
     WndParent := HWND_DESKTOP;
   end;
end;

procedure TfPopup.FormDestroy(Sender: TObject);
begin
 fPopup := nil;
end;

procedure TfPopup.FormActivate(Sender: TObject);
begin
 if AlwaysOnTopCheckBox.Checked then
   SetWindowPos (Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE OR SWP_NOSIZE);
end;

procedure TfPopup.AlwaysOnTopCheckBoxClick(Sender: TObject);
begin
 RecreateWnd;
end;

end.


Игорь М.   (2006-01-24 13:55:00) [7]

Да в том то и дело что мне нужно не для главной формы.
Вариант:
     SetForegroundWindow(VideoF.Handle);
     Application.Restore;
мне не подходит.
Нужно что бы система сама знала что моё окно должно быть сверху.
Странно, для меня это оказалось траблой над которой уже часа два бьюсь:)


Игорь Шевченко   (2006-01-24 13:35:00) [8]


> но он не работает


Работает. Для главной формы


Наверх

Титульная страница Поиск, карта сайта Написать письмо