![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Компонент Treeview [D7, WinXP]
Хам © (2006-08-22 13:50:00)Как в компоненте Treeview в зависимости от того на какую ветку подведён курсор, выводилась нужная подсказка ?
Ega23 (2006-08-23 11:37:00) [1]
> Не понятно зачем. Есть виртуальный MouseMove в котором уже
> есть. Чтобы вызвался пользовательский обработчик достаточно
> в перекрытом MouseMove вызвать inherited;
А зачем? Завёл поле, типа TNotifyEvent, а дальше переназначил свой обработчик.
Наиль (2006-08-23 10:58:00) [2]
> ShowHint может быть уже задействовано по назначению.
С хинтами давно не работал. Про CancelHint, если и знал, то забыл. Поэтому и рекомендовал реализовать собственный SetShowHint (что, как выяснилось, в принципе не верно).
> Ещё один вопрос , а как сделать многострочный хинт ? Если
> значение я присваиваю динамичиски ?
Можно организовать для хинта расширеную функциональность, следующим образом:
unit Unit4;
interface
uses Controls, Forms;
type
MyHint=class(THintWindow)
// Своя реализация
end;
implementation
initialization
HintWindowClass:=MyHint;
end.
Хам (2006-08-23 10:56:00) [3]Угу спасибо за помощь )))
Жуков Олег (2006-08-23 10:48:00) [4]Hint := 'Line1' + #13#10 + 'Line2' + #13#10 + 'Line3';?
Хам (2006-08-23 10:42:00) [5]Application.CancelHint Вот это помогло
Ещё один вопрос , а как сделать многострочный хинт ? Если значение я присваиваю динамичиски ?
Жуков Олег (2006-08-23 10:36:00) [6]
>если изменилась, то вызывай Application.ShowHint:=true
Наверно Application.CancelHint всё-таки логичнее будет. ShowHint может быть уже задействовано по назначению.
> эта строчка, фактически, проверяет, есть ли пользовательский
> обработчик MouseMove, и если есть - его выполняет.
Не понятно зачем. Есть виртуальный MouseMove в котором уже есть. Чтобы вызвался пользовательский обработчик достаточно в перекрытом MouseMove вызвать inherited;
Хам (2006-08-23 10:22:00) [7]> node:=nil;
> А ЭТО ЗАЧЕМ?????
Если без этой строчки то абсолютно ничего не меняеться, прога работает так же
Наиль (2006-08-23 10:18:00) [8]Проверяй изменилась ли ветка дерева, если изменилась, то вызывай Application.ShowHint:=true. Если вызывать без проверки, то будет мерцание.
Для большей надёжности изучи Application.SetShowHint, и сделай аналог под себя.
Ega23 (2006-08-23 10:14:00) [9]
> if (@FTVMouseMove<>nil) then FTVMouseMove(Sender, Shift,
> X, Y);
Это у меня собственный компонент, внутри которого идёт обработка MouseMove. Но пользователь тоже может что-то своё на MouseMove повесить. Вот эта строчка, фактически, проверяет, есть ли пользовательский обработчик MouseMove, и если есть - его выполняет.
> node:=nil;
А ЭТО ЗАЧЕМ?????
Хам (2006-08-23 10:10:00) [10]Что то у меня не получаеться ((
Сделал пока вот так
procedure TMainForm.OtdelTreeViewMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
node:TTreeNode;
HintText:String;
begin
Node := OtdelTreeView.GetNodeAt(X, Y);
if (node <> nil) then begin
if OtdelTreeView.Hint<>PsubUnit(node.data)^.full_name_unit then begin
OtdelTreeView.Hint:=PsubUnit(node.data)^.full_name_unit;
node:=nil;
end;
end;
end;
На даный момент хинт меняеться только если курсор выйдет за пределы treeview а потом сново войдёт в облость. Если перемещать курсор внутри treeview , то хинт не меняеться (
Мне вот ещё не понятно назначение вот этой строчки
if (@FTVMouseMove<>nil) then FTVMouseMove(Sender, Shift, X, Y);
Ega23 (2006-08-22 14:03:00) [11]Гы.. Кто из мастеров подсказал - не помню. По крайней мере авторство не моё.
procedure TCustomKdrDBTreeView.TVMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
Node : TTreeNode;
HintText:String;
begin
if (@FTVMouseMove<>nil) then FTVMouseMove(Sender, Shift, X, Y);
if (ShowHint) and (FHintField<>'') then
begin
Node := GetNodeAt(X, Y);
if Node<>nil then
begin
HintText:=TKdrDBTreeViewItemIdent(Node.Data).HintFieldValue;
if (HintText<>'') and (Self.Hint<>HintText) then
begin
Self.Hint:=HintText;
Application.CancelHint;
end;
end;
end;
end;