Главная страница
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.02 c
1-6516
dimonf
2003-03-24 21:50
2003.04.03
Как продолжить работу программы при конэкте к серверу?


1-6505
Roki
2003-03-24 17:15
2003.04.03
Каким компонентом вводят время в формате чч:мм?


14-6660
alex134
2003-03-15 15:38
2003.04.03
Адрес


4-6844
svs-123456789@mail.ru
2003-02-04 17:04
2003.04.03
ShellExecute под millenium и Win98


14-6748
Ihor Osov'yak
2003-03-16 23:44
2003.04.03
К тем бывшим землякам, которых в Стейтсы занесло..