unit umain; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, BCComboBox, BCListBox, LCLType, BCSamples, BGRAThemeRadioButton, BGRAColorTheme, Types; type { TForm1 } TForm1 = class(TForm) BCComboBox1: TBCComboBox; BGRAColorTheme1: TBGRAColorTheme; Label1: TLabel; Label2: TLabel; RadioCustom: TBGRAThemeRadioButton; RadioFlash: TBGRAThemeRadioButton; RadioWin7: TBGRAThemeRadioButton; RadioDefault: TBGRAThemeRadioButton; procedure BCComboBox1Change(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RadioButtonChange(Sender: TObject); private procedure OnBCComboBoxDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); public procedure ApplyFlashStyle; procedure ApplyWin7Style; procedure ApplyCustomStyle; procedure ApplyDefaultStyle; procedure UpdateStyle; end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin // Style drop down //UpdateStyle; end; procedure TForm1.RadioButtonChange(Sender: TObject); begin UpdateStyle; end; procedure TForm1.BCComboBox1Change(Sender: TObject); begin Label1.Caption := 'Changed to '+BCComboBox1.Text; end; procedure TForm1.OnBCComboBoxDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); var aCanvas: TCanvas; s: String; begin aCanvas := BCComboBox1.Canvas; s := BCComboBox1.Items[Index]; // selected item if odChecked in State then s := '√ '+s; if odSelected in State then aCanvas.Brush.Color := clBlack else if odChecked in State then aCanvas.Brush.Color := $505050 else aCanvas.Brush.Color := clGray; aCanvas.Font.Color := clWhite; aCanvas.FillRect(ARect); // mouse over if odSelected in State then begin aCanvas.Pen.Style := psSolid; aCanvas.Pen.Color := clRed; aCanvas.Rectangle(ARect); end; // vertically centered text aCanvas.TextRect(ARect, 15, ARect.Top + (ARect.Height - aCanvas.GetTextHeight(s)) div 2, s); end; procedure TForm1.ApplyFlashStyle; var prevFontHeight: Integer; begin prevFontHeight := BCCombobox1.StateNormal.FontEx.Height; StyleButtonsSample(BCComboBox1.Button, TBCSampleStyle.ssFlashPlayer); BCCombobox1.StateNormal.FontEx.Height := prevFontHeight; BCCombobox1.StateHover.FontEx.Height := prevFontHeight; BCCombobox1.StateClicked.FontEx.Height := prevFontHeight; BCComboBox1.DropDownColor := $606060; BCComboBox1.DropDownFontColor := $c0c0c0; BCComboBox1.DropDownBorderSize:= 2; BCComboBox1.DropDownBorderColor:= $404040; BCComboBox1.DropDownHighlight := $FC992E; BCComboBox1.DropDownFontHighlight := clWhite; BCComboBox1.OnDrawItem := nil; end; procedure TForm1.ApplyWin7Style; var prevFontHeight: Integer; begin prevFontHeight := BCCombobox1.StateNormal.FontEx.Height; StyleButtonsSample(BCComboBox1.Button, TBCSampleStyle.ssWindows7); BCCombobox1.StateNormal.FontEx.Height := prevFontHeight; BCCombobox1.StateHover.FontEx.Height := prevFontHeight; BCCombobox1.StateClicked.FontEx.Height := prevFontHeight; BCComboBox1.DropDownColor := clWhite; BCComboBox1.DropDownFontColor := clBlack; BCComboBox1.DropDownBorderSize:= 1; BCComboBox1.DropDownBorderColor:= clBlack; BCComboBox1.DropDownHighlight := $FC992E; BCComboBox1.DropDownFontHighlight := clWhite; BCComboBox1.OnDrawItem := nil; end; procedure TForm1.ApplyCustomStyle; var prevFontHeight: Integer; begin prevFontHeight := BCCombobox1.StateNormal.FontEx.Height; StyleButtonsSample(BCComboBox1.Button, TBCSampleStyle.ssMacOSXLion); BCCombobox1.StateNormal.FontEx.Height := prevFontHeight; BCCombobox1.StateHover.FontEx.Height := prevFontHeight; BCCombobox1.StateClicked.FontEx.Height := prevFontHeight; BCComboBox1.DropDownColor := clGray; BCComboBox1.DropDownBorderSize:= 3; BCComboBox1.DropDownBorderColor:= clGreen; BCComboBox1.OnDrawItem := @OnBCComboBoxDrawItem; Canvas.Font.Height := BCComboBox1.StateNormal.FontEx.Height; BCComboBox1.ItemHeight := 2*Canvas.GetTextHeight('aq'); end; procedure TForm1.ApplyDefaultStyle; var prevFontHeight: Integer; begin prevFontHeight := BCCombobox1.StateNormal.FontEx.Height; StyleButtonsSample(BCComboBox1.Button, TBCSampleStyle.ssDefault); BCCombobox1.StateNormal.FontEx.Height := prevFontHeight; BCCombobox1.StateHover.FontEx.Height := prevFontHeight; BCCombobox1.StateClicked.FontEx.Height := prevFontHeight; BCComboBox1.DropDownBorderColor := $00400000; BCComboBox1.DropDownBorderSize:= 1; BCComboBox1.DropDownColor := $00804040; BCComboBox1.DropDownFontColor := $00FFE6E6; BCComboBox1.DropDownFontHighlight := clWhite; BCComboBox1.DropDownHighlight := $00FF8000; BCComboBox1.OnDrawItem := nil; end; procedure TForm1.UpdateStyle; begin if RadioWin7.Checked then ApplyWin7Style else if RadioFlash.Checked then ApplyFlashStyle else if RadioCustom.Checked then ApplyCustomStyle else ApplyDefaultStyle; end; end.