MainUnit.pas 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. unit MainUnit;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, Fresnel.Forms, Fresnel.DOM, Fresnel.Controls, Fresnel.Events, FCL.Events,
  6. Fresnel.Classes, Fresnel.DemoRadioButton, Fresnel.DemoSlider;
  7. type
  8. { TMainForm }
  9. TMainForm = class(TFresnelForm)
  10. procedure MainFormCreate(Sender: TObject);
  11. private
  12. procedure OnAntAlignClick(Event: TAbstractEvent);
  13. procedure OnAntHeightChanged(Sender: TObject);
  14. procedure OnBirdAlignClick(Event: TAbstractEvent);
  15. procedure OnBirdHeightChanged(Sender: TObject);
  16. public
  17. OptionsDiv: TDiv;
  18. AntDiv: TDiv;
  19. AntCaption: TLabel;
  20. AntNone: TDemoRadioButton;
  21. AntLeft: TDemoRadioButton;
  22. AntRight: TDemoRadioButton;
  23. AntHeightSlider: TDemoSlider;
  24. BirdDiv: TDiv;
  25. BirdCaption: TLabel;
  26. BirdNone: TDemoRadioButton;
  27. BirdLeft: TDemoRadioButton;
  28. BirdRight: TDemoRadioButton;
  29. BirdHeightSlider: TDemoSlider;
  30. TextDiv: TDiv;
  31. Label1, BirdLabel, Label3, AntLabel, Label5, Label6, Label7, Label8, Label9: TLabel;
  32. end;
  33. var
  34. MainForm: TMainForm;
  35. implementation
  36. {$R *.lfm}
  37. { TMainForm }
  38. procedure TMainForm.MainFormCreate(Sender: TObject);
  39. function AddDiv(aName: string; aParent: TFresnelElement): TDiv;
  40. begin
  41. Result:=TDiv.Create(Self);
  42. Result.Name:=aName;
  43. Result.Parent:=aParent;
  44. end;
  45. function AddLabel(aName, aCaption: string; aParent: TFresnelElement): TLabel;
  46. begin
  47. Result:=TLabel.Create(Self);
  48. Result.Name:=aName;
  49. Result.Caption:=aCaption;
  50. Result.Parent:=aParent;
  51. end;
  52. function AddRadioButton(aName, aCaption: string; aParent: TFresnelElement;
  53. const OnClick: TFresnelEventHandler = nil): TDemoRadioButton;
  54. begin
  55. Result:=TDemoRadioButton.Create(Self);
  56. Result.Name:=aName;
  57. Result.Caption:=aCaption;
  58. Result.Parent:=aParent;
  59. Result.AddEventListener(evtClick,OnClick);
  60. end;
  61. function AddSlider(aName, aCaption: string; aParent: TFresnelElement;
  62. MinPos, MaxPos, CurPos: TFresnelLength; ValueFormat: string;
  63. const OnChange: TNotifyEvent): TDemoSlider;
  64. begin
  65. Result:=TDemoSlider.Create(Self);
  66. Result.Name:=aName;
  67. Result.Caption:=aCaption;
  68. Result.OnChange:=OnChange;
  69. Result.MinPosition:=MinPos;
  70. Result.MaxPosition:=MaxPos;
  71. Result.SliderPosition:=CurPos;
  72. Result.ValueFormat:=ValueFormat;
  73. Result.Parent:=aParent;
  74. end;
  75. begin
  76. Style:='font-size: 15px;';
  77. Stylesheet.Text:=':root { font-size: 15px; }'+LineEnding
  78. +'#TextDiv>label { margin: 0 3px; border: 1px solid blue; }'+LineEnding;
  79. OptionsDiv:=AddDiv('OptionsDiv',Viewport);
  80. OptionsDiv.Style:='padding: 6px; border: 1px solid black; margin: 6px; width: 100px;';
  81. AntDiv:=AddDiv('AntDiv',OptionsDiv);
  82. AntCaption:=AddLabel('AntCaption','Ant',AntDiv);
  83. AntNone:=AddRadioButton('AntNone','none',AntDiv,@OnAntAlignClick);
  84. AntLeft:=AddRadioButton('AntLeft','left',AntDiv,@OnAntAlignClick);
  85. AntRight:=AddRadioButton('AntRight','right',AntDiv,@OnAntAlignClick);
  86. AntHeightSlider:=AddSlider('AntHeightSlider','height',AntDiv,
  87. 0.5,5,2,'%fem',@OnAntHeightChanged);
  88. BirdDiv:=AddDiv('BirdDiv',OptionsDiv);
  89. BirdDiv.Style:='margin-top: 6px;';
  90. BirdCaption:=AddLabel('BirdCaption','Bird',BirdDiv);
  91. BirdNone:=AddRadioButton('BirdNone','none',BirdDiv,@OnBirdAlignClick);
  92. BirdLeft:=AddRadioButton('BirdLeft','left',BirdDiv,@OnBirdAlignClick);
  93. BirdRight:=AddRadioButton('BirdRight','right',BirdDiv,@OnBirdAlignClick);
  94. BirdHeightSlider:=AddSlider('BirdHeightSlider','height',BirdDiv,
  95. 0.5,5,2,'%fem',@OnBirdHeightChanged);
  96. TextDiv:=AddDiv('TextDiv',Self);
  97. TextDiv.Style:='position: absolute; left: 126px; top: 6px; right: 6px;'
  98. +' border: 1px solid black; padding: 3px;';
  99. Label1:=AddLabel('Label1','Label1',TextDiv);
  100. AntLabel:=AddLabel('AntLabel','Ant',TextDiv);
  101. AntLabel.Style:='background: #ccc;';
  102. Label3:=AddLabel('Label3','Label3',TextDiv);
  103. BirdLabel:=AddLabel('BirdLabel','Bird',TextDiv);
  104. BirdLabel.Style:='background: #ccc;';
  105. Label5:=AddLabel('Label5','Label5',TextDiv);
  106. Label6:=AddLabel('Label6','LabelNo6',TextDiv);
  107. Label7:=AddLabel('Label7','LabelNo7',TextDiv);
  108. Label8:=AddLabel('Label8','Lbl8',TextDiv);
  109. Label9:=AddLabel('Label9','LabelNo9',TextDiv);
  110. OnBirdHeightChanged(Self);
  111. OnAntHeightChanged(Self);
  112. end;
  113. procedure TMainForm.OnAntAlignClick(Event: TAbstractEvent);
  114. begin
  115. if Event.Sender=AntLeft then
  116. AntLabel.SetStyleAttr('float','left')
  117. else if Event.Sender=AntRight then
  118. AntLabel.SetStyleAttr('float','right')
  119. else
  120. AntLabel.SetStyleAttr('float','none');
  121. end;
  122. procedure TMainForm.OnAntHeightChanged(Sender: TObject);
  123. begin
  124. if (AntLabel=nil) or (AntHeightSlider=nil) then exit;
  125. AntLabel.SetStyleAttr('height',FloatToCSSStr(AntHeightSlider.SliderPosition)+'em');
  126. end;
  127. procedure TMainForm.OnBirdAlignClick(Event: TAbstractEvent);
  128. begin
  129. if Event.Sender=BirdLeft then
  130. BirdLabel.SetStyleAttr('float','left')
  131. else if Event.Sender=BirdRight then
  132. BirdLabel.SetStyleAttr('float','right')
  133. else
  134. BirdLabel.SetStyleAttr('float','none');
  135. end;
  136. procedure TMainForm.OnBirdHeightChanged(Sender: TObject);
  137. begin
  138. if (BirdLabel=nil) or (BirdHeightSlider=nil) then exit;
  139. BirdLabel.SetStyleAttr('height',FloatToCSSStr(BirdHeightSlider.SliderPosition)+'em');
  140. end;
  141. end.