Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
Время: 0.037 c
14-1121063066
Ломброзо
2005-07-11 10:24
2005.07.31
Наводит на размышления


1-1121026051
Arc
2005-07-11 00:07
2005.07.31
Как отловить момент после создания новой формы?


6-1113911899
juice
2005-04-19 15:58
2005.07.31
TIDPOP3


3-1119427251
Nic
2005-06-22 12:00
2005.07.31
Текстовая база ASCII


11-1104228577
AlexandrK
2004-12-28 13:09
2005.07.31
KOLEDB: OLE DB error





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский