Р а з д е л ы
Новости
Гостевая
Форум
Чат
Учебники
Программы
Статьи по Delphi
Статьи по Html
Компьютерные статьи
Java скрипты
Приколы
Отправить SMS
Мои разработки
 
К о н т а к т ы

ICQ: 445511525
e-mail: ZORBI@bk.ru

c o p y r i g h t
p r o g r a m m i n g
d e s i g n e d
by ZORBI

Т р о и ц к   г

 
С с ы л к и


 
С ч е т ч и к и
Rambler's Top100
 
..:: Статьи ::..
Отображение длинных строк при движении мыши по списку для нескольких TListBox

   При движении по списку TListBox содержимое каждой строки
   показывается с помощью Hint-а. Код поддерживает обработку
   нескольких TListBox на форме. 

   {Вставляем в раздел  private вашей формы:}

       SaveHintHidePause: Integer;
       SaveHintPause: Integer;
       procedure ShowHint(var HintStr: string;
         var CanShow: Boolean; var HintInfo: THintInfo);

   {Вставляем где нибудь после implementation:}

   procedure TForm1.ShowHint(var HintStr: string;
     var CanShow: Boolean; var HintInfo: THintInfo);
   var
     ListRect, FormRect: TRect;
   begin
     with HintInfo do
     begin
       if HintControl.ClassType = TListBox then                            
   // Проверяем находимся ли мы над ListBox'ом.
         with HintControl as TListBox do
         begin
           if (ItemAtPos(CursorPos, true) <> -1) and                       
   // Проверяем есть ли под курсором пункт ListBox'а.
             (Canvas.TextWidth(items.Strings[ItemAtPos(CursorPos, true)]) >
   // Проверяем помешается ли этот элемент в ListBox.
             ItemRect(ItemAtPos(CursorPos, true)).Right - 2) then
           begin
             HintStr := items.Strings[ItemAtPos(CursorPos, true)];         
   // Устанавливаем текст hint'а в значение пункта, над которым находится курсор.
             ListRect := ClientRect;
             ListRect.Top := ListRect.Top + (ItemAtPos(CursorPos, true) - TopIndex) * ItemHeight;
             ListRect.Bottom := ListRect.Top + ItemHeight;
             CursorRect := ListRect;
             GetWindowRect(Handle, FormRect);                              
   // Определяем координаты текущей формы,
             HintInfo.HintPos := Point(ListRect.Left + FormRect.Left + 1,  
   // чтобы задать координаты hint'а
               ListRect.Top + FormRect.Top - 1);                           
   // т.к. HintInfo.HintPos задаётся относительно экрана.
           end;
         end;
     end;
   end;

   {В обработчике FormActivate формы прописываем:}

     Application.OnShowHint := ShowHint;                                   
   // Переназначаем процедуру показа hint'ов.
     SaveHintHidePause := Application.HintHidePause;                       
   // Сохраняем значения HintHidePause и HintPause в специально добавленных
   полях формы,
     SaveHintPause := Application.HintPause;                               
   // так Ваша форма не нарушит настроек параметров hint'а программы если они
   отличаются от стандартных.
     Application.HintHidePause := 5000;
     Application.HintPause := 300;

   {В обработчике FormDeactivate формы прописываем:}

     Application.HintHidePause := SaveHintHidePause;                       
   // Восстанавливаем начальные значения.
     Application.HintPause := SaveHintPause;

   Во всех ListBox'ах, в которых необходимо отображать
   подсказки, устанавливаем свойство ShowHint в True.
	             		

Источник: www.delphikingdom.ru  

Hosted by uCoz