Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Компонент 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо