Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизКомпонент Treeview Найти похожие ветки
← →
Хам (2006-08-22 13:50) [0]Как в компоненте Treeview в зависимости от того на какую ветку подведён курсор, выводилась нужная подсказка ?
← →
Ega23 © (2006-08-22 14:03) [1]Гы.. Кто из мастеров подсказал - не помню. По крайней мере авторство не моё.
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;
← →
Хам (2006-08-23 10:10) [2]Что то у меня не получаеться ((
Сделал пока вот так
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-23 10:14) [3]
> if (@FTVMouseMove<>nil) then FTVMouseMove(Sender, Shift,
> X, Y);
Это у меня собственный компонент, внутри которого идёт обработка MouseMove. Но пользователь тоже может что-то своё на MouseMove повесить. Вот эта строчка, фактически, проверяет, есть ли пользовательский обработчик MouseMove, и если есть - его выполняет.
> node:=nil;
А ЭТО ЗАЧЕМ?????
← →
Наиль © (2006-08-23 10:18) [4]Проверяй изменилась ли ветка дерева, если изменилась, то вызывай Application.ShowHint:=true. Если вызывать без проверки, то будет мерцание.
Для большей надёжности изучи Application.SetShowHint, и сделай аналог под себя.
← →
Хам (2006-08-23 10:22) [5]> node:=nil;
> А ЭТО ЗАЧЕМ?????
Если без этой строчки то абсолютно ничего не меняеться, прога работает так же
← →
Жуков Олег (2006-08-23 10:36) [6]
>если изменилась, то вызывай Application.ShowHint:=true
Наверно Application.CancelHint всё-таки логичнее будет. ShowHint может быть уже задействовано по назначению.
> эта строчка, фактически, проверяет, есть ли пользовательский
> обработчик MouseMove, и если есть - его выполняет.
Не понятно зачем. Есть виртуальный MouseMove в котором уже есть. Чтобы вызвался пользовательский обработчик достаточно в перекрытом MouseMove вызвать inherited;
← →
Хам (2006-08-23 10:42) [7]Application.CancelHint Вот это помогло
Ещё один вопрос , а как сделать многострочный хинт ? Если значение я присваиваю динамичиски ?
← →
Жуков Олег (2006-08-23 10:48) [8]Hint := "Line1" + #13#10 + "Line2" + #13#10 + "Line3";?
← →
Хам (2006-08-23 10:56) [9]Угу спасибо за помощь )))
← →
Наиль © (2006-08-23 10:58) [10]
> ShowHint может быть уже задействовано по назначению.
С хинтами давно не работал. Про CancelHint, если и знал, то забыл. Поэтому и рекомендовал реализовать собственный SetShowHint (что, как выяснилось, в принципе не верно).
> Ещё один вопрос , а как сделать многострочный хинт ? Если
> значение я присваиваю динамичиски ?
Можно организовать для хинта расширеную функциональность, следующим образом:unit Unit4;
interface
uses Controls, Forms;
type
MyHint=class(THintWindow)
// Своя реализация
end;
implementation
initialization
HintWindowClass:=MyHint;
end.
← →
Ega23 © (2006-08-23 11:37) [11]
> Не понятно зачем. Есть виртуальный MouseMove в котором уже
> есть. Чтобы вызвался пользовательский обработчик достаточно
> в перекрытом MouseMove вызвать inherited;
А зачем? Завёл поле, типа TNotifyEvent, а дальше переназначил свой обработчик.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c