unit MainUnit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Fresnel.Forms, Fresnel.DOM, Fresnel.Controls, Fresnel.Events, FCL.Events, Fresnel.Classes, Fresnel.DemoRadioButton, Fresnel.DemoSlider; type { TMainForm } TMainForm = class(TFresnelForm) procedure MainFormCreate(Sender: TObject); private procedure OnAntAlignClick(Event: TAbstractEvent); procedure OnAntHeightChanged(Sender: TObject); procedure OnBirdAlignClick(Event: TAbstractEvent); procedure OnBirdHeightChanged(Sender: TObject); public OptionsDiv: TDiv; AntDiv: TDiv; AntCaption: TLabel; AntNone: TDemoRadioButton; AntLeft: TDemoRadioButton; AntRight: TDemoRadioButton; AntHeightSlider: TDemoSlider; BirdDiv: TDiv; BirdCaption: TLabel; BirdNone: TDemoRadioButton; BirdLeft: TDemoRadioButton; BirdRight: TDemoRadioButton; BirdHeightSlider: TDemoSlider; TextDiv: TDiv; Label1, BirdLabel, Label3, AntLabel, Label5, Label6, Label7, Label8, Label9: TLabel; end; var MainForm: TMainForm; implementation {$R *.lfm} { TMainForm } procedure TMainForm.MainFormCreate(Sender: TObject); function AddDiv(aName: string; aParent: TFresnelElement): TDiv; begin Result:=TDiv.Create(Self); Result.Name:=aName; Result.Parent:=aParent; end; function AddLabel(aName, aCaption: string; aParent: TFresnelElement): TLabel; begin Result:=TLabel.Create(Self); Result.Name:=aName; Result.Caption:=aCaption; Result.Parent:=aParent; end; function AddRadioButton(aName, aCaption: string; aParent: TFresnelElement; const OnClick: TFresnelEventHandler = nil): TDemoRadioButton; begin Result:=TDemoRadioButton.Create(Self); Result.Name:=aName; Result.Caption:=aCaption; Result.Parent:=aParent; Result.AddEventListener(evtClick,OnClick); end; function AddSlider(aName, aCaption: string; aParent: TFresnelElement; MinPos, MaxPos, CurPos: TFresnelLength; ValueFormat: string; const OnChange: TNotifyEvent): TDemoSlider; begin Result:=TDemoSlider.Create(Self); Result.Name:=aName; Result.Caption:=aCaption; Result.OnChange:=OnChange; Result.MinPosition:=MinPos; Result.MaxPosition:=MaxPos; Result.SliderPosition:=CurPos; Result.ValueFormat:=ValueFormat; Result.Parent:=aParent; end; begin Style:='font-size: 15px;'; Stylesheet.Text:=':root { font-size: 15px; }'+LineEnding +'#TextDiv>label { margin: 0 3px; border: 1px solid blue; }'+LineEnding; OptionsDiv:=AddDiv('OptionsDiv',Viewport); OptionsDiv.Style:='padding: 6px; border: 1px solid black; margin: 6px; width: 100px;'; AntDiv:=AddDiv('AntDiv',OptionsDiv); AntCaption:=AddLabel('AntCaption','Ant',AntDiv); AntNone:=AddRadioButton('AntNone','none',AntDiv,@OnAntAlignClick); AntLeft:=AddRadioButton('AntLeft','left',AntDiv,@OnAntAlignClick); AntRight:=AddRadioButton('AntRight','right',AntDiv,@OnAntAlignClick); AntHeightSlider:=AddSlider('AntHeightSlider','height',AntDiv, 0.5,5,2,'%fem',@OnAntHeightChanged); BirdDiv:=AddDiv('BirdDiv',OptionsDiv); BirdDiv.Style:='margin-top: 6px;'; BirdCaption:=AddLabel('BirdCaption','Bird',BirdDiv); BirdNone:=AddRadioButton('BirdNone','none',BirdDiv,@OnBirdAlignClick); BirdLeft:=AddRadioButton('BirdLeft','left',BirdDiv,@OnBirdAlignClick); BirdRight:=AddRadioButton('BirdRight','right',BirdDiv,@OnBirdAlignClick); BirdHeightSlider:=AddSlider('BirdHeightSlider','height',BirdDiv, 0.5,5,2,'%fem',@OnBirdHeightChanged); TextDiv:=AddDiv('TextDiv',Self); TextDiv.Style:='position: absolute; left: 126px; top: 6px; right: 6px;' +' border: 1px solid black; padding: 3px;'; Label1:=AddLabel('Label1','Label1',TextDiv); AntLabel:=AddLabel('AntLabel','Ant',TextDiv); AntLabel.Style:='background: #ccc;'; Label3:=AddLabel('Label3','Label3',TextDiv); BirdLabel:=AddLabel('BirdLabel','Bird',TextDiv); BirdLabel.Style:='background: #ccc;'; Label5:=AddLabel('Label5','Label5',TextDiv); Label6:=AddLabel('Label6','LabelNo6',TextDiv); Label7:=AddLabel('Label7','LabelNo7',TextDiv); Label8:=AddLabel('Label8','Lbl8',TextDiv); Label9:=AddLabel('Label9','LabelNo9',TextDiv); OnBirdHeightChanged(Self); OnAntHeightChanged(Self); end; procedure TMainForm.OnAntAlignClick(Event: TAbstractEvent); begin if Event.Sender=AntLeft then AntLabel.SetStyleAttr('float','left') else if Event.Sender=AntRight then AntLabel.SetStyleAttr('float','right') else AntLabel.SetStyleAttr('float','none'); end; procedure TMainForm.OnAntHeightChanged(Sender: TObject); begin if (AntLabel=nil) or (AntHeightSlider=nil) then exit; AntLabel.SetStyleAttr('height',FloatToCSSStr(AntHeightSlider.SliderPosition)+'em'); end; procedure TMainForm.OnBirdAlignClick(Event: TAbstractEvent); begin if Event.Sender=BirdLeft then BirdLabel.SetStyleAttr('float','left') else if Event.Sender=BirdRight then BirdLabel.SetStyleAttr('float','right') else BirdLabel.SetStyleAttr('float','none'); end; procedure TMainForm.OnBirdHeightChanged(Sender: TObject); begin if (BirdLabel=nil) or (BirdHeightSlider=nil) then exit; BirdLabel.SetStyleAttr('height',FloatToCSSStr(BirdHeightSlider.SliderPosition)+'em'); end; end.