Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.018 c
1-6515
Ик сик
2003-03-24 14:23
2003.04.03
Можно ли изменить имя class name окна приложения?


14-6665
FFFFF
2003-03-17 16:15
2003.04.03
Создание CAD


8-6614
ReYken
2002-12-27 13:11
2003.04.03
Может я и повторяюсь... он ответа я не нашел. Хоть и видел.


7-6827
pfar
2003-02-08 08:36
2003.04.03
Как выгрузить любую DLL-ку в windows?


14-6771
RelakS
2003-03-16 19:33
2003.04.03
Как уменьшить размер ехе-файла




   Наверх