![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ListBox как подобие ListView [D7, WinXP]
kyn66 © (2006-11-03 16:24:00)Ввиду необходимости нужно сделать из ListBox САБЖ. Связано с тем, что в элемент ListBox нужно всавлять объект, что нельзя сделать с элементом ListView, почему - не понятно. Конкретно нужно, чтобы поусловию один элемент был с картинкой и начинался с самого начала, остальные - со сдвигом вправо, тоже с картинкой но другой. делаю так:
procedure TReestrFrm.SpisokListBoxDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
Var
Bitmap : TBitmap;
Offset : Integer;
begin
with TCustomListBox(Control).Canvas do
begin
FillRect(Rect);
Bitmap := TBitmap.Create;
Case TipRep of
1 : Bitmap.LoadFromResourceName(HInstance, 'OTGR');
2 : Bitmap.LoadFromResourceName(HInstance, 'REP');
end;{Case}
Bitmap.Transparent :=True;
if Bitmap <> nil then
begin
BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width, Bitmap.Height),
Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clWhite);
Offset := IIF(TipRep = 2, Bitmap.Width + 8, Bitmap.Width + 0)
end;
TextOut(Rect.Left + Offset, Rect.Top, SpisokListBox.Items[Index]);
end;{With}
Bitmap.Destroy;
end;
Не работает как нужно и темболее картинка почему-то не транспорентится.
kyn66 (2006-11-03 17:51:00) [1]Ага, есть такое, как не видел... Ща только нужно разобраться с прикруткой.
делаю так:
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
ListItem: TListItem;
n : Integer;
begin
n := 0;
// ListView1.AddItem
ListView1.Items.BeginUpdate;
with ListView1 do
begin
SmallImages := ImageList1;
LargeImages := ImageList1;
for I := 0 to ImageList1.Count - 1 do
begin
Inc(n);
ListItem := Items.Add;
if n mod 6 = 0 then
begin
ListItem.Indent := 0;
Listitem.Caption := '3333333333333';
// ListItem.ImageIndex := -1;
ListItem.SubItems.Add('');
ListItem.SubItems.Add('');
end
else
begin
ListItem.Indent := 1;
Listitem.Caption := 'Image' + IntToStr(I);
ListItem.ImageIndex := I;
ListItem.SubItems.Add('Картинка ' + IntToStr(I));
ListItem.SubItems.Add('Кар ' + IntToStr(I));
end;
// if I mod 7 = 0 then
// ListItem.Indent := 1;
end;
end;
ListView1.Items.EndUpdate;
end;
Вся обработка идет через ListItem
Джо (2006-11-03 17:10:00) [2]> [7] kyn66 © (03.11.06 17:03)
>
> > Пардон, то есть, ListView.Item.AddItem('Наименование',
> Pointer(Kod1.
> > AsInteger));
>
> AddObject
ListView.AddItem.
kyn66 (2006-11-03 17:03:00) [3]
> Пардон, то есть, ListView.Item.AddItem('Наименование', Pointer(Kod1.
> AsInteger));
AddObject
Джо (2006-11-03 16:55:00) [4]Пардон, то есть,
ListView.Item.AddItem('Наименование', Pointer(Kod1.AsInteger));
Джо (2006-11-03 16:54:00) [5]> [4] kyn66 © (03.11.06 16:52)
> Может я не совсем грамотно выразился, мне нужно как в ListBox
> сделать :
);
ListView1.AddItem('123',Kod1.AsInteger));
kyn66 (2006-11-03 16:52:00) [6]Может я не совсем грамотно выразился, мне нужно как в ListBox сделать :
ListBox.Item.AdObject('Наименование', Pointer(Kod1.AsInteger));
Джо (2006-11-03 16:38:00) [7]> [2] kyn66 © (03.11.06 16:37)
> И как в элемент внести объект а затем прочитать его?
1. ListemItem.Data := MyObject
2. MyObject := TMyObject(ListemItem.Data)
kyn66 (2006-11-03 16:37:00) [8]И как в элемент внести объект а затем прочитать его?
Джо (2006-11-03 16:30:00) [9]> что нельзя сделать с элементом ListView, почему - не понятно.
TListItem.Data.