Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.104 c
1-1156004220
Elf-Eluna-Alina
2006-08-19 20:17
2006.10.01
Вставить текст в RichEdit


2-1157707753
Тыгыдым
2006-09-08 13:29
2006.10.01
Работа с записями


3-1154031126
bumper
2006-07-28 00:12
2006.10.01
Битовые операции в SQL


1-1155918541
msn777
2006-08-18 20:29
2006.10.01
Глюк расстановки мест под точки останова.


15-1158068820
Александр Иванов
2006-09-12 17:47
2006.10.01
Tashkent Mastak Party





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