/examples/taborder.pas

http://github.com/graemeg/lazarus · Pascal · 156 lines · 125 code · 26 blank · 5 comment · 4 complexity · 546259299c122826b87d911b2738e2a7 MD5 · raw file

  1. program TabOrder;
  2. {$mode objfpc}{$H+}
  3. uses
  4. Interfaces, Classes, SysUtils, Forms, Controls, Buttons, StdCtrls, ExtCtrls,
  5. ComCtrls;
  6. type
  7. { TForm1 }
  8. TForm1 = class(TForm)
  9. PageCtrl: TPageControl;
  10. CloseButton: TButton;
  11. Edit1: TEdit;
  12. Edit2: TEdit;
  13. Label1: TLabel;
  14. public
  15. constructor Create(TheOwner: TComponent); override;
  16. procedure CloseButtonClick(Sender: TObject);
  17. procedure WriteTabOrder;
  18. end;
  19. { TForm1 }
  20. constructor TForm1.Create(TheOwner: TComponent);
  21. procedure CreatePage1;
  22. begin
  23. Label1:=TLabel.Create(Self);
  24. with Label1 do begin
  25. Name:='Label1';
  26. Parent:=PageCtrl.Page[0];
  27. SetBounds(10,10,250,Height);
  28. Caption:='TabOrder: First Edit below, then Edit above';
  29. end;
  30. Edit1:=TEdit.Create(Self);
  31. with Edit1 do begin
  32. Name:='Edit1';
  33. Parent:=PageCtrl.Page[0];
  34. SetBounds(10,40,100,Height);
  35. end;
  36. Edit2:=TEdit.Create(Self);
  37. with Edit2 do begin
  38. Name:='Edit2';
  39. Parent:=PageCtrl.Page[0];
  40. SetBounds(10,70,100,Height);
  41. end;
  42. // define Taborder
  43. Edit2.TabStop:=true;
  44. Edit2.TabOrder:=0;
  45. Edit1.TabStop:=true;
  46. Edit1.TabOrder:=1;
  47. end;
  48. procedure CreatePage2;
  49. begin
  50. end;
  51. procedure CreatePage3;
  52. begin
  53. end;
  54. var
  55. i: integer;
  56. begin
  57. inherited CreateNew(TheOwner, 1);
  58. Name:='Form1';
  59. Position:=poScreenCenter;
  60. SetInitialBounds(0,0,400,300);
  61. PageCtrl:=TPageControl.Create(Self);
  62. with PageCtrl do begin
  63. Name:='PageCtrl';
  64. Parent:=Self;
  65. Align:=alTop;
  66. Height:=Parent.ClientHeight-40;
  67. for i:=1 to 3 do
  68. with TTabSheet.Create(PageCtrl) do
  69. begin
  70. PageControl:=PageCtrl;
  71. Name:='Page'+IntToStr(i);
  72. Caption:=Name;
  73. end;
  74. Anchors:=[akLeft,akTop,akRight,akBottom];
  75. PageIndex:=0;
  76. end;
  77. CloseButton:=TButton.Create(Self);
  78. with CloseButton do begin
  79. Name:='CloseButton';
  80. Parent:=Self;
  81. Caption:='Close';
  82. Anchors:=[akRight,akBottom];
  83. SetBounds(Parent.ClientWidth-110,Parent.ClientHeight-35,100,Height);
  84. OnClick:=@CloseButtonClick;
  85. end;
  86. CreatePage1;
  87. CreatePage2;
  88. CreatePage3;
  89. // define TabOrder
  90. CloseButton.TabStop:=true;
  91. CloseButton.TabOrder:=0;
  92. PageCtrl.TabStop:=true;
  93. PageCtrl.TabOrder:=1;
  94. PageCtrl.Page[0].TabStop:=true;
  95. PageCtrl.Page[0].TabOrder:=2;
  96. PageCtrl.Page[1].TabStop:=true;
  97. PageCtrl.Page[1].TabOrder:=3;
  98. PageCtrl.Page[2].TabStop:=true;
  99. PageCtrl.Page[2].TabOrder:=4;
  100. WriteTabOrder;
  101. end;
  102. procedure TForm1.CloseButtonClick(Sender: TObject);
  103. begin
  104. Close;
  105. end;
  106. procedure TForm1.WriteTabOrder;
  107. procedure WriteTabOrderTree(const Prefix: string; AControl: TControl);
  108. var
  109. i: Integer;
  110. begin
  111. write(Prefix,AControl.Name);
  112. if AControl is TWinControl then
  113. write(' TabOrder=',TWinControl(AControl).TabOrder,
  114. ' TabStop=',TWinControl(AControl).TabStop);
  115. writeln('');
  116. if AControl is TWinControl then
  117. for i:=0 to TWinControl(AControl).ControlCount-1 do begin
  118. WriteTabOrderTree(Prefix+' ',TWinControl(AControl).Controls[i]);
  119. end;
  120. end;
  121. begin
  122. WriteTabOrderTree('',Self);
  123. end;
  124. var
  125. Form1: TForm1;
  126. begin
  127. Application.Initialize;
  128. Application.CreateForm(TForm1,Form1);
  129. Application.Run;
  130. end.