| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- // SPDX-License-Identifier: LGPL-3.0-linking-exception
- {******************************* CONTRIBUTOR(S) ******************************
- - Edivando S. Santos Brasil | [email protected]
- (Compatibility with delphi VCL 11/2018)
- ***************************** END CONTRIBUTOR(S) *****************************}
- unit BCListBox;
- {$I bgracontrols.inc}
- interface
- uses
- Classes, SysUtils, {$IFDEF FPC}LCLType, LResources, {$ENDIF}
- Forms, Controls, Graphics, Dialogs, StdCtrls,
- {$IFNDEF FPC}Types, BGRAGraphics, GraphType, FPImage, BCBaseCtrls,{$ENDIF}
- BGRAVirtualScreen, BGRABitmap, BGRASliceScaling;
- type
- TBCListBox = class;
- TBCPaperPanel = class;
- { TBCPaperPanel }
- TBCPaperPanel = class(TBGRAVirtualScreen)
- private
- FShadow: TBGRASliceScaling;
- procedure LoadShadowFromBitmapResource;
- protected
- procedure BCRedraw(Sender: TObject; ABitmap: TBGRABitmap);
- public
- constructor Create(TheOwner: TComponent); override;
- destructor Destroy; override;
- published
- end;
- { TBCListBox }
- TBCListBox = class(TListBox)
- private
- { Private declarations }
- protected
- procedure BCDrawItem(Control: TWinControl; Index: integer;
- ARect: TRect; State: TOwnerDrawState);
- { Protected declarations }
- public
- { Public declarations }
- constructor Create(TheOwner: TComponent); override;
- published
- { Published declarations }
- end;
- { TBCPaperListBox }
- TBCPaperListBox = class(TBCPaperPanel)
- private
- FListBox: TBCListBox;
- public
- constructor Create(TheOwner: TComponent); override;
- published
- property ListBox: TBCListBox read FListBox write FListBox;
- end;
- {$IFDEF FPC}procedure Register;{$ENDIF}
- implementation
- {$IFDEF FPC}
- uses
- PropEdits;
- {$ENDIF}
- {$IFDEF FPC}
- procedure Register;
- begin
- RegisterComponents('BGRA Controls', [TBCListBox]);
- RegisterComponents('BGRA Controls', [TBCPaperPanel]);
- RegisterComponents('BGRA Controls', [TBCPaperListBox]);
- {$IFDEF FPC}//#
- RegisterPropertyEditor(TypeInfo(TBCListBox),
- TBCPaperListBox, 'ListBox', TClassPropertyEditor);
- {$ENDIF}
- end;
- {$ENDIF}
- { TBCPaperListBox }
- constructor TBCPaperListBox.Create(TheOwner: TComponent);
- begin
- inherited Create(TheOwner);
- Self.ChildSizing.ControlsPerLine := 1;
- Self.ChildSizing.LeftRightSPacing := 4;
- Self.ChildSizing.TopBottomSpacing := 5;
- FListBox := TBCListBox.Create(Self);
- FListBox.Align := alClient;
- FListBox.Parent := Self;
- FListBox.SetSubComponent(true);
- end;
- { TBCPaperListBox }
- procedure TBCPaperPanel.LoadShadowFromBitmapResource;
- {$IFDEF FPC}
- var
- res: TLazarusResourceStream;
- {$ENDIF}
- begin
- {$IFDEF FPC}
- res := TLazarusResourceStream.Create('SHADOW', nil);
- FShadow := TBGRASliceScaling.Create(res);
- FShadow.Margins := Margins(6, 9, 6, 9);
- res.Free;
- {$ENDIF}
- end;
- procedure TBCPaperPanel.BCRedraw(Sender: TObject; ABitmap: TBGRABitmap);
- begin
- FShadow.Draw(ABitmap, 0, 0, ABitmap.Width, ABitmap.Height);
- end;
- constructor TBCPaperPanel.Create(TheOwner: TComponent);
- begin
- inherited Create(TheOwner);
- LoadShadowFromBitmapResource;
- Self.OnRedraw := BCRedraw;
- end;
- destructor TBCPaperPanel.Destroy;
- begin
- inherited Destroy;
- FShadow.Free;
- end;
- { TBCListBox }
- procedure TBCListBox.BCDrawItem(Control: TWinControl; Index: integer;
- ARect: TRect; State: TOwnerDrawState);
- var
- lb: TListBox;
- hg: integer;
- begin
- {$IFDEF FPC}
- lb := TListBox(Control);
- lb.Canvas.Clipping := False;
- if odFocused in State then
- lb.Canvas.Brush.Color := $00e4e4e4
- else
- lb.Canvas.Brush.Color := clWhite;
- if odSelected in State then
- lb.Canvas.Font.Style := [fsBold];
- lb.Canvas.FillRect(ARect);
- hg := lb.Canvas.TextHeight(lb.Items[Index]);
- lb.Canvas.Font.Color := clBlack;
- lb.Canvas.TextOut(ARect.Left + ScaleX(16, 96), ARect.Top +
- (lb.ItemHeight - hg) div 2, lb.Items[Index]);
- lb.Canvas.Clipping := True;
- lb.Canvas.ClipRect := Rect(0, 0, 0, 0);
- {$ENDIF}
- end;
- constructor TBCListBox.Create(TheOwner: TComponent);
- begin
- inherited Create(TheOwner);
- Self.Style := lbOwnerDrawFixed;
- Self.OnDrawItem := BCDrawItem;
- {$IFDEF FPC}
- Self.ItemHeight := ScaleY(48, 96);
- {$ENDIF}
- Self.BorderStyle := bsNone;
- end;
- initialization
- {$I bcpaperlistbox.lrs}
- end.
|