Главная страница
    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.49 MB
Время: 0.015 c
1-27974
George3
2002-11-29 15:59
2002.12.09
DBGrid


6-28172
саша
2002-10-14 06:50
2002.12.09
Какай командой узнать сетевое имя компа?


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


1-28123
sen
2002-11-27 16:01
2002.12.09
Сокеты в Делфи


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