Главная страница
    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.008 c
1-27964
kex86
2002-11-27 13:55
2002.12.09
KeyDown


14-28201
leon83
2002-11-20 07:50
2002.12.09
Как писать по-русски в DOS-консоли в XP?


8-28151
robbit
2002-08-19 18:03
2002.12.09
сохранение содержимого canvas в файл


1-28018
^Sanya
2002-11-30 01:41
2002.12.09
Создание компонента:


6-28191
начинающий програмер
2002-10-10 19:37
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский