Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];

Вниз

Как сделать Hint для каждой строки в ListBox ?   Найти похожие ветки 

 
NTdim   (2002-03-21 12:22) [0]

Как сделать Hint для каждой строки в ListBox ? [D5]
Понятно что нужно использовать OnMouseMove
но как взять номер итемса ?


 
MBo   (2002-03-21 12:25) [1]

function ItemAtPos(Pos: TPoint; Existing: Boolean): Integer;


 
Song   (2002-03-21 12:57) [2]


procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
Var Point:TPoint;
t:Integer;
begin
Point.X:=X;
Point.Y:=Y;
With ListBox1 Do
Begin
t:=ItemAtPos(Point,True);
IF t>-1 then
Begin
// Если размер надписи превышает длину контрола, загружаем его значение в хинт
IF Canvas.TextWidth(Items[t])>Width then Hint:=Items[t] else Application.CancelHint;
End Else Application.CancelHint;
End;
end;


 
NTdim   (2002-03-21 13:24) [3]

Огромное спасибо :))


 
lipskiy   (2002-03-21 13:26) [4]

А как делаются хинты, которые высвечиваются в точности по координатам исходного текста? В приведенном примере хинт будет вылезать под мышкой, а надо, чтобы текст хинта попиксельно совпал по позиции с текстом контрола и имел бы тот же Font.
И еще - как вызвать хинт снова вручную? Ведь мышь с контрола не ушла, изменения свойства Hint появление самого хинта не вызовет, его надо включить.


 
Song   (2002-03-21 13:30) [5]

Displays a hint window for the control at a specified position.

procedure ActivateHint(CursorPos: TPoint);

Description

ActivateHint locates the control or menu item at the position specified by CursorPos, where CursorPos represents a screen coordinates in pixels. After locating the control, ActivateHint displays the control’s Hint in a hint window.


 
Andrey007   (2002-03-21 13:31) [6]

Определять номер строки можно ещё так:

NumStr:=Trunc(Y/ListBox1.Canvas.TextExtent(ListBox1.Items[0]).cy);
if ListBox1.TopIndex>0 then NumStr:=NumStr+ListBox1.TopIndex;
if (NumStr>ListBox1.Items.Count-1) or
(ListBox1.Canvas.TextExtent(ListBox1.Items[NumStr]).cx=0) then Exit; // курсор вне текста


 
Song   (2002-03-21 13:33) [7]

:)))

В Москву можно и через Камчатку ездить


 
lipskiy   (2002-03-21 13:35) [8]

2 Song
Угу, понятно. А как узнать эти точные координаты итемса - чтоб текст совпал? Там ведь еще всякие поля, отступы...


 
lipskiy   (2002-03-21 13:35) [9]

И как сменить шрифт хинту?


 
Andrey007   (2002-03-21 13:40) [10]

>А как узнать эти точные координаты итемса - чтоб текст совпал? Там ведь еще всякие поля, отступы...

ListBox1.ItemRect(i)


 
Song   (2002-03-21 14:01) [11]

FAQ... и почему интересно люди его не любят...

http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988623788&n=16


 
lipskiy   (2002-03-21 17:38) [12]

2 Song
Спасибо за ссылку.
Почему не любят - могу объяснить, почему я не люблю.
По трем причинам.

Первая - хрен найдешь быстро то, что надо. Бывает, что и ключевых слов просто не придумаешь для поиска. Да и разложены вопросы отнюдь не идеально. Да и заголовки вопросов тоже имеют "несправочный" вид. Маленький список вопросов на одом листе и большие промежутки между ними - неприятно читать. В общем, тяжело искать - это раз.

Вторая - нет интерактива. Далеко не все примеры из FAQ работают безусловно. Часто что-то неоговорено. А часто просто не совсем то, что надо.

Третья - я честно хожу в FAQ, когда вопрос возникает впервые. Не найдя ответа - иду в форум, ну и когда начинается диалог, то проще и надежнее спросить тут же новые вопросы в том же направлении.

А вообще это уже треп пошел, модератор вырежет - и правильно сделает. Прошу прощения за мусор.


 
Andrey007   (2002-03-22 10:43) [13]

У меня почему-то это не работает, то есть подсказка не выскакивает:

procedure TPCBPInputForm.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var NumStr: Integer;
Pnt: TPoint;
begin
Pnt.x:=X; Pnt.y:=Y;
NumStr:=ListBox1.ItemAtPos(Pnt,True);
if NumStr>-1 then
begin // Если размер надписи превышает длину контрола, загружаем его значение в хинт
if Canvas.TextWidth(ListBox1.Items[NumStr])>ListBox1.Width then
begin
Application.Hint:=ListBox1.Items[NumStr];
Application.ActivateHint(Pnt)
end
else Application.CancelHint;
[...]
end
end;

При этом ListBox1.ShowHint=True.

Что я сделал неправильно?


 
Song   (2002-03-22 11:12) [14]

ActivateHint не нужен


 
Song   (2002-03-22 11:15) [15]

И хинт надо устанавливать не для класса TApplication, а для TListBox


 
Andrey007   (2002-03-22 14:25) [16]

А как сделать так, чтобы этот hint рисовался полностью перекрывая надпись и продолжался после ListBox"a на форме? У меня ListBox лежит на TTabSheet, причём ListBox.Align:=alClient и когда я рисовал DrawText(ListBox.Canvas.Handle,Pchar(ListBox.Items[NumStr]),-1,r,DT_LEFT), то hint не выходил за пределы ListBox"a.


 
Song   (2002-03-22 15:44) [17]

По-моему он ограничен клиентской областью. Это ограничение системы.


 
lipskiy   (2002-03-22 20:53) [18]

По моему задача сводится просто к тому, чтобы сделать такой же хинт, как, например, в TreeView - он там прекрасно работает и вылазит за пределы окна. М.б. можно это повторить?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.004 c
3-9396
Aaz
2002-03-11 07:21
2002.04.04
Глюк DBGrid?


7-9655
asafr
2001-07-30 14:11
2002.04.04
Замедление вращения CD-Rom


1-9512
Linux
2002-03-23 07:56
2002.04.04
ListBox


3-9400
koks
2002-03-04 17:51
2002.04.04
TQuery.Filter


1-9504
lipskiy
2002-03-22 15:01
2002.04.04
Как активировать свое приложение?





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