Текущий архив: 2003.04.03;
Скачать: CL | DM;
ВнизСоздание пиктограммы для эл-та в ListBoxe Найти похожие ветки
← →
Артём К. (2003-03-22 06:38) [0]Привет всем!!!
У меня для всех эл-ов ListBoxa создаётся пиктограмма(P1) .
Необходимо сделать так, чтобы при выборе эл-та у этого эл-а появлялась другая пиктограмма (Р2).
Заранее спасибо!
← →
Мыш (2003-03-22 07:01) [1]Ну идея такая: в onmousedown определяешь номер строки, по которой был щелчок, а при прорисовке этой строчки ( в событии ondrawitem) смотришь, если тот номер, то рисуешь другую иконку stretchdraw
← →
MBo (2003-03-22 07:06) [2]Идея другая - в OnDrawItem известно, Selected элемент ли рисуется
← →
Артём К. (2003-03-22 07:14) [3]У меня получается какая-то лажа...
Сначала прорисовываются все эл-ты с пиктограммой Р1. Далее когда
выбираю эл-т, то для него прорисовывается другая пиктограмма Р2, и для предыдущего тоже она же...
Так если все эл-ты выбирать поочерёдно, то у всех появляется пиктограмма Р2...
← →
MBo (2003-03-22 07:16) [4]приведи код OnDrawItem
← →
Артём К. (2003-03-22 07:30) [5]
var
Bitmap: TBitmap;
Offset: Integer;
MaxWidth: integer;
begin
MaxWidth := 0;
for i := 0 to lstDocuments.Count-1 do
if MaxWidth<lstDocuments.Canvas.TextWidth(lstDocuments.Items.Strings[i]) then
MaxWidth := lstDocuments.Canvas.TextWidth(lstDocuments.Items.Strings[i]);
SendMessage(lstDocuments.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+20, 0);
with (Control as TListBox).Canvas do begin
FillRect(Rect);
Offset := 0;
if Index<>(Control as TListBox).ItemIndex then
Bitmap := imPoint.Picture.Bitmap;
else
Bitmap := imArrow.Picture.Bitmap;
if Bitmap<>nil then begin
if Index<>(Control as TListBox).ItemIndex then
BrushCopy(Bounds(Rect.Left+3, Rect.Top+4, Bitmap.Width, Bitmap.Height),
Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clSilver)
else
BrushCopy(Bounds(Rect.Left+3, Rect.Top, Bitmap.Width, Bitmap.Height),
Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clSilver);
Offset := Bitmap.Width+5;
end;
TextOut(Rect.Left+Offset, Rect.Top, lstDocuments.Items[Index]);
end;
← →
Артём К. (2003-03-22 07:44) [6]Вы знаете я вписал в OnClick lstDocuments.Repaint. Когда клавой выбираешь эл-т, то нормуль, но когда мышью, то тупит...(в смысле прорисовывает не мгновенно...)
Можь есть какой другой способ...
← →
MBo (2003-03-22 07:57) [7]в OnDrawItem должно быть минимум кода - ведь этот обработчик выполняется для каждого элемента.
← →
Артём К. (2003-03-22 08:00) [8](->MBo)Я конечно понимаю все это, но никак не могу выкрутиться из этого положения. Подскажи (лучше с примером), если знаешь как сделать лучше...
← →
MBo (2003-03-22 08:14) [9]procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
Rect.Right:=Rect.Right+ImageList1.Width+3;
ListBox1.Canvas.FillRect(Rect);
if odSelected in State then
ImageList1.Draw(ListBox1.Canvas,Rect.Left, Rect.Top,0)
else
ImageList1.Draw(ListBox1.Canvas,Rect.Left, Rect.Top,1);
ListBox1.Canvas.TextOut(Rect.Left+ImageList1.Width+3,Rect.Top+2,
ListBox1.Items[Index]) ;
end;
procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
begin
Height:=ImageList1.Height+4;
end;
← →
Артём К. (2003-03-22 08:41) [10](->MBo) Большое спасибо!!! Вс1 Tip Top :-)
Страницы: 1 вся ветка
Текущий архив: 2003.04.03;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.039 c