![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Окно 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]
> но он не работает
Работает. Для главной формы