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

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

действительно поверх всех окон


Pank ©   (2003-09-01 12:46:00) 

Как сделать, чтобы форма оставалась действительно поверх всех окон? Спасибо.


Pank   (2003-09-02 18:56:00) [1]

Чтож, вопрос исчерпан. Спасибо за помощь.


Игорь Шевченко   (2003-09-02 18:22:00) [2]

Например, так:


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);
ExStyle := ExStyle or WS_EX_TOOLWINDOW;WndParent := HWND_DESKTOP;
end;
end;


Pank   (2003-09-02 18:20:00) [3]

2Igor__: Не подходит, потому что тогда форма поверх всех окон только моего приложения и перекрывается той же делфой.

2Игорь Шевченко: Спасибо большое, это помогло. Но теперь другая проблема: главная форма, как и раньше лежит в трее, а вот та, которую я сделал поверх всех, отображается на панели задач. Можно ли это исправить?


Игорь Шевченко   (2003-09-02 10:01:00) [4]

У неглавной формы, для того, чтобы она была StayOnTop, надо задавать Parent HWND_DESKTOP. Примерно, как здесь:
{
Модуль: 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;
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.


Igor__   (2003-09-01 18:39:00) [5]

А чем тебе не нравица свойство FormStyle.


Pank   (2003-09-01 18:04:00) [6]

Не главная.
У меня главная форма лежит в трее, а эта вот, вторая, должна как указатель быть сверху.


Игорь Шевченко   (2003-09-01 17:59:00) [7]

А форма главная или неглавная ?


Pank   (2003-09-01 17:48:00) [8]

Написал эту строку при создании формы.
Но потом всё равно она закрывается другими приложениями.
Или вы имели ввиду, что надо это повторять через таймер? Объясните, пожалуйста.


Игорь Шевченко   (2003-09-01 17:41:00) [9]

Pank (01.09.03 17:36) [3]


> не-а, не помогает.


Подробнее: когда вызываешь, когда не помогает ?


Pank   (2003-09-01 17:36:00) [10]

2Игорь Шевченко: не-а, не помогает.

2Evgeniy_K: а как это сделать?


Игорь Шевченко   (2003-09-01 15:23:00) [11]

SetWindowPos (Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE) не помогает ?


Evgeniy_K   (2003-09-01 14:17:00) [12]

Нужно постоянно помещать форму вверх очереди, но тогда она будет перекрывать даже собственные Popup-меню.


Наверх

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