mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-19 09:29:43 +02: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.
|
|
|