Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];

Вниз

MDI StatusBar и Application.OnHint   Найти похожие ветки 

 
Andy78   (2002-11-27 16:35) [0]

У меня есть MDI приложение. Я пишу свой обработчик Application.OnHint, который отображает хинт конпонентов в StatusBar"e главной формы(MDIForm). Когда открываю MDIChildForm, то хинты от главной формы также отображаются в StatusBar"e MDIChildForm. Мне нужно чтоб хинты от главной формы не отображаличь в MDIChild.

Вот код обработчика:

...

Application.OnHint:= DisplayHint;

...


procedure TMainFrm.DisplayHint(Sender: TObject);
var i: Integer;
begin
if Assigned(ActiveMDIChild) then
for i:= 0 to ActiveMDIChild.ComponentCount -1 do
if (ActiveMDIChild.Components[i] is TStatusBar) and
((ActiveMDIChild.Components[i] as TStatusBar).Owner.Name <> "MainFrm") then
(ActiveMDIChild.Components[i] as TStatusBar).Panels[0].Text:= GetLongHint(Application.Hint)
else
else
StatusBar1.Panels[1].Text:= GetLongHint(Application.Hint);//GetLongHint(Application.Hint)
end;


 
Andy78   (2002-11-27 16:38) [1]

1


 
exit   (2002-11-27 16:42) [2]


procedure TMainFrm.DisplayHint(Sender: TObject);
begin
StatusBar1.Panels[1].Text:= Application.Hint;
end;


 
SuM@ga   (2002-11-27 16:43) [3]

У меня такая же проблема.
Помогите.


 
Игорь Шевченко   (2002-11-27 16:46) [4]


> ((ActiveMDIChild.Components[i] as TStatusBar).Owner.Name
> <> "MainFrm")


Это как понимать ? У ActiveMDIChild.Components[i] насколько я понимаю, Owner"ом должен быть сам ActiveMDIChild...


 
Andy78   (2002-11-27 16:57) [5]

((ActiveMDIChild.Components[i] as TStatusBar).Owner.Name

точно не то, забыл закоментировать во время экспериментов


 
Andy78   (2002-11-27 17:00) [6]

вот окончательный обработчик

procedure TMainFrm.DisplayHint(Sender: TObject);
var i: Integer;
begin
if Assigned(ActiveMDIChild) then
for i:= 0 to ActiveMDIChild.ComponentCount -1 do
if (ActiveMDIChild.Components[i] is TStatusBar) then
(ActiveMDIChild.Components[i] as TStatusBar).Panels[0].Text:= GetLongHint(Application.Hint)
else
else
StatusBar1.Panels[1].Text:= GetLongHint(Application.Hint);

end;


 
Игорь Шевченко   (2002-11-27 17:04) [7]

А поподробнее можно рассказать, что, когда и где должно отображаться ?


 
Игорь Шевченко   (2002-11-27 17:07) [8]


> if Assigned(ActiveMDIChild) then
> for i:= 0 to ActiveMDIChild.ComponentCount -1 do
> if (ActiveMDIChild.Components[i] is TStatusBar) then
> (ActiveMDIChild.Components[i] as TStatusBar).Panels[0].Text:=
> GetLongHint(Application.Hint)
> else
> else
> StatusBar1.Panels[1].Text:= GetLongHint(Application.Hint);


В этом варианте любой Hint отображается в StatusBar MDIChild-формы, как и написано.

Если надо знать, кто запрашивает вывод hint"а, то прямой путь идти на обработку сообщения CM_HINTSHOW


 
Andy78   (2002-11-27 17:09) [9]

Нужно знать какая именно форма запрашивает вывод хинта : MDIForm или MDIChildFom.


 
exit   (2002-11-27 17:13) [10]

То есть получается:
Если есть ActiveMDIChild, то на его статусе отображать Application.Hint, а если он (ActiveMDIChild) не Assigned, то показывать на Статусе MainFrm?
Я же написал уже:

procedure TMainFrm.DisplayHint(Sender: TObject);
begin
StatusBar1.Panels[1].Text:= Application.Hint;
end;

И все хинты рисуются только на статусе главной формы. Зачем так мудрить?


 
Игорь Шевченко   (2002-11-27 17:18) [11]


> Нужно знать какая именно форма запрашивает вывод хинта :
> MDIForm или MDIChildFom


Напишите у формы обработчик CM_HintShow


 
Andy78   (2002-11-27 17:18) [12]

Нет. Это я пробовал, не подходит.


 
Andy78   (2002-11-27 17:20) [13]

2 Игорь Шевченко

У каждой формы что ли ?



 
Игорь Шевченко   (2002-11-27 17:21) [14]

Andy78 (27.11.02 17:20)

Если они не от общего предка - то у каждой...У TApplication свойство FHintControl находится в private :-(


 
Andy78   (2002-11-27 17:28) [15]

А может использовать позицию мыши. Как можно распознать где в данный момень находится мышь : на главной форме или на MDIChild ?


 
Игорь Шевченко   (2002-11-27 17:43) [16]

Andy78 (27.11.02 17:28)

function FindVCLWindow(const Pos: TPoint): TWinControl;


 
SuMaga   (2002-11-27 18:17) [17]

Игорь Шевченко © !!!
Саул !


 
Andy78   (2002-11-27 18:22) [18]

Прокатило !

Вот окончательный обработчик :

procedure TMainFrm.DisplayHint(Sender: TObject);
var i: Integer;
P: TPoint;
begin
GetCursorPos(P);
if Assigned(ActiveMDIChild) then
for i:= 0 to ActiveMDIChild.ComponentCount -1 do
if (ActiveMDIChild.Components[i] is TStatusBar) and (FindVCLWindow(P).Owner.Name <> "MainFrm") then
(ActiveMDIChild.Components[i] as TStatusBar).Panels[0].Text:= GetLongHint(Application.Hint)
else
else
StatusBar1.Panels[1].Text:= GetLongHint(Application.Hint);
end;


 
Andy78   (2002-11-27 18:37) [19]

А еще лучше так :

procedure TMainFrm.DisplayHint(Sender: TObject);
var i: Integer;
P: TPoint;
begin
GetCursorPos(P);
if Assigned(ActiveMDIChild) then
for i:= 0 to ActiveMDIChild.ComponentCount -1 do
if (ActiveMDIChild.Components[i] is TStatusBar) then
if (FindVCLWindow(P).Owner.Name <> "MainFrm") then
(ActiveMDIChild.Components[i] as TStatusBar).Panels[0].Text:= GetLongHint(Application.Hint)
else
MainFrm.StatusBar1.Panels[1].Text:= GetLongHint(Application.Hint)
else
else
StatusBar1.Panels[1].Text:= GetLongHint(Application.Hint);
end;



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

Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
1-28036
Smithson
2002-11-29 11:10
2002.12.09
Как сменить наследника у фрейма с .dfm-файлом


1-27926
Cranium
2002-11-28 22:58
2002.12.09
Как запретить возникновения события компонента?


1-28014
smok_er
2002-11-29 21:07
2002.12.09
СтрингЛист - аргумент функции


3-27811
REP
2002-11-21 07:12
2002.12.09
Вопросы по TQRPreview


4-28339
stel
2002-10-21 08:16
2002.12.09
Как изменить цвет выделения в RichEdit?





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