Форум: "WinAPI";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];
ВнизОкно top most Найти похожие ветки
← →
Игорь М. (2006-01-24 13:09) [0]Подскажите как всё-таки форму сделать поверх всех окон других приложений?
Типа showModal только что бы не ждало modalResult.
Нашёл пример который по описанию должен это сделать но он не работает:
with MyForm do SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
← →
Игорь Шевченко © (2006-01-24 13:35) [1]
> но он не работает
Работает. Для главной формы
← →
Игорь М. (2006-01-24 13:55) [2]Да в том то и дело что мне нужно не для главной формы.
Вариант:
SetForegroundWindow(VideoF.Handle);
Application.Restore;
мне не подходит.
Нужно что бы система сама знала что моё окно должно быть сверху.
Странно, для меня это оказалось траблой над которой уже часа два бьюсь:)
← →
Игорь Шевченко © (2006-01-24 14:18) [3]
> Да в том то и дело что мне нужно не для главной формы.{
Модуль: 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 15:02) [4]Идея понятна, но нихрена почему-то под 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 - это чьё свойство?
В принципе переделать видеоокно под главное не проблема.
Всё - таки интересно, как побороть:)
← →
Eraser © (2006-01-24 15:05) [5]
> Игорь М. (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://delphimaster.net/view/1-1138016742/
← →
Игорь М. (2006-01-24 16:03) [6]Ну 10 не 10, а тормознул точно:)
Да, спасибо, работет.
Только в оличии от твоего случая не желательно показывать моё окно на таскбаре.
Можно ли как-то удалить его оттуда?
← →
Игорь Шевченко © (2006-01-24 16:12) [7]
> Можно ли как-то удалить его оттуда?
Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW
← →
Игорь М. (2006-01-24 16:22) [8]Спасибо большое!!!, буду должен:)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c