File: mainunit.pas

package info (click to toggle)
lazarus 2.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 214,460 kB
  • sloc: pascal: 1,862,622; xml: 265,709; cpp: 56,595; sh: 3,008; java: 609; makefile: 535; perl: 297; sql: 222; ansic: 137
file content (111 lines) | stat: -rw-r--r-- 3,526 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
{ Copyright (C) 2005 Mattias Gaertner

  This source is free software; you can redistribute it and/or modifyit under
  the terms of the GNU General Public License as published bythe Free Software
  Foundation; either version 2 of the License, or(at your option) any later
  version.

  This code is distributed in the hope that it will be useful, butWITHOUT ANY
  WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR
  A PARTICULAR PURPOSE.  See the GNUGeneral Public License for more details.

  A copy of the GNU General Public License is available on the WorldWide Web
  at <http://www.gnu.org/copyleft/gpl.html>. You can alsoobtain it by writing
  to the Free Software Foundation,Inc., 51 Franklin Street - Fifth Floor,
  Boston, MA 02110-1335, USA.

  ---------------------------------------------------------------------------
  Abstract:
    Demonstrates LCL TWinControl.ChildSizing.Layout property.
}
unit MainUnit;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons, RTTICtrls, ExtCtrls, RTTIGrids;

type

  { TChildsizingLayoutDemoForm }

  TChildsizingLayoutDemoForm = class(TForm)
    ChildSizingGroupBox: TGroupBox;
    LayoutGroupBox: TGroupBox;
    LayoutLabel: TLabel;
    LayoutTIRadioGroup: TTIRadioGroup;
    ButtonCountRadioGroup: TRadioGroup;
    ControlsPerLineTIRadioGroup: TTIRadioGroup;
    ChildSizingTIPropertyGrid: TTIPropertyGrid;
    procedure ButtonCountRadioGroupClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
  public
    procedure SetButtonCount(NewCount: integer);
  end;

var
  ChildsizingLayoutDemoForm: TChildsizingLayoutDemoForm;

implementation

{$R *.lfm}

{ TChildsizingLayoutDemoForm }

procedure TChildsizingLayoutDemoForm.FormCreate(Sender: TObject);
begin
  LayoutTIRadioGroup.Link.SetObjectAndProperty(LayoutGroupBox.ChildSizing,'Layout');
  ControlsPerLineTIRadioGroup.Link.SetObjectAndProperty(LayoutGroupBox.ChildSizing,'ControlsPerLine');
  ChildSizingTIPropertyGrid.TIObject:=LayoutGroupBox.ChildSizing;

  SetButtonCount(3);
end;

procedure TChildsizingLayoutDemoForm.SetButtonCount(NewCount: integer);
var
  i: Integer;
  x: Integer;
begin
  if NewCount=LayoutGroupBox.ControlCount then exit;
  if ButtonCountRadioGroup.Items.IndexOf(IntToStr(NewCount))<0 then
    NewCount:=StrToIntDef(ButtonCountRadioGroup.Items[2],3);

  LayoutGroupBox.DisableAlign;
  // create buttons
  for i:=0 to NewCount-1 do begin
    if LayoutGroupBox.ControlCount=i then begin
      with TButton.Create(Self) do begin
        if LayoutGroupBox.ChildSizing.Layout=cclNone then begin
          x:=i*20;
          SetBounds(x,x,Width,Height);
        end;
        Name:='Button'+IntToStr(i);
        Parent:=LayoutGroupBox;
      end;
    end;
    // set a caption of various length
    LayoutGroupBox.Controls[i].Caption:=
                            copy(LayoutGroupBox.Controls[i].Name,1,(i mod 5)+3);
  end;
  // free unneeded buttons
  while LayoutGroupBox.ControlCount>NewCount do
    LayoutGroupBox.Controls[LayoutGroupBox.ControlCount-1].Free;
  LayoutGroupBox.EnableAlign;

  // make sure ButtonCountRadioGroup shows the correct count
  ButtonCountRadioGroup.ItemIndex:=
                        ButtonCountRadioGroup.Items.IndexOf(IntToStr(NewCount));
end;

procedure TChildsizingLayoutDemoForm.ButtonCountRadioGroupClick(Sender: TObject);
begin
  SetButtonCount(StrToIntDef(
               ButtonCountRadioGroup.Items[ButtonCountRadioGroup.ItemIndex],3));
end;

end.