Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: CL | DM;

Вниз

Как убрать автопереключение на главное окно при показе хинта ?   Найти похожие ветки 

 
ANB ©   (2005-07-14 09:38) [0]

По примеру ИШ сделал окно, которое самостоятельно висит в панели задач и не сворачивается при сворачивании главного окна.
Сделал вот так :

procedure TfmDelphiBrowser.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do begin
 Style := Style and (not WS_CHILD);
 WndParent := HWND_DESKTOP;
end;
end;

и так

procedure TfmWindowBrowser.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do begin
 Style := (Style or WS_POPUP) and (not WS_CHILD);
 WndParent := HWND_DESKTOP;
end;
end;

Все нормально работает. Если главное окно свернуть - никаких проблем не возникает. Но если главное окно не сворачивать, то при показе хинтов на дочернем окне, фокус сам переключается на главное и оно становится верхним. Заблокировал это через StayOnTop. Дочернее не пропадает, но активность все равно переключается на главное окно. Это мешает. Плюс с окном StayOnTop не удобно работать.
Как не давать окнам самопроизвольно переключаться при показе хинтов ?


 
ANB ©   (2005-07-14 14:02) [1]

Ой ой. Никто не знает ?


 
Игорь Шевченко ©   (2005-07-14 14:27) [2]

У меня ничего не переключается. Hint показывается на Popup-окне


 
ANB ©   (2005-07-14 15:09) [3]


> Игорь Шевченко ©   (14.07.05 14:27) [2]
- а CreateParams я правильно написал ? И больше ничего не надо делать ? Такое впечатление, что Application перключает на главное окно, когда хинт поднимает.


 
Игорь Шевченко ©   (2005-07-14 15:18) [4]

ANB ©   (14.07.05 15:09) [3]


> - а CreateParams я правильно написал


Правильно.


> Такое впечатление, что Application перключает на главное
> окно, когда хинт поднимает


Неверное впечатление. Тогда бы при хинтах на дочерних окнах было бы такое же поведение.


 
ANB ©   (2005-07-14 15:27) [5]


> Тогда бы при хинтах на дочерних окнах было бы такое же поведение.
- закоментил код в create params, перестало прыгать. Значит, что то в нем не так сделал. Ща полезу сили смотреть . . .


 
ANB ©   (2005-07-14 15:30) [6]

Закоментил только строку изменения стилей. Оставил только WndParent. Окно стало таким, как я хотел, но начало прыгать. Я не мог чего нибудь в свойствах проекта намудрить ?


 
ANB ©   (2005-07-14 15:44) [7]

Упс. Это не активность перключается. А главное окно перерисовывается. И закрывает мое. Похоже, винда шлет WM_PAINT главному окну, а оно не передает сообщение дочернему.


 
Игорь Шевченко ©   (2005-07-14 15:53) [8]

Обычно, чтобы не совершенствовать гадательные способности отвечающих, ключевые моменты кода выкладываются в форум.


 
ANB ©   (2005-07-14 16:04) [9]

Весь код выкладывать я чекнусь, там уже 627К исходников. На главной форме много PageControl, в них лежат эхлибовские гриды и SynEdit, обычный ActionList. Дочерние формы почти пустые. Только переопределена CreateParams. Если коментарить строчку WndParent, то значек в таскбаре появляется, но при сворачивании главного окна сворачивается все приложение. Если раскоментарить - все нормально, но главного окно постоянно перерисовывается поверх дочернего. Ща я пустой проект сделаю и потренируюсь. Потом зпостю результаты.


 
ANB ©   (2005-07-14 16:31) [10]

Вот короткий код в новой проекте :

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;

end.

unit Unit2;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm2 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
 private
   { Private declarations }
 protected
   procedure CreateParams(var Params: TCreateParams); override;
 public
   { Public declarations }
 end;

var
 Form2: TForm2;

implementation

{$R *.dfm}
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := HWND_DESKTOP;
{
Это я экспериментировал
Params.Style := Params.Style and (not WS_CHILD) or WS_OVERLAPPEDWINDOW;
Params.ExStyle := WS_EX_NOPARENTNOTIFY or WS_EX_APPWINDOW or WS_EX_OVERLAPPEDWINDOW;
}
Params.Style := (Params.Style or WS_POPUP) and (not WS_CHILD);
Params.ExStyle := WS_EX_APPWINDOW;
end;

end.

На форме 1 - одна кнопка, на Форме 2 - 2 кнопки, которые ничего не делают. На обоих формах включены хинты. Бага та же.


 
ANB ©   (2005-07-14 17:55) [11]

Это, не работает то. Кое как починил через ApplicationEvents. Но жутко криво. Иконки дергаются при сворачивании - разворачивании. И код некрасивый.



Страницы: 1 вся ветка

Текущий архив: 2005.07.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
4-1117606726
NightStranger
2005-06-01 10:18
2005.07.31
Взаимодействие приложений


4-1117809351
iskatel
2005-06-03 18:35
2005.07.31
пульт avermedia


14-1120572310
Essence
2005-07-05 18:05
2005.07.31
США беспокоит усиление России


4-1117371250
Yandexman
2005-05-29 16:54
2005.07.31
Как программно заменить обои на рабочем столе


4-1117649455
vi.ki.ng-vku
2005-06-01 22:10
2005.07.31
Перехват нажатия клавиши