Показать TRadioButtons в TListView
01.01.2007
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.
Взято с сайта: https://www.swissdelphicenter.ch