Текущий архив: 2005.08.21;
Скачать: CL | DM;
Вниз
Непонятки с отрисовкой картинки в Listbox Найти похожие ветки
← →
kyn66 © (2005-07-28 17:41) [0]Уважаемые мастера, хочу в Listbox по некоторым условиям отрисовывать итемсы то содной, то с другой картинкой. Код следующий:
procedure TRepMsgFrm.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with TCustomListBox(Control) do
begin
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 2 + ImageList.Height, Rect.Top + 3, Items[Index]);
Rect.Bottom := Rect.Top + ImageList.Height; // перерисовывать только
Rect.Right := Rect.Left + ImageList.Width; // часть , на которой картинка
Rect.Top := Rect.Top + 2;
ImageList.Draw(Canvas, Rect.Left, Rect.Top, NomPic);
end;{With}
end;
procedure TRepMsgFrm.Button1Click(Sender: TObject);
begin
NomPic := 0;
ListBox1.Items.Add("Строка 1");
end;
procedure TRepMsgFrm.Button2Click(Sender: TObject);
begin
NomPic := 1;
ListBox1.Items.Add("Строка 2");
end;
При клине на бутоне, картинки все меняются на ту, которая была последней. Почему они не запоминаются?
← →
Leonid Troyanovsky © (2005-07-28 18:01) [1]
> kyn66 © (28.07.05 17:41)
> ImageList.Draw(Canvas, Rect.Left, Rect.Top, NomPic);
А если так:
ImageList.Draw(Canvas, Rect.Left, Rect.Top, Index) ?
--
Regards, LVT.
← →
kyn66 © (2005-07-29 09:08) [2]А каким образом тогда мне регулировать, какую картинку подгружать в итемс, на данном этапе это NomPic регулируется.
← →
Leonid Troyanovsky © (2005-07-29 09:28) [3]
> kyn66 © (29.07.05 09:08) [2]
> А каким образом тогда мне регулировать, какую картинку подгружать
> в итемс, на данном этапе это NomPic регулируется.
Например, сделать NomPic массивом, по количеству итемов.
Ну, и вписать туда нужные индексы картинок.
Кроме того, у ListBox.Items есть свойство Objects,
в котором можно сохранять четырехбайтовые значения,
т.е. Objects[i]:= TObject(idx), и в нужных местах
вызывать: idx := Longint(Objects[i]).
--
Regards, LVT.
← →
kyn66 © (2005-07-29 10:39) [4]А как я узнаю кол-во итемсов? Оно могет быть разным
← →
Leonid Troyanovsky © (2005-07-29 11:33) [5]
> kyn66 © (29.07.05 10:39) [4]
> А как я узнаю кол-во итемсов? Оно могет быть разным
Items.Count.
--
Regards, LVT.
← →
kyn66 © (2005-07-29 13:10) [6]>> Items.Count.
Я не про то..
>>Например, сделать NomPic массивом, по количеству итемов.
>>Ну, и вписать туда нужные индексы картинок.
А это не тоже самое?
...
NomPic := 0
ImageList.Draw(Canvas, Rect.Left, Rect.Top, NomPic);
NomPic := 1
ImageList.Draw(Canvas, Rect.Left, Rect.Top, NomPic);
NomPic := 0
ImageList.Draw(Canvas, Rect.Left, Rect.Top, NomPic);
..
>>Кроме того, у ListBox.Items есть свойство Objects,
>>в котором можно сохранять четырехбайтовые значения,
>>т.е. Objects[i]:= TObject(idx), и в нужных местах
>>вызывать: idx := Longint(Objects[i]).
Тут действительно нуно как-то через AddObject делать, токак вот ка - пока не придумаю, вот и консультируюсь ;-)
← →
ЮЮ © (2005-07-29 13:32) [7]после
NomPic := 1;
ListBox1.Items.Add("Строка 2");
обработчик
ListBox1DrawItem вызывается для отрисовки обоих итемов, а так как NomPic теперь = 1, то и рисунок будет одинаковый.
Если рисунок скоррелирован с инднксом, типа четные - первый, нечетные - второй, то ListBox1DrawItem следует анализировать параметр Index, например
nomPic := index mod 2, причем nomPic - просто локальная переменная в ListBox1DrawItem.
Если же "nomPic" определен где-то до момента нажатия на кнопку, скажем для примера в picEdit (TEdit на форме), то
procedure TRepMsgFrm.Button1Click(Sender: TObject);
var
nomPic: integer;
begin
nomPic := StrToIntDef(picEdit.Text, 0)
ListBox1.Items.AddObject("Строка 1", TObject(nomPic));
end;
и теперь для каждого Index в ListBox1DrawItem можно извлечь сохраненный "nomPic":
procedure TRepMsgFrm.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
nomPic: integer;
begin
nomPic := Integer(ListBox1.Items.Objects[Index]);
← →
kyn66 © (2005-08-01 12:52) [8]>>ЮЮ
Вот это вроде то, что нужно. Маленькое дополнение.... А если я сперва строки для ListBox готовлю во временной переменной типа TStrings, могу я предавать в нее объекты, а потом все перенести в Listbox, ничего не потеряется?
Страницы: 1 вся ветка
Текущий архив: 2005.08.21;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.032 c