unit main; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Spin, ComCtrls, ExButtons; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; cbBorderColorDisabled: TColorButton; clbFontColorDisabled: TColorButton; clbFontColorDown: TColorButton; clbFontColorFocused: TColorButton; clbFontColorHot: TColorButton; clbFontColorNormal: TColorButton; cbColorDownFrom: TColorButton; cbBorderColorDown: TColorButton; cbColorDownTo: TColorButton; cbBorderColorFocused: TColorButton; cbBorderColorHot: TColorButton; cbBorderColorNormal: TColorButton; cbColorNormalFrom: TColorButton; cbColorNormalTo: TColorButton; cbColorHotFrom: TColorButton; cbColorHotTo: TColorButton; cbColorDisabledFrom: TColorButton; cbColorDisabledTo: TColorButton; cbColorFocusedFrom: TColorButton; cbColorFocusedTo: TColorButton; cbEnabled: TCheckBox; cbGradient: TCheckBox; cbShowFocusRect: TCheckBox; cbAutoSize: TCheckBox; cbFontNormalBold: TCheckBox; cbFontHotBold: TCheckBox; cbFontDisabledBold: TCheckBox; cbFontFocusedBold: TCheckBox; cbFontDownBold: TCheckBox; cbDefaultDrawing: TCheckBox; cbWordWrap: TCheckBox; cmbAlignment: TComboBox; GroupBox1: TGroupBox; Label1: TLabel; lblAlignment: TLabel; Label11: TLabel; Label12: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Memo1: TMemo; seBorderWidthNormal: TSpinEdit; seBorderWidthHot: TSpinEdit; seBorderWidthDisabled: TSpinEdit; seBorderWidthFocused: TSpinEdit; seBorderWidthDown: TSpinEdit; SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; udFontSizeNormal: TUpDown; procedure Button2Click(Sender: TObject); procedure ButtonClick(Sender: TObject); procedure cbAutoSizeChange(Sender: TObject); procedure cbColorDisabledFromToChanged(Sender: TObject); procedure cbColorDownFromToChanged(Sender: TObject); procedure cbColorFocusedFromToChanged(Sender: TObject); procedure cbColorHotFromToChanged(Sender: TObject); procedure cbColorNormalFromToChanged(Sender: TObject); procedure cbEnabledChange(Sender: TObject); procedure cbGradientChange(Sender: TObject); procedure cbShowFocusRectChange(Sender: TObject); procedure cbFontBoldChange(Sender: TObject); procedure cbDefaultDrawingChange(Sender: TObject); procedure cbWordWrapChange(Sender: TObject); procedure cmbAlignmentChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure seBorderWidthDisabledChange(Sender: TObject); procedure seBorderWidthDownChange(Sender: TObject); procedure seBorderWidthFocusedChange(Sender: TObject); procedure seBorderWidthHotChange(Sender: TObject); procedure seBorderWidthNormalChange(Sender: TObject); procedure SpinEdit1Change(Sender: TObject); procedure SpinEdit1EditingDone(Sender: TObject); procedure SpinEdit2Change(Sender: TObject); procedure SpinEdit2EditingDone(Sender: TObject); procedure udFontSizeNormalClick(Sender: TObject; Button: TUDBtnType); private FButton1: TButtonEx; public end; var Form1: TForm1; implementation {$R *.lfm} uses Unit2; { TForm1 } procedure TForm1.Button2Click(Sender: TObject); var F: TForm2; res: TModalResult; begin F := TForm2.Create(nil); try res := F.ShowModal; case res of mrOK: ShowMessage('ModalResult = mrOK'); mrCancel: ShowMessage('ModalResult = mrCancel'); mrNone: ShowMessage('ModalResult = mrNone'); else ShowMessage('unexpected ModalResult'); end; finally F.Free; end; end; procedure TForm1.ButtonClick(Sender: TObject); var s: String; begin if Sender = FButton1 then s := 'Ex ' else s := ' '; Memo1.Lines.Add(s + FormatDateTime('hh:nn:ss.zzz', now)) end; procedure TForm1.cbAutoSizeChange(Sender: TObject); begin //FButton1.Width := 100; //Button1.Width := 100; FButton1.AutoSize := cbAutoSize.Checked; Button1.AutoSize := cbAutoSize.Checked; end; procedure TForm1.cbColorDisabledFromToChanged(Sender: TObject); var colorBtn: TColorButton; begin if not (Sender is TColorButton) then exit; colorBtn := TColorButton(Sender); if colorBtn.Caption = 'From' then FButton1.Colors.ColorDisabledFrom := colorBtn.ButtonColor else if colorBtn.Caption = 'To' then FButton1.Colors.ColorDisabledTo := colorBtn.ButtonColor else if colorBtn.Caption = 'Color' then FButton1.Border.ColorDisabled := colorBtn.ButtonColor else if colorBtn.Caption = 'Font' then FButton1.FontDisabled.Color := colorBtn.ButtonColor; end; procedure TForm1.cbColorDownFromToChanged(Sender: TObject); var colorBtn: TColorButton; begin if not (Sender is TColorButton) then exit; colorBtn := TColorButton(Sender); if colorBtn.Caption = 'From' then FButton1.Colors.ColorDownFrom := colorBtn.ButtonColor else if colorBtn.Caption = 'To' then FButton1.Colors.ColorDownTo := colorBtn.ButtonColor else if colorBtn.Caption = 'Color' then FButton1.Border.ColorDown := colorBtn.ButtonColor else if colorBtn.Caption = 'Font' then FButton1.FontDown.Color := colorBtn.ButtonColor; end; procedure TForm1.cbColorFocusedFromToChanged(Sender: TObject); var colorBtn: TColorButton; begin if not (Sender is TColorButton) then exit; colorBtn := TColorButton(Sender); if colorBtn.Caption = 'From' then FButton1.Colors.ColorFocusedFrom := colorBtn.ButtonColor else if colorBtn.Caption = 'To' then FButton1.Colors.ColorFocusedTo := colorBtn.ButtonColor else if colorBtn.Caption = 'Color' then FButton1.Border.ColorFocused := colorBtn.ButtonColor else if colorBtn.Caption = 'Font' then FButton1.FontFocused.Color := colorBtn.ButtonColor; end; procedure TForm1.cbColorHotFromToChanged(Sender: TObject); var colorBtn: TColorButton; begin if not (Sender is TColorButton) then exit; colorBtn := TColorButton(Sender); if colorBtn.Caption = 'From' then FButton1.Colors.ColorHotFrom := colorBtn.ButtonColor else if colorBtn.Caption = 'To' then FButton1.Colors.ColorHotTo := colorBtn.ButtonColor else if colorBtn.Caption = 'Color' then FButton1.Border.ColorHot := colorBtn.ButtonColor else if colorBtn.Caption = 'Font' then FButton1.FontHot.Color := colorBtn.ButtonColor; end; procedure TForm1.cbColorNormalFromToChanged(Sender: TObject); var colorBtn: TColorButton; begin if not (Sender is TColorButton) then exit; colorBtn := TColorButton(Sender); if colorBtn.Caption = 'From' then FButton1.Colors.ColorNormalFrom := colorBtn.ButtonColor else if colorBtn.Caption = 'To' then FButton1.Colors.ColorNormalTo := colorBtn.ButtonColor else if colorBtn.Caption = 'Color' then FButton1.Border.ColorNormal := colorBtn.ButtonColor else if colorBtn.Caption = 'Font' then FButton1.Font.Color := colorBtn.ButtonColor; end; procedure TForm1.cbEnabledChange(Sender: TObject); begin FButton1.Enabled := cbEnabled.Checked; Button1.Enabled := cbEnabled.Checked; end; procedure TForm1.cbGradientChange(Sender: TObject); begin FButton1.Gradient := cbGradient.Checked; end; procedure TForm1.cbShowFocusRectChange(Sender: TObject); begin FButton1.ShowFocusRect := cbShowFocusRect.Checked; end; procedure TForm1.cbWordWrapChange(Sender: TObject); begin FButton1.WordWrap := cbWordwrap.Checked; end; procedure TForm1.cbDefaultDrawingChange(Sender: TObject); begin FButton1.DefaultDrawing := cbDefaultDrawing.Checked; end; procedure TForm1.cmbAlignmentChange(Sender: TObject); begin Fbutton1.Alignment := TAlignment(cmbAlignment.ItemIndex); end; procedure TForm1.cbFontBoldChange(Sender: TObject); var fnt: TFont; begin if Sender = cbFontNormalBold then fnt := FButton1.Font else if Sender = cbFontHotBold then fnt := FButton1.FontHot else if Sender = cbFontDisabledBold then fnt := FButton1.FontDisabled else if Sender = cbFontFocusedBold then fnt := FButton1.FontFocused else if Sender = cbFontDownBold then fnt := FButton1.FontDown else raise Exception.Create('Unknown font'); if TCheckbox(Sender).Checked then fnt.Style := fnt.Style + [fsBold] else fnt.Style := fnt.Style - [fsBold]; end; procedure TForm1.FormCreate(Sender: TObject); begin FButton1 := TButtonEx.Create(self); FButton1.Parent := self; FButton1.Left := 10; Fbutton1.Top := 12; FButton1.Width := 250; FButton1.Caption := 'This is the new multi-line TButtonEx control'; FButton1.OnClick := @ButtonClick; //FButton1.DoubleBuffered := true; cbColorNormalFrom.ButtonColor := FButton1.Colors.ColorNormalFrom; cbColorNormalTo.ButtonColor := FButton1.Colors.ColorNormalTo; cbColorHotFrom.ButtonColor := FButton1.Colors.ColorHotFrom; cbColorHotTo.ButtonColor := FButton1.Colors.ColorHotTo; cbColorDisabledFrom.ButtonColor := FButton1.Colors.ColorDisabledFrom; cbColorDisabledTo.ButtonColor := FButton1.Colors.ColorDisabledTo; cbColorFocusedFrom.ButtonColor := FButton1.Colors.ColorFocusedFrom; cbColorFocusedTo.ButtonColor := FButton1.Colors.ColorFocusedTo; cbColorDownFrom.ButtonColor := FButton1.Colors.ColorDownFrom; cbColorDownTo.ButtonColor := FButton1.Colors.ColorDownTo; cbBorderColorNormal.ButtonColor := FButton1.Border.ColorNormal; cbBorderColorHot.ButtonColor := FButton1.Border.ColorHot; cbBorderColorDisabled.ButtonColor := FButton1.Border.ColorDisabled; cbBorderColorFocused.ButtonColor := FButton1.Border.ColorFocused; cbBorderColorDown.ButtonColor := FButton1.Border.ColorDown; clbFontColorNormal.ButtonColor := ColorToRGB(FButton1.Font.Color); clbFontColorDisabled.ButtonColor := ColorToRGB(FButton1.FontDisabled.Color); clbFontColorHot.ButtonColor := ColorToRGB(FButton1.FontHot.Color); clbFontColorFocused.ButtonColor := ColorToRGB(FButton1.FontFocused.Color); clbFontColorDown.ButtonColor := ColorToRGB(FButton1.FontDown.Color); udFontSizeNormal.Position := Screen.SystemFont.Size; seBorderWidthNormal.Value := FButton1.Border.WidthNormal; seBorderWidthHot.Value := FButton1.Border.WidthHot; seBorderWidthDisabled.Value := FButton1.Border.WidthDisabled; seBorderWidthFocused.Value := FButton1.Border.WidthFocused; seBorderWidthDown.Value := FButton1.Border.WidthDown; ActiveControl := FButton1; end; procedure TForm1.FormShow(Sender: TObject); begin SpinEdit1.Value := FButton1.Width; SpinEdit2.Value := FButton1.Height; end; procedure TForm1.seBorderWidthDisabledChange(Sender: TObject); begin FButton1.Border.WidthDisabled := seBorderWidthDisabled.Value; end; procedure TForm1.seBorderWidthDownChange(Sender: TObject); begin FButton1.Border.WidthDown := seBorderWidthDown.Value; end; procedure TForm1.seBorderWidthFocusedChange(Sender: TObject); begin FButton1.Border.WidthFocused := seBorderWidthFocused.Value; end; procedure TForm1.seBorderWidthHotChange(Sender: TObject); begin FButton1.Border.WidthHot := seBorderWidthHot.Value; end; procedure TForm1.seBorderWidthNormalChange(Sender: TObject); begin FButton1.Border.WidthNormal := seBorderWidthNormal.Value; end; procedure TForm1.SpinEdit1Change(Sender: TObject); begin FButton1.Width := SpinEdit1.Value; end; procedure TForm1.SpinEdit1EditingDone(Sender: TObject); begin FButton1.Width := SpinEdit1.Value; end; procedure TForm1.SpinEdit2Change(Sender: TObject); begin FButton1.Height := SpinEdit2.Value; end; procedure TForm1.SpinEdit2EditingDone(Sender: TObject); begin FButton1.Height := SpinEdit2.Value; end; procedure TForm1.udFontSizeNormalClick(Sender: TObject; Button: TUDBtnType); begin FButton1.Font.Size := udFontSizeNormal.Position; end; end.