Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.017 c
1-6519
delkos
2003-03-24 21:36
2003.04.03
Простой Трейнер


3-6367
PVOzerski
2003-03-14 14:10
2003.04.03
Паскальный Set в поле БД: насколько разумно?


7-6815
Dudko Anton
2003-02-10 05:35
2003.04.03
Настройки в Bios


6-6656
Junior
2003-02-05 14:35
2003.04.03
проблема с TCP client-server


3-6387
Наташа
2003-03-14 22:44
2003.04.03
internal gds software consistency check