Показать TRadioButtons в TListView

Показать TRadioButtons в TListView

unit Unit1;
 interface
 uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;
 type
  TMain = class(TForm)
  ListView1: TListView;
  Button1: TButton;
  Button2: TButton;
  procedure FormCreate(Sender : TObject);
  procedure FormDestroy(Sender : TObject);
  procedure Button1Click(Sender : TObject);
  procedure Button2Click(Sender : TObject);
  private
  ListViewRadioList: TList;
  procedure ListViewRadioCreate(List : TListView; R : TRect);
  procedure ListViewRadioClear(List : TListView; Liste : TList);
  procedure ListViewRadioFree(List : TListView; Liste : TList);
  procedure ListViewListSelected(Item : integer; List : TListView);
  procedure ListViewRadioClick(Sender : TObject);
  public
  { Public-Deklarationen }
  end;
 var
  Main : TMain;
 implementation
 {$R *.DFM}
 procedure TMain.FormCreate(Sender : TObject);
 begin
  ListViewRadioList := TList.Create;
 end;
 procedure TMain.FormDestroy(Sender : TObject);
 begin
  ListViewRadioFree(ListView1, ListViewRadioList);
 end;
 procedure TMain.Button1Click(Sender : TObject);
 var
  R : TRect;
  NewColumn : TListColumn;
  ListItem : TListItem;
  I : integer;
 begin
  with ListView1 do
  begin
  ViewStyle := vsReport;
  Align := alLeft;
  RowSelect := True;
  ReadOnly := True;
  ShowColumnHeaders := False;
  NewColumn := Columns.Add;
  NewColumn.Width := 15;
  NewColumn := Columns.Add;
  NewColumn.Width := Width - 15 - 19; // - breite Button - breite vom Scrollbalken
  Items.BeginUpdate;
  for I := 0 to 9 do
  begin
  ListItem := Items.Add;
  R := Items[I].DisplayRect(drBounds);
  R.Left := 1;
  R.Right := Columns[0].Width;
  ListViewRadioCreate(ListView1, R);
  Items[I].Data := TRadioButton(ListViewRadioList[I]);
  ListItem.SubItems.Add('Test' + IntToStr(I));
  end;
  Items.EndUpdate;
  end;
 end;
 procedure TMain.Button2Click(Sender : TObject);
 begin
  ListViewRadioClear(ListView1, ListViewRadioList);
 end;
 //------------------------------------------------------------------------------
procedure TMain.ListViewRadioCreate(List : TListView; R : TRect);
  function NewViewRadio: TRadioButton;
  begin
  Result := TRadioButton.Create(Self);
  Result.Parent := List;
  Result.BoundsRect := R;
  Result.OnClick := ListViewRadioClick;
  end;
 begin
  ListViewRadioList.Add(NewViewRadio);
 end;
 //------------------------------------------------------------------------------
procedure TMain.ListViewRadioFree(List : TListView; Liste : TList);
 var
  I : integer;
 begin
  if Liste.Count - 1 < 0 then exit;
  for I := 0 to Liste.Count - 1 do TRadioButton(Liste[I]).Free;
  Liste.Free;
 end;
 //------------------------------------------------------------------------------
procedure TMain.ListViewRadioClear(List : TListView; Liste : TList);
 var
  I : integer;
 begin
  if Liste.Count - 1 < 0 then exit;
  List.Items.BeginUpdate;
  for I := 0 to Liste.Count - 1 do TRadioButton(Liste[I]).Free;
  List.Items.Clear;
  Liste.Clear;
  List.Items.EndUpdate;
 end;
 //------------------------------------------------------------------------------
procedure TMain.ListViewListSelected(Item : integer; List : TListView);
 begin
  with List do
  begin
  try
  SetFocus;
  except
  end;
  Selected := Items[Item];
  ItemFocused := Selected;
  end;
 end;
 //------------------------------------------------------------------------------
procedure TMain.ListViewRadioClick(Sender : TObject);
 var
  I : integer;
 begin
  for I := 0 to ListViewRadioList.Count - 1 do
  if TRadioButton(ListViewRadioList[I]).Checked then
  begin
  ListViewListSelected(I, ListView1);
  break;
  end;
 end;
 end.

Взято с сайта: http://www.swissdelphicenter.ch

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...