Главная страница
    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
Время: 4.916 c
6-1113996842
MetalFan
2005-04-20 15:34
2005.07.31
Shutdown по сети


1-1121082788
Catik
2005-07-11 15:53
2005.07.31
Есть число или 5-значное 70001 или 6-значное 120034


1-1120811225
KIR
2005-07-08 12:27
2005.07.31
Работа с произвольным изображением на форме


14-1120857704
Ihor Osov'yak
2005-07-09 01:21
2005.07.31
Предложение ударить по разжигателям междунациональной вражды..


4-1117945682
QAndrey
2005-06-05 08:28
2005.07.31
Icon в меню





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский