| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- unit Unit1;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, Forms, Controls, Graphics, Dialogs, CheckLst, Types,
- StdCtrls, BGRAThemeCheckBox, BGRABitmap, BGRABitmapTypes, BGRATheme;
- type
- { TForm1 }
- TForm1 = class(TForm)
- BGRAThemeCheckBox1: TBGRAThemeCheckBox;
- CheckListBox1: TCheckListBox;
- procedure CheckListBox1DrawItem(Control: TWinControl; Index: Integer;
- ARect: TRect; State: TOwnerDrawState);
- procedure FormCreate(Sender: TObject);
- private
- procedure DrawCheckBox(aCaption: string; State: TBGRAThemeButtonState;
- aFocused: boolean; Checked: boolean; ARect: TRect;
- ASurface: TBGRAThemeSurface);
- public
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.lfm}
- { TForm1 }
- procedure TForm1.CheckListBox1DrawItem(Control: TWinControl; Index: Integer;
- ARect: TRect; State: TOwnerDrawState);
- var
- surface: TBGRAThemeSurface;
- parentForm: TCustomForm;
- lclDPI: Integer;
- begin
- parentForm := GetParentForm(Control, False);
- if Assigned(parentForm) then
- lclDPI := parentForm.PixelsPerInch
- else lclDPI := Screen.PixelsPerInch;
- surface := TBGRAThemeSurface.Create(ARect, TCheckListBox(Control).Canvas, Control.GetCanvasScaleFactor, lclDPI);
- try
- DrawCheckBox(TCheckListBox(Control).Items[Index], btbsNormal, False, TCheckListBox(Control).Checked[Index], ARect, surface);
- finally
- surface.Free;
- end;
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- CheckListBox1.AddItem('Red', nil);
- CheckListBox1.AddItem('Green', nil);
- CheckListBox1.AddItem('Blue', nil);
- CheckListBox1.AddItem('Alpha', nil);
- end;
- procedure TForm1.DrawCheckBox(aCaption: string; State: TBGRAThemeButtonState;
- aFocused: boolean; Checked: boolean; ARect: TRect; ASurface: TBGRAThemeSurface
- );
- var
- Style: TTextStyle;
- aColor: TBGRAPixel;
- aleft, atop, aright, abottom: integer;
- penWidth: single;
- begin
- with ASurface do
- begin
- DestCanvas.Font.Color := clBlack;
- case State of
- btbsHover: aColor := BGRA(0, 120, 215);
- btbsActive: aColor := BGRA(0, 84, 153);
- btbsDisabled:
- begin
- DestCanvas.Font.Color := clGray;
- aColor := BGRA(204, 204, 204);
- end;
- else {btbsNormal}
- aColor := BGRABlack;
- end;
- Bitmap.Fill(BGRAWhite);
- BitmapRect := ARect;
- penWidth := ASurface.ScaleForBitmap(10) / 10;
- aleft := round(penWidth);
- aright := Bitmap.Height-round(penWidth);
- atop := round(penWidth);
- abottom := Bitmap.Height-round(penWidth);
- Bitmap.RectangleAntialias(aleft-0.5+penWidth/2, atop-0.5+penWidth/2,
- aright-0.5-penWidth/2, abottom-0.5-penWidth/2,
- aColor, penWidth);
- aleft := round(penWidth*2);
- aright := Bitmap.Height-round(penWidth*2);
- atop := round(penWidth*2);
- abottom := Bitmap.Height-round(penWidth*2);
- if Checked then
- Bitmap.DrawPolyLineAntialias(Bitmap.ComputeBezierSpline(
- [BezierCurve(pointF(aleft + 2, atop + 3), PointF((aleft + aright - 1) / 2, abottom - 3)),
- BezierCurve(PointF((aleft + aright - 1) / 2, abottom - 3), PointF(
- (aleft + aright - 1) / 2, (atop * 2 + abottom - 1) / 3), PointF(aright - 2, atop))]),
- Color, penWidth*1.5);
- DrawBitmap;
- if aCaption <> '' then
- begin
- fillchar(Style, sizeof(Style), 0);
- Style.Alignment := taLeftJustify;
- Style.Layout := tlCenter;
- Style.Wordbreak := True;
- DestCanvas.TextRect(ARect,
- ARect.Height, 0, aCaption, Style);
- end;
- end;
- end;
- end.
|