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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
14-28298
TTCustomDelphiMaster
2002-11-19 21:03
2002.12.09
Кто нибудь играл на Нью-Йоркской фондовой бирже?


3-27869
hawk1974
2002-11-21 10:58
2002.12.09
BDE и Oracle 8.1.6.


6-28178
TsaturSoft
2002-10-14 22:36
2002.12.09
Hyper Terminal


14-28241
Ru
2002-11-18 10:23
2002.12.09
Парсинг


14-28253
Cr@sh
2002-11-17 21:42
2002.12.09
Я с базами данных никогда не работал...





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