mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 17:41:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			474 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			474 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| unit testform;
 | |
| 
 | |
| {$mode objfpc} {$H+} 
 | |
| 
 | |
| interface
 | |
| 
 | |
| uses
 | |
|   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls,
 | |
|   Buttons, StdCtrls, ExtCtrls, Spin;
 | |
| 
 | |
| type
 | |
| 
 | |
|   { TForm1 }
 | |
| 
 | |
|   TForm1 = class(TForm)
 | |
|     Button1: TButton;
 | |
|     Button2: TButton;
 | |
|     Button3: TButton;
 | |
|     Button4: TButton;
 | |
|     Button5: TButton;
 | |
|     Button6: TButton;
 | |
|     CheckBox1: TCheckBox;
 | |
|     CheckBox2: TCheckBox;
 | |
|     CheckBox3: TCheckBox;
 | |
|     CheckBox4: TCheckBox;
 | |
|     CheckBox5: TCheckBox;
 | |
|     ChBoxOwnerData: TCheckBox;
 | |
|     CheckBox6: TCheckBox;
 | |
|     CheckBox7: TCheckBox;
 | |
|     HideSelection: TCheckBox;
 | |
|     ComboBox1: TComboBox;
 | |
|     ComboBox2: TComboBox;
 | |
|     ComboBox3: TComboBox;
 | |
|     ComboBox4: TComboBox;
 | |
|     Edit1: TEdit;
 | |
|     Edit10: TEdit;
 | |
|     Edit11: TEdit;
 | |
|     Edit2: TEdit;
 | |
|     Edit3: TEdit;
 | |
|     Edit4: TEdit;
 | |
|     Edit5: TEdit;
 | |
|     Edit6: TEdit;
 | |
|     Edit7: TEdit;
 | |
|     Edit8: TEdit;
 | |
|     Edit9: TEdit;
 | |
|     ImageList1: TImageList;
 | |
|     Label1: TLabel;
 | |
|     Label10: TLabel;
 | |
|     Label11: TLabel;
 | |
|     Label12: TLabel;
 | |
|     Label13: TLabel;
 | |
|     Label14: TLabel;
 | |
|     lblSetCount: TLabel;
 | |
|     Label2: TLabel;
 | |
|     Label3: TLabel;
 | |
|     Label4: TLabel;
 | |
|     Label5: TLabel;
 | |
|     Label6: TLabel;
 | |
|     Label7: TLabel;
 | |
|     Label8: TLabel;
 | |
|     Label9: TLabel;
 | |
|     ListView1: TListView;
 | |
|     PageControl1: TPageControl;
 | |
|     Page1: TTabSheet;
 | |
|     Page2: TTabSheet;
 | |
|     Page3: TTabSheet;
 | |
|     OwnerDataCount: TSpinEdit;
 | |
|     procedure Button1Click(Sender: TObject);
 | |
|     procedure Button2Click(Sender: TObject);
 | |
|     procedure Button3Click(Sender: TObject);
 | |
|     procedure Button4Click(Sender: TObject);
 | |
|     procedure Button5Click(Sender: TObject);
 | |
|     procedure Button6Click(Sender: TObject);
 | |
|     procedure ChBoxOwnerDataChange(Sender: TObject);
 | |
|     procedure CheckBox1Click (Sender: TObject );
 | |
|     procedure CheckBox2Click (Sender: TObject );
 | |
|     procedure CheckBox3Click(Sender: TObject);
 | |
|     procedure CheckBox4Click(Sender: TObject);
 | |
|     procedure CheckBox5Click(Sender: TObject);
 | |
|     procedure CheckBox6Change(Sender: TObject);
 | |
|     procedure CheckBox7Change(Sender: TObject);
 | |
|     procedure ComboBox1Change (Sender: TObject );
 | |
|     procedure ComboBox2Change(Sender: TObject);
 | |
|     procedure ComboBox3Change(Sender: TObject);
 | |
|     procedure ComboBox4Change(Sender: TObject);
 | |
|     procedure Edit10Change (Sender: TObject );
 | |
|     procedure Edit11Change(Sender: TObject);
 | |
|     procedure Edit1Change (Sender: TObject );
 | |
|     procedure Edit2Change (Sender: TObject );
 | |
|     procedure Edit3Change(Sender: TObject);
 | |
|     procedure Edit4Change(Sender: TObject);
 | |
|     procedure Edit5Change(Sender: TObject);
 | |
|     procedure Edit6Change(Sender: TObject);
 | |
|     procedure Edit7Change(Sender: TObject);
 | |
|     procedure Edit8Change(Sender: TObject);
 | |
|     procedure HideSelectionChange(Sender: TObject);
 | |
|     procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
 | |
|     procedure ListView1Data(Sender: TObject; Item: TListItem);
 | |
|     procedure ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
 | |
|     procedure OwnerDataCountChange(Sender: TObject);
 | |
|   private
 | |
|     procedure ShowItemData;
 | |
|     procedure ShowColumnData;
 | |
|   protected
 | |
|   public
 | |
|     { public declarations }
 | |
|   end; 
 | |
| 
 | |
| var
 | |
|   Form1: TForm1; 
 | |
| 
 | |
| implementation
 | |
| 
 | |
| {$R *.lfm}
 | |
| 
 | |
| { TForm1 }
 | |
| 
 | |
| procedure TForm1.Button1Click(Sender: TObject);
 | |
| var
 | |
|   Item: TListItem;
 | |
| begin
 | |
|   if ListView1.OwnerData then
 | |
|     // OwnerDataCount.OnChange() triggers new items count.
 | |
|     OwnerDataCount.Value := ListView1.Items.Count + 1
 | |
|   else
 | |
|   begin
 | |
|     Item := ListView1.Items.Insert(StrToIntDef(Edit1.Text, 0));
 | |
|     Item.Caption := Format('Item %d', [ListView1.Items.Count]);
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Button2Click(Sender: TObject);
 | |
| var
 | |
|   Item: TListItem;
 | |
|   Idx: Integer;
 | |
| begin
 | |
|   if ListView1.OwnerData then
 | |
|     OwnerDataCount.Value := ListView1.Items.Count - 1
 | |
|   else
 | |
|   begin
 | |
|     Idx := StrToIntDef(Edit1.Text, 0);
 | |
|     if (Idx < 0) or (Idx > ListView1.Items.Count - 1) then
 | |
|       exit;
 | |
|     Item := ListView1.Items[Idx];
 | |
|     Item.Free;
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Button3Click(Sender: TObject);
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns.Add;
 | |
|   Column.Caption := Format('Column %d', [ListView1.Columns.Count]);
 | |
|   Column.Index := (StrToIntDef(Edit2.Text, 0));
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Button4Click(Sender: TObject);
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns[StrToIntDef(Edit2.Text, 0)];
 | |
|   Column.Free;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Button5Click(Sender: TObject);
 | |
| var
 | |
|   Item: TListItem;
 | |
|   Idx: Integer;
 | |
| begin
 | |
|   Idx := StrToIntDef(Edit1.Text, 0);
 | |
|   if (Idx < 0) or (Idx > ListView1.Items.Count - 1) then
 | |
|     exit;
 | |
|   Item := ListView1.Items[Idx];
 | |
|   Item.Selected := True;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Button6Click(Sender: TObject);
 | |
| var
 | |
|   Item: TListItem;
 | |
|   Idx: Integer;
 | |
| begin
 | |
|   Idx := StrToIntDef(Edit1.Text, 0);
 | |
|   if (Idx < 0) or (Idx > ListView1.Items.Count - 1) then
 | |
|     exit;
 | |
|   Item := ListView1.Items[Idx];
 | |
|   Item.Focused := True;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ChBoxOwnerDataChange(Sender: TObject);
 | |
| var
 | |
|   B: Boolean;
 | |
|   AItem: TListItem;
 | |
| begin
 | |
|   B := TCheckBox(Sender).Checked;
 | |
|   lblSetCount.Enabled := B;
 | |
|   OwnerDataCount.Enabled := B;
 | |
|   ListView1.BeginUpdate;
 | |
|   try
 | |
|     ListView1.Clear; // first clear all items because virtual and normal items are different classes
 | |
|   finally
 | |
|     ListView1.EndUpdate;
 | |
|   end;
 | |
|   ListView1.OwnerData := B;
 | |
|   ListView1.BeginUpdate;
 | |
|   try
 | |
|     if B then
 | |
|       ListView1.Items.Count := OwnerDataCount.Value
 | |
|     else
 | |
|     begin
 | |
|       with ListView1 do
 | |
|       begin
 | |
|         AItem := Items.Add;
 | |
|         AItem.Caption := 'New 1';
 | |
|         AItem.ImageIndex := 0;
 | |
|         AItem.StateIndex := 0;
 | |
|         AItem.SubItems.Add('Sub 1');
 | |
| 
 | |
|         AItem := Items.Add;
 | |
|         AItem.Caption := 'New 2';
 | |
|       end;
 | |
|     end;
 | |
|   finally
 | |
|     ListView1.EndUpdate;
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.CheckBox1Click(Sender: TObject);
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns[StrToIntDef(Edit2.Text, 0)];
 | |
|   Column.Visible := CheckBox1.Checked;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.CheckBox2Click(Sender: TObject);
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns[StrToIntDef(Edit2.Text, 0)];
 | |
|   Column.Autosize := CheckBox2.Checked;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.CheckBox3Click(Sender: TObject);
 | |
| begin
 | |
|   Listview1.Multiselect := CheckBox3.Checked;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.CheckBox4Click(Sender: TObject);
 | |
| begin
 | |
|   ListView1.RowSelect := CheckBox4.Checked;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.CheckBox5Click(Sender: TObject);
 | |
| begin
 | |
|   ListView1.ShowColumnHeaders := CheckBox5.Checked;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.CheckBox6Change(Sender: TObject);
 | |
| begin
 | |
|   ListView1.AutoWidthLastColumn := TCheckBox(Sender).Checked;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.CheckBox7Change(Sender: TObject);
 | |
| begin
 | |
|   ListView1.ReadOnly := TCheckBox(Sender).Checked;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ComboBox1Change (Sender: TObject );
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns[StrToIntDef(Edit2.Text, 0)];
 | |
|   Column.Alignment := TAlignment(ComboBox1.ItemIndex);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ComboBox2Change(Sender: TObject);
 | |
| begin
 | |
|   ListView1.Scrollbars := TScrollStyle(ComboBox2.ItemIndex);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ComboBox3Change(Sender: TObject);
 | |
| begin
 | |
|   ListView1.SortType := TSortType(ComboBox3.ItemIndex);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ComboBox4Change(Sender: TObject);
 | |
| begin
 | |
|   ListView1.ViewStyle := TViewStyle(ComboBox4.ItemIndex);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit10Change(Sender: TObject);
 | |
| var
 | |
|   Item: TListItem;
 | |
|   n, idx: Integer;
 | |
|   
 | |
| begin
 | |
|   idx := StrToIntDef(Edit1.Text, 0);
 | |
|   if (idx < 0) or (idx > ListView1.Items.Count - 1) then
 | |
|     exit;
 | |
|   Item := ListView1.Items[idx];
 | |
| 
 | |
|   for n := Item.SubItems.Count to ListView1.Columns.Count - 2 do
 | |
|     Item.Subitems.Add('');
 | |
| 
 | |
|   n := StrToIntDef(Edit5.Text, 0);
 | |
|   if n >= ListView1.Columns.Count then Exit;
 | |
|   idx := StrToIntDef(Edit10.Text, -1);
 | |
|   if n = 0 then
 | |
|     Item.ImageIndex := idx
 | |
|   else
 | |
|     Item.SubitemImages[n - 1] := idx;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit11Change(Sender: TObject);
 | |
| var
 | |
|   i: Integer;
 | |
| begin
 | |
|   i := 0;
 | |
|   if TryStrToInt(Edit11.Text, i) then
 | |
|     ListView1.SortColumn := i;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit1Change(Sender: TObject);
 | |
| begin
 | |
|   ShowItemData;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit2Change(Sender: TObject);
 | |
| begin
 | |
|   ShowColumnData;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit3Change(Sender: TObject);
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns[StrToIntDef(Edit2.Text, 0)];
 | |
|   Column.Caption := Edit3.Text;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit4Change(Sender: TObject);
 | |
| var
 | |
|   Item: TListItem;
 | |
|   n: Integer;
 | |
| begin
 | |
|   n := StrToIntDef(Edit1.Text, 0);
 | |
|   if (n < 0) or (n > ListView1.Items.Count - 1) then
 | |
|     exit;
 | |
|   Item := ListView1.Items[n];
 | |
|   for n := Item.SubItems.Count to ListView1.Columns.Count - 2 do
 | |
|     Item.Subitems.Add('');
 | |
|   n := StrToIntDef(Edit5.Text, 0);
 | |
|   if n >= ListView1.Columns.Count then Exit;
 | |
|   if n = 0
 | |
|   then Item.Caption := Edit4.Text
 | |
|   else Item.Subitems[n - 1] := Edit4.Text;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit5Change(Sender: TObject);
 | |
| begin
 | |
|   ShowItemData;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit6Change(Sender: TObject);
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns[StrToIntDef(Edit2.Text, 0)];
 | |
|   Column.Width := StrToIntDef(Edit6.Text, 0);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit7Change (Sender: TObject );
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns[StrToIntDef(Edit2.Text, 0)];
 | |
|   Column.MinWidth := StrToIntDef(Edit7.Text, 0);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.Edit8Change (Sender: TObject );
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns[StrToIntDef(Edit2.Text, 0)];
 | |
|   Column.MaxWidth := StrToIntDef(Edit8.Text, 0);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.HideSelectionChange(Sender: TObject);
 | |
| begin
 | |
|   Listview1.HideSelection := HideSelection.Checked;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
 | |
| begin
 | |
|   Edit2.Text := IntToStr(Column.Index);
 | |
|   Edit5.Text := IntToStr(Column.Index);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
 | |
| var
 | |
|   i: Integer;
 | |
| begin
 | |
|   if (ListView1.ColumnCount > 0) then
 | |
|   begin
 | |
|     Item.Caption := 'OwnerData item '+IntToStr(Item.Index);
 | |
|     Item.ImageIndex := -1;
 | |
|     Item.StateIndex := -1;
 | |
|     for i := 1 to ListView1.ColumnCount - 1 do
 | |
|       Item.SubItems.Add('OwnerData subitem ['+IntToStr(Item.Index)+','+IntToStr(i)+']');
 | |
| 
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
 | |
| var
 | |
|   subIdx: Integer;
 | |
| begin
 | |
|   if not Selected then Exit;
 | |
|   Edit1.Text := IntToStr(Item.Index);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.OwnerDataCountChange(Sender: TObject);
 | |
| begin
 | |
|   if not ListView1.OwnerData then
 | |
|     exit;
 | |
|   ListView1.BeginUpdate;
 | |
|   ListView1.Items.Count := TSpinEdit(Sender).Value;
 | |
|   ListView1.EndUpdate;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ShowItemData;
 | |
| var
 | |
|   Item: TListItem;
 | |
|   idx: Integer;
 | |
| begin
 | |
|   idx := StrToIntDef(Edit1.Text, 0);
 | |
|   if (idx < 0) or (idx > ListView1.Items.Count - 1) then
 | |
|     exit;
 | |
|   Item := ListView1.Items[idx];
 | |
| 
 | |
|   idx := StrToIntDef(Edit5.Text, 0);
 | |
|   if idx = 0
 | |
|   then begin
 | |
|     Edit4.Text := Item.Caption;
 | |
|     Edit10.Text := IntToStr(Item.ImageIndex);
 | |
| 
 | |
|     Exit;
 | |
|   end;
 | |
|   if Item.SubItems.Count <= idx - 1 then Exit;
 | |
| 
 | |
|   Edit4.Text := Item.SubItems[idx - 1];
 | |
|   Edit10.Text := IntToStr(Item.SubItemImages[idx - 1]);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.ShowColumnData;
 | |
| var
 | |
|   Column: TListColumn;
 | |
| begin
 | |
|   Column := ListView1.Columns[StrToIntDef(Edit2.Text, 0)];
 | |
| 
 | |
|   Edit3.Text := Column.Caption;
 | |
|   Edit6.Text := IntToStr(Column.Width);
 | |
|   Edit7.Text := IntToStr(Column.MinWidth);
 | |
|   Edit8.Text := IntToStr(Column.MaxWidth);
 | |
|   Edit9.Text := IntToStr(Column.Imageindex);
 | |
|   ComboBox1.ItemIndex := Ord(Column.Alignment);
 | |
|   CheckBox1.Checked := Column.Visible;
 | |
|   CheckBox2.Checked := Column.AutoSize;
 | |
| end;
 | |
| 
 | |
| end.
 | |
| 
 | 
