Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо