Форум: "Основная";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];
ВнизКак убрать автопереключение на главное окно при показе хинта ? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 4.916 c