Форум: "Основная";
Текущий архив: 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