You've already forked lazarus-ccr
jvcl: Add new components TJvImagesViewer, TJvImageListViewer, TJvCustomDrawViewer, ported by Michal Gawrycki (issue #34104).
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6575 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
2027
components/jvcllaz/run/JvCustomControls/JvCustomItemViewer.pas
Normal file
2027
components/jvcllaz/run/JvCustomControls/JvCustomItemViewer.pas
Normal file
File diff suppressed because it is too large
Load Diff
344
components/jvcllaz/run/JvCustomControls/JvImageListViewer.pas
Normal file
344
components/jvcllaz/run/JvCustomControls/JvImageListViewer.pas
Normal file
@ -0,0 +1,344 @@
|
||||
{-----------------------------------------------------------------------------
|
||||
The contents of this file are subject to the Mozilla Public License
|
||||
Version 1.1 (the "License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
||||
the specific language governing rights and limitations under the License.
|
||||
|
||||
The Original Code is: JvImageListViewer.PAS, released on 2003-12-01.
|
||||
|
||||
The Initial Developer of the Original Code is: Peter Th�rnqvist
|
||||
All Rights Reserved.
|
||||
Lazarus port: Micha� Gawrycki
|
||||
|
||||
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
||||
located at http://jvcl.delphi-jedi.org
|
||||
|
||||
Known Issues:
|
||||
-----------------------------------------------------------------------------}
|
||||
// $Id$
|
||||
|
||||
unit JvImageListViewer;
|
||||
|
||||
interface
|
||||
|
||||
{.$I jvcl.inc}
|
||||
{$MODE OBJFPC}{$H+}
|
||||
|
||||
uses
|
||||
SysUtils, Classes, Controls, Graphics, StdCtrls, ComCtrls, ImgList,
|
||||
JvCustomItemViewer;
|
||||
|
||||
type
|
||||
TJvImageListViewerOptions = class(TJvCustomItemViewerOptions)
|
||||
private
|
||||
FDrawingStyle: TDrawingStyle;
|
||||
FSelectedStyle: TDrawingStyle;
|
||||
FFillCaption: Boolean;
|
||||
FFrameSize: Word;
|
||||
procedure SetDrawingStyle(const Value: TDrawingStyle);
|
||||
procedure SetSelectedStyle(const Value: TDrawingStyle);
|
||||
procedure SetFillCaption(const Value: Boolean);
|
||||
procedure SetFrameSize(const Value: Word);
|
||||
public
|
||||
constructor Create(AOwner: TJvCustomItemViewer); override;
|
||||
published
|
||||
property AutoCenter;
|
||||
property BrushPattern;
|
||||
property DragAutoScroll;
|
||||
property DrawingStyle: TDrawingStyle read FDrawingStyle write SetDrawingStyle default dsTransparent;
|
||||
property FillCaption: Boolean read FFillCaption write SetFillCaption default True;
|
||||
property SelectedStyle: TDrawingStyle read FSelectedStyle write SetSelectedStyle default dsSelected;
|
||||
property FrameSize: Word read FFrameSize write SetFrameSize default 1;
|
||||
property Height;
|
||||
property Layout;
|
||||
property RightClickSelect;
|
||||
property ScrollBar;
|
||||
property ShowCaptions;
|
||||
property Tracking;
|
||||
property Width;
|
||||
end;
|
||||
|
||||
TJvImageListViewerCaptionEvent = procedure(Sender: TObject;
|
||||
ImageIndex: Integer; var ACaption: WideString) of object;
|
||||
|
||||
TJvImageListViewer = class(TJvCustomItemViewer)
|
||||
private
|
||||
FChangeLink: TChangeLink;
|
||||
FImages: TCustomImageList;
|
||||
FOnGetCaption: TJvImageListViewerCaptionEvent;
|
||||
procedure SetImages(const Value: TCustomImageList);
|
||||
function GetOptions: TJvImageListViewerOptions;
|
||||
procedure SetOptions(const Value: TJvImageListViewerOptions);
|
||||
protected
|
||||
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
||||
procedure DoImageChange(Sender: TObject);
|
||||
procedure DrawItem(Index: Integer; State: TCustomDrawState; ACanvas: TCanvas;
|
||||
AItemRect, TextRect: TRect); override;
|
||||
function GetOptionsClass: TJvItemViewerOptionsClass; override;
|
||||
function GetCaption(ImageIndex: Integer): WideString; virtual;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
published
|
||||
property Images: TCustomImageList read FImages write SetImages;
|
||||
property Options: TJvImageListViewerOptions read GetOptions write SetOptions;
|
||||
property SelectedIndex;
|
||||
property Align;
|
||||
property Anchors;
|
||||
// property BiDiMode;
|
||||
property BorderSpacing;
|
||||
property Color;
|
||||
property Constraints;
|
||||
property DockSite;
|
||||
property DragCursor;
|
||||
property DragKind;
|
||||
property DragMode;
|
||||
property Enabled;
|
||||
property Font;
|
||||
// property ParentBiDiMode;
|
||||
property ParentColor;
|
||||
property ParentFont;
|
||||
property ParentShowHint;
|
||||
property PopupMenu;
|
||||
property ShowHint;
|
||||
property TabOrder;
|
||||
property TabStop;
|
||||
property Visible;
|
||||
property OnClick;
|
||||
property OnContextPopup;
|
||||
property OnDblClick;
|
||||
property OnDragDrop;
|
||||
property OnDockDrop;
|
||||
property OnDockOver;
|
||||
property OnDragOver;
|
||||
property OnEndDock;
|
||||
property OnEndDrag;
|
||||
property OnEnter;
|
||||
property OnExit;
|
||||
property OnGetCaption: TJvImageListViewerCaptionEvent read FOnGetCaption write FOnGetCaption;
|
||||
property OnDrawItem;
|
||||
property OnOptionsChanged;
|
||||
property OnItemChanging;
|
||||
property OnItemChanged;
|
||||
property OnItemHint;
|
||||
property OnGetSiteInfo;
|
||||
property OnMouseDown;
|
||||
property OnMouseMove;
|
||||
property OnMouseUp;
|
||||
property OnKeyDown;
|
||||
property OnKeyUp;
|
||||
property OnKeyPress;
|
||||
property OnStartDock;
|
||||
property OnStartDrag;
|
||||
property OnUnDock;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
CommCtrl, LCLType, LCLProc, LCLIntf,
|
||||
Math,
|
||||
JvJCLUtils, JvJVCLUtils;
|
||||
|
||||
//=== { TJvImageListViewerOptions } ==========================================
|
||||
|
||||
constructor TJvImageListViewerOptions.Create(AOwner: TJvCustomItemViewer);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FDrawingStyle := dsTransparent;
|
||||
FSelectedStyle := dsSelected;
|
||||
FFillCaption := True;
|
||||
FFrameSize := 1;
|
||||
end;
|
||||
|
||||
procedure TJvImageListViewerOptions.SetDrawingStyle(const Value: TDrawingStyle);
|
||||
begin
|
||||
if FDrawingStyle <> Value then
|
||||
begin
|
||||
FDrawingStyle := Value;
|
||||
Change;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImageListViewerOptions.SetFillCaption(const Value: Boolean);
|
||||
begin
|
||||
if FFillCaption <> Value then
|
||||
begin
|
||||
FFillCaption := Value;
|
||||
Change;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImageListViewerOptions.SetFrameSize(const Value: Word);
|
||||
begin
|
||||
if FFrameSize <> Value then
|
||||
begin
|
||||
FFrameSize := Value;
|
||||
Change;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImageListViewerOptions.SetSelectedStyle(const Value: TDrawingStyle);
|
||||
begin
|
||||
if FSelectedStyle <> Value then
|
||||
begin
|
||||
FSelectedStyle := Value;
|
||||
Change;
|
||||
end;
|
||||
end;
|
||||
|
||||
//=== { TJvImageListViewer } =================================================
|
||||
|
||||
constructor TJvImageListViewer.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FChangeLink := TChangeLink.Create;
|
||||
FChangeLink.OnChange := @DoImageChange;
|
||||
Color := clWindow;
|
||||
end;
|
||||
|
||||
destructor TJvImageListViewer.Destroy;
|
||||
begin
|
||||
Images := nil;
|
||||
FChangeLink.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TJvImageListViewer.DoImageChange(Sender: TObject);
|
||||
begin
|
||||
if Images <> nil then
|
||||
Count := Images.Count
|
||||
else
|
||||
Count := 0;
|
||||
Repaint;
|
||||
end;
|
||||
|
||||
procedure TJvImageListViewer.DrawItem(Index: Integer; State: TCustomDrawState;
|
||||
ACanvas: TCanvas; AItemRect, TextRect: TRect);
|
||||
//const
|
||||
// DrawingStyles: array [TDrawingStyle] of Cardinal =
|
||||
// (ILD_FOCUS, ILD_SELECTED, ILD_NORMAL, ILD_TRANSPARENT);
|
||||
// DrawMask: array [Boolean] of Cardinal =
|
||||
// (ILD_MASK, ILD_NORMAL);
|
||||
var
|
||||
X, Y: Integer;
|
||||
S: WideString;
|
||||
DrawStyle: TDrawingStyle;
|
||||
Flags: Cardinal;
|
||||
begin
|
||||
ACanvas.Brush.Color := Color;
|
||||
ACanvas.Font := Self.Font;
|
||||
if Images <> nil then
|
||||
begin
|
||||
Flags := DT_END_ELLIPSIS or DT_EDITCONTROL;
|
||||
S := GetCaption(Index);
|
||||
// determine where to draw image
|
||||
X := Max(AItemRect.Left, AItemRect.Left + (RectWidth(AItemRect) - Images.Width) div 2);
|
||||
Y := AItemRect.Top + (RectHeight(AItemRect) - Images.Height) div 2;
|
||||
if not Options.FillCaption then
|
||||
OffsetRect(TextRect,0,2);
|
||||
if cdsSelected in State then
|
||||
begin
|
||||
if Options.BrushPattern.Active then
|
||||
begin
|
||||
ACanvas.Pen.Color := Options.BrushPattern.OddColor;
|
||||
ACanvas.Brush.Bitmap := Options.BrushPattern.GetBitmap;
|
||||
end
|
||||
else
|
||||
begin
|
||||
ACanvas.Pen.Color := Options.BrushPattern.OddColor;
|
||||
ACanvas.Brush.Color := Options.BrushPattern.OddColor;
|
||||
end;
|
||||
if Options.FrameSize > 0 then
|
||||
begin
|
||||
ACanvas.Pen.Width := Options.FrameSize;
|
||||
ACanvas.Rectangle(AItemRect);
|
||||
end
|
||||
else
|
||||
ACanvas.FillRect(AItemRect);
|
||||
end
|
||||
else
|
||||
begin
|
||||
ACanvas.Brush.Color := Color;
|
||||
ACanvas.FillRect(AItemRect);
|
||||
end;
|
||||
if cdsSelected in Items[Index].State then
|
||||
DrawStyle := {DrawingStyles[}Options.SelectedStyle{]}
|
||||
else
|
||||
DrawStyle := {DrawingStyles[}Options.DrawingStyle{]};
|
||||
//ImageList_Draw(Images.Handle, Index, ACanvas.Handle, X, Y,
|
||||
// DrawStyle or DrawMask[Images.ImageType = itImage]);
|
||||
Images.Draw(ACanvas, X, Y, Index, DrawStyle, itImage);
|
||||
if S <> '' then
|
||||
begin
|
||||
if cdsSelected in State then
|
||||
begin
|
||||
ACanvas.Brush.Color := clHighlight; // Options.BrushPattern.OddColor;
|
||||
ACanvas.Font.Color := clHighlightText; // Options.BrushPattern.EvenColor;
|
||||
end
|
||||
else
|
||||
SetBkMode(ACanvas.Handle, {Windows.}TRANSPARENT);
|
||||
if (Options.Layout <> tlCenter) and Options.FillCaption then
|
||||
ACanvas.FillRect(TextRect)
|
||||
else
|
||||
S := ' ' + S + ' ';
|
||||
ViewerDrawText(ACanvas, PWideChar(S), Length(S), TextRect, Flags, taCenter, tlCenter, True);
|
||||
end;
|
||||
// if not Options.BrushPattern.Active and (cdsSelected in State) then
|
||||
// begin
|
||||
// ACanvas.DrawFocusRect(AItemRect);
|
||||
// end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TJvImageListViewer.GetCaption(ImageIndex: Integer): WideString;
|
||||
begin
|
||||
Result := '';
|
||||
if Assigned(FOnGetCaption) then
|
||||
FOnGetCaption(Self, ImageIndex, Result);
|
||||
end;
|
||||
|
||||
function TJvImageListViewer.GetOptions: TJvImageListViewerOptions;
|
||||
begin
|
||||
Result := TJvImageListViewerOptions(inherited Options);
|
||||
end;
|
||||
|
||||
function TJvImageListViewer.GetOptionsClass: TJvItemViewerOptionsClass;
|
||||
begin
|
||||
Result := TJvImageListViewerOptions;
|
||||
end;
|
||||
|
||||
procedure TJvImageListViewer.Notification(AComponent: TComponent;
|
||||
Operation: TOperation);
|
||||
begin
|
||||
inherited Notification(AComponent, Operation);
|
||||
if (Operation = opRemove) and (AComponent = FImages) then
|
||||
Images := nil;
|
||||
end;
|
||||
|
||||
procedure TJvImageListViewer.SetImages(const Value: TCustomImageList);
|
||||
begin
|
||||
if FImages <> Value then
|
||||
begin
|
||||
ReplaceImageListReference(Self, Value, FImages, FChangeLink);
|
||||
Count := 0;
|
||||
if FImages <> nil then
|
||||
begin
|
||||
Options.Width := Max(Options.Width, FImages.Width);
|
||||
Options.Height := Max(Options.Height, FImages.Height);
|
||||
end;
|
||||
DoImageChange(Value);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImageListViewer.SetOptions(const Value: TJvImageListViewerOptions);
|
||||
begin
|
||||
inherited Options := Value;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
691
components/jvcllaz/run/JvCustomControls/JvImagesViewer.pas
Normal file
691
components/jvcllaz/run/JvCustomControls/JvImagesViewer.pas
Normal file
@ -0,0 +1,691 @@
|
||||
{-----------------------------------------------------------------------------
|
||||
The contents of this file are subject to the Mozilla Public License
|
||||
Version 1.1 (the "License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
||||
the specific language governing rights and limitations under the License.
|
||||
|
||||
The Original Code is: JvImagesViewer.PAS, released on 2003-12-01.
|
||||
|
||||
The Initial Developer of the Original Code is: Peter Thrnqvist
|
||||
All Rights Reserved.
|
||||
Lazarus port: Michał Gawrycki
|
||||
|
||||
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
||||
located at http://jvcl.delphi-jedi.org
|
||||
|
||||
Known Issues:
|
||||
-----------------------------------------------------------------------------}
|
||||
// $Id$
|
||||
|
||||
unit JvImagesViewer;
|
||||
|
||||
interface
|
||||
|
||||
{.$I jvcl.inc}
|
||||
{$MODE OBJFPC}{$H+}
|
||||
|
||||
uses
|
||||
SysUtils, Classes, Controls, Graphics, StdCtrls, ComCtrls,
|
||||
JvCustomItemViewer, FPImage;
|
||||
|
||||
type
|
||||
|
||||
{ TJvPictureItem }
|
||||
|
||||
TJvPictureItem = class(TJvViewerItem)
|
||||
private
|
||||
FFileName: String;
|
||||
FPicture: TPicture;
|
||||
FCaption: String;
|
||||
procedure SetFileName(const Value: String);
|
||||
procedure SetCaption(const Value: String);
|
||||
procedure SetPicture(const Value: TPicture);
|
||||
function GetPicture: TPicture;
|
||||
procedure CreatePicture;
|
||||
protected
|
||||
procedure DoPictureChange(Sender: TObject); virtual;
|
||||
procedure DoLoadProgress(Sender: TObject; Stage: TFPImgProgressStage;
|
||||
PercentDone: Byte; RedrawNow: Boolean; const R: TRect;
|
||||
const Msg: AnsiString; var Continue : Boolean); virtual;
|
||||
procedure ReduceMemoryUsage; override;
|
||||
public
|
||||
destructor Destroy; override;
|
||||
procedure Refresh;
|
||||
public
|
||||
property FileName: String read FFileName write SetFileName;
|
||||
property Picture: TPicture read GetPicture write SetPicture;
|
||||
property Caption: String read FCaption write SetCaption;
|
||||
end;
|
||||
|
||||
TJvImageViewerOptions = class(TJvCustomItemViewerOptions)
|
||||
private
|
||||
FImagePadding: Integer;
|
||||
FFrameColor: TColor;
|
||||
FHotFrameSize: Integer;
|
||||
FHotColor: TColor;
|
||||
FTransparent: Boolean;
|
||||
procedure SetImagePadding(const Value: Integer);
|
||||
procedure SetFrameColor(const Value: TColor);
|
||||
procedure SetHotColor(const Value: TColor);
|
||||
procedure SetHotFrameSize(const Value: Integer);
|
||||
procedure SetTransparent(const Value: Boolean);
|
||||
public
|
||||
constructor Create(AOwner: TJvCustomItemViewer); override;
|
||||
published
|
||||
property AutoCenter;
|
||||
property Alignment;
|
||||
property BrushPattern;
|
||||
property DragAutoScroll;
|
||||
property FrameColor: TColor read FFrameColor write SetFrameColor default clGray;
|
||||
property Height;
|
||||
property HorzSpacing;
|
||||
property HotColor: TColor read FHotColor write SetHotColor default clHighlight;
|
||||
property HotFrameSize: Integer read FHotFrameSize write SetHotFrameSize default 2;
|
||||
property HotTrack;
|
||||
property ImagePadding: Integer read FImagePadding write SetImagePadding default 8;
|
||||
property Layout;
|
||||
property LazyRead;
|
||||
property MultiSelect;
|
||||
property ReduceMemoryUsage;
|
||||
property RightClickSelect;
|
||||
property Transparent: Boolean read FTransparent write SetTransparent default False;
|
||||
property ScrollBar;
|
||||
property ShowCaptions default True;
|
||||
property Tracking;
|
||||
property VertSpacing;
|
||||
property Width;
|
||||
end;
|
||||
|
||||
TJvImageLoadEvent = procedure(Sender: TObject; Item: TJvPictureItem) of object;
|
||||
TJvImageLoadErrorEvent = procedure(Sender: TObject; E: Exception;
|
||||
const FileName: String; var Handled: Boolean) of object;
|
||||
TJvImageViewerLoadProgress = procedure(Sender: TObject; Item: TJvPictureItem; Stage: TProgressStage;
|
||||
PercentDone: Byte; RedrawNow: Boolean; const R: TRect; const Msg: string) of object;
|
||||
|
||||
TJvImagesViewer = class(TJvCustomItemViewer)
|
||||
private
|
||||
FFileMask: String;
|
||||
FDirectory: String;
|
||||
FOnLoadError: TJvImageLoadErrorEvent;
|
||||
FOnLoadProgress: TJvImageViewerLoadProgress;
|
||||
FOnLoadBegin: TNotifyEvent;
|
||||
FOnLoadEnd: TNotifyEvent;
|
||||
procedure SetDirectory(const Value: String);
|
||||
procedure SetFileMask(const Value: String);
|
||||
function GetItems(Index: Integer): TJvPictureItem;
|
||||
procedure ExpandFileMask(const Mask: String; Strings: TStrings);
|
||||
function ScaleRect(ARect, RefRect: TRect): TRect;
|
||||
function GetOptions: TJvImageViewerOptions;
|
||||
procedure SetOptions(const Value: TJvImageViewerOptions);
|
||||
protected
|
||||
function GetItemClass: TJvViewerItemClass; override;
|
||||
function GetOptionsClass: TJvItemViewerOptionsClass; override;
|
||||
function LoadErrorHandled(E: Exception; const FileName: String): Boolean;
|
||||
procedure DoLoadBegin; virtual;
|
||||
procedure DoLoadProgress(Item: TJvPictureItem; Stage: TProgressStage; PercentDone: Byte;
|
||||
RedrawNow: Boolean; const R: TRect; const Msg: String);
|
||||
procedure DoLoadEnd; virtual;
|
||||
procedure DrawItem(Index: Integer; State: TCustomDrawState; ACanvas: TCanvas;
|
||||
AItemRect, TextRect: TRect); override;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
function LoadImages: Boolean;virtual;
|
||||
procedure CustomSort(Compare: TListSortCompare); override;
|
||||
|
||||
property Items[Index: Integer]: TJvPictureItem read GetItems;
|
||||
property Count;
|
||||
published
|
||||
property Directory: String read FDirectory write SetDirectory;
|
||||
property FileMask: String read FFileMask write SetFileMask;
|
||||
property Options: TJvImageViewerOptions read GetOptions write SetOptions;
|
||||
property SelectedIndex;
|
||||
property OnScroll;
|
||||
property OnLoadBegin: TNotifyEvent read FOnLoadBegin write FOnLoadBegin;
|
||||
property OnLoadEnd: TNotifyEvent read FOnLoadEnd write FOnLoadEnd;
|
||||
property OnLoadError: TJvImageLoadErrorEvent read FOnLoadError write FOnLoadError;
|
||||
property OnLoadProgress: TJvImageViewerLoadProgress read FOnLoadProgress write FOnLoadProgress;
|
||||
property OnDrawItem;
|
||||
property OnOptionsChanged;
|
||||
property OnItemChanging;
|
||||
property OnItemChanged;
|
||||
property OnItemHint;
|
||||
property OnInsertion;
|
||||
property OnDeletion;
|
||||
|
||||
property Align;
|
||||
property Anchors;
|
||||
// property BiDiMode;
|
||||
property BorderSpacing;
|
||||
property Color;
|
||||
property Constraints;
|
||||
property DockSite;
|
||||
property DragCursor;
|
||||
property DragKind;
|
||||
property DragMode;
|
||||
property Enabled;
|
||||
property Font;
|
||||
// property ParentBiDiMode;
|
||||
property ParentColor;
|
||||
property ParentFont;
|
||||
property ParentShowHint;
|
||||
property PopupMenu;
|
||||
property ShowHint;
|
||||
property TabOrder;
|
||||
property TabStop;
|
||||
property Visible;
|
||||
property OnClick;
|
||||
property OnContextPopup;
|
||||
property OnDblClick;
|
||||
property OnDragDrop;
|
||||
property OnDockDrop;
|
||||
property OnDockOver;
|
||||
property OnEndDock;
|
||||
property OnGetSiteInfo;
|
||||
property OnStartDock;
|
||||
property OnUnDock;
|
||||
property OnDragOver;
|
||||
property OnEndDrag;
|
||||
property OnEnter;
|
||||
property OnExit;
|
||||
property OnMouseDown;
|
||||
property OnMouseMove;
|
||||
property OnMouseUp;
|
||||
property OnKeyDown;
|
||||
property OnKeyUp;
|
||||
property OnKeyPress;
|
||||
property OnStartDrag;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
JvJCLUtils, LCLIntf, LCLType;
|
||||
|
||||
//=== { TJvImageViewerOptions } ==============================================
|
||||
|
||||
constructor TJvImageViewerOptions.Create(AOwner: TJvCustomItemViewer);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FImagePadding := 20;
|
||||
FFrameColor := clGray;
|
||||
FHotColor := clHighlight;
|
||||
FHotFrameSize := 2;
|
||||
ShowCaptions := True;
|
||||
end;
|
||||
|
||||
procedure TJvImageViewerOptions.SetFrameColor(const Value: TColor);
|
||||
begin
|
||||
if FFrameColor <> Value then
|
||||
begin
|
||||
FFrameColor := Value;
|
||||
Change;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImageViewerOptions.SetHotColor(const Value: TColor);
|
||||
begin
|
||||
FHotColor := Value;
|
||||
end;
|
||||
|
||||
procedure TJvImageViewerOptions.SetHotFrameSize(const Value: Integer);
|
||||
begin
|
||||
FHotFrameSize := Value;
|
||||
end;
|
||||
|
||||
procedure TJvImageViewerOptions.SetImagePadding(const Value: Integer);
|
||||
begin
|
||||
if FImagePadding <> Value then
|
||||
begin
|
||||
FImagePadding := Value;
|
||||
Change;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImageViewerOptions.SetTransparent(const Value: Boolean);
|
||||
begin
|
||||
if FTransparent <> Value then
|
||||
begin
|
||||
FTransparent := Value;
|
||||
Change;
|
||||
end;
|
||||
end;
|
||||
|
||||
//=== { TJvPictureItem } =====================================================
|
||||
|
||||
destructor TJvPictureItem.Destroy;
|
||||
begin
|
||||
FreeAndNil(FPicture);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TJvPictureItem.CreatePicture;
|
||||
var
|
||||
S: String;
|
||||
begin
|
||||
if FPicture = nil then
|
||||
begin
|
||||
FPicture := TPicture.Create;
|
||||
FPicture.OnChange := @DoPictureChange;
|
||||
FPicture.OnProgress := @DoLoadProgress;
|
||||
S := ExpandUNCFileName(FileName);
|
||||
if (S <> '') and FileExists(S) then
|
||||
try
|
||||
FPicture.LoadFromFile(S);
|
||||
if FPicture.Graphic <> nil then
|
||||
FPicture.Graphic.Transparent := TJvImagesViewer(Owner).Options.Transparent;
|
||||
except
|
||||
on E: Exception do
|
||||
if not TJvImagesViewer(Owner).LoadErrorHandled(E, FileName) then
|
||||
raise
|
||||
else
|
||||
begin
|
||||
Delete;
|
||||
FreeAndNil(FPicture);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvPictureItem.DoPictureChange(Sender: TObject);
|
||||
begin
|
||||
Changed;
|
||||
end;
|
||||
|
||||
procedure TJvPictureItem.DoLoadProgress(Sender: TObject;
|
||||
Stage: TFPImgProgressStage; PercentDone: Byte; RedrawNow: Boolean;
|
||||
const R: TRect; const Msg: AnsiString; var Continue: Boolean);
|
||||
begin
|
||||
if Owner is TJvImagesViewer then
|
||||
TJvImagesViewer(Owner).DoLoadProgress(Self, Stage, PercentDone, RedrawNow, R, Msg);
|
||||
end;
|
||||
|
||||
function TJvPictureItem.GetPicture: TPicture;
|
||||
begin
|
||||
CreatePicture;
|
||||
Result := FPicture;
|
||||
end;
|
||||
|
||||
procedure TJvPictureItem.SetFileName(const Value: String);
|
||||
begin
|
||||
if (AnsiCompareFileName(FFileName, Value) <> 0) and Changing then
|
||||
begin
|
||||
FFileName := Value;
|
||||
// don't load image until .Picture is used
|
||||
FreeAndNil(FPicture);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvPictureItem.SetPicture(const Value: TPicture);
|
||||
begin
|
||||
if Changing then
|
||||
begin
|
||||
if Value <> nil then
|
||||
GetPicture.Assign(Value)
|
||||
else
|
||||
if Assigned(FPicture) then
|
||||
begin
|
||||
FreeAndNil(FPicture);
|
||||
Changed;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvPictureItem.SetCaption(const Value: String);
|
||||
begin
|
||||
if (FCaption <> Value) and Changing then
|
||||
begin
|
||||
FCaption := Value;
|
||||
Changed;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvPictureItem.ReduceMemoryUsage;
|
||||
begin
|
||||
inherited ReduceMemoryUsage;
|
||||
if FileName <> '' then // release image if we can recreate it from it's filename
|
||||
Picture := nil;
|
||||
end;
|
||||
|
||||
procedure TJvPictureItem.Refresh;
|
||||
begin
|
||||
FreeAndNil(FPicture);
|
||||
end;
|
||||
|
||||
//=== { TJvImagesViewer } ====================================================
|
||||
|
||||
constructor TJvImagesViewer.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
// FDirectory := GetCurrentDir;
|
||||
FFileMask := Graphics.GraphicFileMask(TGraphic);
|
||||
Color := clWindow;
|
||||
end;
|
||||
|
||||
function TJvImagesViewer.ScaleRect(ARect, RefRect: TRect): TRect;
|
||||
var
|
||||
w, h, cw, ch: Integer;
|
||||
XYAspect: Double;
|
||||
begin
|
||||
w := ARect.Right - ARect.Left;
|
||||
h := ARect.Bottom - ARect.Top;
|
||||
cw := RefRect.Right - RefRect.Left;
|
||||
ch := RefRect.Bottom - RefRect.Top;
|
||||
|
||||
if (w > cw) or (h > ch) then
|
||||
begin
|
||||
if (w > 0) and (h > 0) then
|
||||
begin
|
||||
XYAspect := w / h;
|
||||
if w > h then
|
||||
begin
|
||||
w := cw;
|
||||
h := Trunc(cw / XYAspect);
|
||||
if h > ch then
|
||||
begin
|
||||
h := ch;
|
||||
w := Trunc(ch * XYAspect);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
h := ch;
|
||||
w := Trunc(ch * XYAspect);
|
||||
if w > cw then
|
||||
begin
|
||||
w := cw;
|
||||
h := Trunc(cw / XYAspect);
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
w := cw;
|
||||
h := ch;
|
||||
end;
|
||||
end;
|
||||
|
||||
with Result do
|
||||
begin
|
||||
Left := 0;
|
||||
Top := 0;
|
||||
Right := w;
|
||||
Bottom := h;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImagesViewer.DrawItem(Index: Integer; State: TCustomDrawState;
|
||||
ACanvas: TCanvas; AItemRect, TextRect: TRect);
|
||||
var
|
||||
ImageRect: TRect;
|
||||
TotalPadding, BottomRightShift: Integer;
|
||||
AItem: TJvPictureItem;
|
||||
S: String;
|
||||
|
||||
procedure ModifyRect(var R: TRect; ALeft, ATop, ARight, ABottom: Integer);
|
||||
begin
|
||||
Inc(R.Left, ALeft);
|
||||
Inc(R.Top, ATop);
|
||||
Inc(R.Right, ARight);
|
||||
Inc(R.Bottom, ABottom);
|
||||
end;
|
||||
|
||||
begin
|
||||
inherited DrawItem(Index, State, ACanvas, AItemRect, TextRect);
|
||||
//{$IFDEF MSWINDOWS}
|
||||
//if Win32Platform = VER_PLATFORM_WIN32_NT then
|
||||
// BottomRightShift := 1
|
||||
//else
|
||||
//{$ENDIF MSWINDOWS}
|
||||
BottomRightShift := 0;
|
||||
AItem := Items[Index];
|
||||
ACanvas.Font := Font;
|
||||
ACanvas.Brush.Color := Color;
|
||||
ACanvas.Pen.Color := Font.Color;
|
||||
TotalPadding := Options.ImagePadding;
|
||||
if Options.ShowCaptions then
|
||||
begin
|
||||
Dec(AItemRect.Bottom, 2);
|
||||
Inc(TextRect.Top, 2);
|
||||
S := AItem.Caption;
|
||||
if S = '' then
|
||||
S := ExtractFileName(AItem.FileName);
|
||||
end;
|
||||
|
||||
if cdsHot in State then
|
||||
begin
|
||||
ACanvas.Font.Style := ACanvas.Font.Style + [fsUnderline];
|
||||
ACanvas.Font.Color := clHighlight;
|
||||
ACanvas.Pen.Color := Options.HotColor;
|
||||
ACanvas.Pen.Width := Options.HotFrameSize;
|
||||
ACanvas.Brush.Style := bsClear;
|
||||
ModifyRect(AItemRect,Options.HotFrameSize div 2,Options.HotFrameSize div 2,
|
||||
-Options.HotFrameSize div 2 + BottomRightShift,-Options.HotFrameSize div 2 + BottomRightShift);
|
||||
ACanvas.Rectangle(AItemRect);
|
||||
ModifyRect(AItemRect,-Options.HotFrameSize div 2,-Options.HotFrameSize div 2,
|
||||
Options.HotFrameSize div 2 - BottomRightShift,Options.HotFrameSize div 2 - BottomRightShift);
|
||||
ACanvas.Brush.Style := bsSolid;
|
||||
SetBkMode(ACanvas.Handle, {Windows.}TRANSPARENT);
|
||||
ACanvas.Pen.Width := 1;
|
||||
end;
|
||||
if cdsSelected in State then
|
||||
begin
|
||||
ACanvas.Pen.Color := clBtnFace;
|
||||
ACanvas.Brush.Color := clHighlight;
|
||||
if Options.BrushPattern.Active then
|
||||
ACanvas.Brush.Bitmap := Options.BrushPattern.GetBitmap
|
||||
else
|
||||
ACanvas.Brush.Color := Options.BrushPattern.OddColor;
|
||||
ACanvas.Rectangle(AItemRect);
|
||||
ACanvas.Brush.Bitmap := nil;
|
||||
ACanvas.Brush.Style := bsClear;
|
||||
ACanvas.Pen.Color := Options.HotColor;
|
||||
ACanvas.Pen.Width := Options.HotFrameSize;
|
||||
ModifyRect(AItemRect,Options.HotFrameSize div 2, Options.HotFrameSize div 2,
|
||||
-Options.HotFrameSize div 2 + BottomRightShift, -Options.HotFrameSize div 2 + BottomRightShift);
|
||||
ACanvas.Rectangle(AItemRect);
|
||||
ModifyRect(AItemRect,-Options.HotFrameSize div 2, -Options.HotFrameSize div 2,
|
||||
Options.HotFrameSize div 2 - BottomRightShift, Options.HotFrameSize div 2 - BottomRightShift);
|
||||
ACanvas.Font.Color := clHighlightText;
|
||||
ACanvas.Brush.Style := bsSolid;
|
||||
ACanvas.Brush.Color := clHighlight;
|
||||
ACanvas.Pen.Width := 1;
|
||||
end
|
||||
else
|
||||
if (Options.FrameColor <> clNone) and not (cdsHot in State) then
|
||||
begin
|
||||
ACanvas.Brush.Color := Options.FrameColor;
|
||||
ACanvas.FrameRect(AItemRect);
|
||||
SetBkMode(ACanvas.Handle, {Windows.}TRANSPARENT);
|
||||
end;
|
||||
// make space around image
|
||||
InflateRect(AItemRect, -TotalPadding, -TotalPadding);
|
||||
if AItem.Picture <> nil then // access Picture to load image
|
||||
begin
|
||||
ImageRect := Rect(0, 0, AItem.Picture.Width, AItem.Picture.Height);
|
||||
ImageRect := CenterRect(ScaleRect(ImageRect, AItemRect), AItemRect);
|
||||
if (RectWidth(ImageRect) > 0) and (RectHeight(ImageRect) > 0) then
|
||||
{if AItem.Picture.Graphic is TIcon then
|
||||
// and (RectWidth(ImageRect) < RectWidth(R)) and (RectHeight(ImageRect) < RectHeight(R)) then
|
||||
// TIcon doesn't scale it's content
|
||||
DrawIconEx(ACanvas.Handle, ImageRect.Left, ImageRect.Top, AItem.Picture.Icon.Handle,
|
||||
ImageRect.Right - ImageRect.Left, ImageRect.Bottom - ImageRect.Top, 0, 0, DI_NORMAL)
|
||||
else}
|
||||
ACanvas.StretchDraw(ImageRect, AItem.Picture.Graphic);
|
||||
end;
|
||||
|
||||
if Options.ShowCaptions and (S <> '') then
|
||||
begin
|
||||
if Options.Layout = tlCenter then
|
||||
S := ' ' + S + ' ';
|
||||
ViewerDrawText(ACanvas, S, Length(S),
|
||||
TextRect, DT_END_ELLIPSIS or DT_EDITCONTROL, Options.Alignment, tlCenter, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TJvImagesViewer.GetItems(Index: Integer): TJvPictureItem;
|
||||
begin
|
||||
Result := TJvPictureItem(inherited Items[Index]);
|
||||
end;
|
||||
|
||||
function TJvImagesViewer.GetItemClass: TJvViewerItemClass;
|
||||
begin
|
||||
Result := TJvPictureItem;
|
||||
end;
|
||||
|
||||
function TJvImagesViewer.LoadImages: Boolean;
|
||||
var
|
||||
I, J: Integer;
|
||||
F: TSearchRec;
|
||||
Files, FileMasks: TStringList;
|
||||
TmpDir: String;
|
||||
begin
|
||||
BeginUpdate;
|
||||
try
|
||||
Count := 0;
|
||||
TmpDir := ExpandUNCFileName(Directory);
|
||||
FileMasks := TStringList.Create;
|
||||
try
|
||||
FileMasks.Sorted := True; // make sure no duplicates are added
|
||||
ExpandFileMask(FileMask, FileMasks);
|
||||
if TmpDir <> '' then
|
||||
TmpDir := IncludeTrailingPathDelimiter(TmpDir);
|
||||
DoLoadBegin;
|
||||
Files := TStringList.Create;
|
||||
try
|
||||
Files.Sorted := True;
|
||||
for I := 0 to FileMasks.Count - 1 do
|
||||
begin
|
||||
if SysUtils.FindFirst(TmpDir + FileMasks[I], faAnyFile, F) = 0 then
|
||||
try
|
||||
repeat
|
||||
if F.Attr and faDirectory = 0 then
|
||||
Files.Add(TmpDir + F.Name);
|
||||
until SysUtils.FindNext(F) <> 0;
|
||||
Count := Files.Count;
|
||||
J := 0;
|
||||
while J < Files.Count do
|
||||
begin
|
||||
Items[J].FileName := Files[J];
|
||||
Inc(J);
|
||||
end;
|
||||
finally
|
||||
SysUtils.FindClose(F);
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
Files.Free;
|
||||
end;
|
||||
DoLoadEnd;
|
||||
finally
|
||||
FileMasks.Free;
|
||||
end;
|
||||
Result := Count > 0;
|
||||
finally
|
||||
EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImagesViewer.SetDirectory(const Value: String);
|
||||
begin
|
||||
if FDirectory <> Value then
|
||||
begin
|
||||
FDirectory := Value;
|
||||
LoadImages;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImagesViewer.SetFileMask(const Value: String);
|
||||
begin
|
||||
if FFileMask <> Value then
|
||||
begin
|
||||
FFileMask := Value;
|
||||
LoadImages;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJvImagesViewer.ExpandFileMask(const Mask: String;
|
||||
Strings: TStrings);
|
||||
var
|
||||
Start, Current: PChar;
|
||||
TmpChar: Char;
|
||||
begin
|
||||
Current := PChar(string(Mask));
|
||||
Start := Current;
|
||||
while (Current <> nil) and (Current^ <> #0) do
|
||||
begin
|
||||
if CharInSet(Current^, [',', ';']) then
|
||||
begin
|
||||
TmpChar := Current^;
|
||||
Current^ := #0;
|
||||
if Start <> '' then
|
||||
Strings.Add(Start);
|
||||
Current^ := TmpChar;
|
||||
Start := Current + 1;
|
||||
end;
|
||||
Inc(Current);
|
||||
end;
|
||||
if Start <> '' then
|
||||
Strings.Add(Start);
|
||||
end;
|
||||
|
||||
function TJvImagesViewer.LoadErrorHandled(E: Exception; const FileName: String): Boolean;
|
||||
begin
|
||||
Result := False;
|
||||
if Assigned(FOnLoadError) then
|
||||
FOnLoadError(Self, E, FileName, Result);
|
||||
end;
|
||||
|
||||
procedure TJvImagesViewer.DoLoadBegin;
|
||||
begin
|
||||
if Assigned(FOnLoadBegin) then
|
||||
FOnLoadBegin(Self);
|
||||
end;
|
||||
|
||||
procedure TJvImagesViewer.DoLoadProgress(Item: TJvPictureItem;
|
||||
Stage: TProgressStage; PercentDone: Byte; RedrawNow: Boolean;
|
||||
const R: TRect; const Msg: String);
|
||||
begin
|
||||
if Assigned(FOnLoadProgress) then
|
||||
FOnLoadProgress(Self, Item, Stage, PercentDone, RedrawNow, R, Msg);
|
||||
end;
|
||||
|
||||
procedure TJvImagesViewer.DoLoadEnd;
|
||||
begin
|
||||
if Assigned(FOnLoadEnd) then
|
||||
FOnLoadEnd(Self);
|
||||
end;
|
||||
|
||||
function TJvImagesViewer.GetOptionsClass: TJvItemViewerOptionsClass;
|
||||
begin
|
||||
Result := TJvImageViewerOptions;
|
||||
end;
|
||||
|
||||
function TJvImagesViewer.GetOptions: TJvImageViewerOptions;
|
||||
begin
|
||||
Result := TJvImageViewerOptions(inherited Options);
|
||||
end;
|
||||
|
||||
procedure TJvImagesViewer.SetOptions(const Value: TJvImageViewerOptions);
|
||||
begin
|
||||
inherited Options := Value;
|
||||
end;
|
||||
|
||||
function SortByFilename(Item1, Item2:Pointer):integer;
|
||||
begin
|
||||
Result := AnsiCompareFileName(TJvPictureItem(Item1).Filename, TJvPictureItem(Item2).Filename);
|
||||
end;
|
||||
|
||||
procedure TJvImagesViewer.CustomSort(Compare: TListSortCompare);
|
||||
begin
|
||||
if Assigned(Compare) then
|
||||
inherited CustomSort(Compare)
|
||||
else
|
||||
inherited CustomSort(@SortByFilename);
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
end.
|
143
components/jvcllaz/run/JvCustomControls/JvOwnerDrawViewer.pas
Normal file
143
components/jvcllaz/run/JvCustomControls/JvOwnerDrawViewer.pas
Normal file
@ -0,0 +1,143 @@
|
||||
{-----------------------------------------------------------------------------
|
||||
The contents of this file are subject to the Mozilla Public License
|
||||
Version 1.1 (the "License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
||||
the specific language governing rights and limitations under the License.
|
||||
|
||||
The Original Code is: JvOwnerDrawViewer.PAS, released on 2003-12-01.
|
||||
|
||||
The Initial Developer of the Original Code is: Peter Th�rnqvist
|
||||
All Rights Reserved.
|
||||
Lazarus port: Micha� Gawrycki
|
||||
|
||||
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
||||
located at http://jvcl.delphi-jedi.org
|
||||
|
||||
Known Issues:
|
||||
-----------------------------------------------------------------------------}
|
||||
// $Id$
|
||||
|
||||
unit JvOwnerDrawViewer;
|
||||
|
||||
{.$I jvcl.inc}
|
||||
{$MODE OBJFPC}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, Graphics, JvCustomItemViewer;
|
||||
|
||||
type
|
||||
TJvOwnerDrawViewerOptions = class(TJvCustomItemViewerOptions)
|
||||
published
|
||||
property Alignment;
|
||||
property AutoCenter;
|
||||
property BrushPattern;
|
||||
property DragAutoScroll;
|
||||
property Height;
|
||||
property HorzSpacing;
|
||||
property HotTrack;
|
||||
property Layout;
|
||||
property LazyRead;
|
||||
property MultiSelect;
|
||||
property RightClickSelect;
|
||||
property ScrollBar;
|
||||
property ShowCaptions;
|
||||
property Smooth;
|
||||
property Tracking;
|
||||
property VertSpacing;
|
||||
property Width;
|
||||
end;
|
||||
|
||||
TJvOwnerDrawViewer = class(TJvCustomItemViewer)
|
||||
private
|
||||
function GetOptions: TJvOwnerDrawViewerOptions;
|
||||
procedure SetOptions(const Value: TJvOwnerDrawViewerOptions);
|
||||
protected
|
||||
function GetOptionsClass: TJvItemViewerOptionsClass; override;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
property Count;
|
||||
property Items;
|
||||
published
|
||||
property Options: TJvOwnerDrawViewerOptions read GetOptions write SetOptions;
|
||||
property SelectedIndex;
|
||||
property OnDrawItem;
|
||||
property OnOptionsChanged;
|
||||
property OnItemChanging;
|
||||
property OnItemChanged;
|
||||
property OnItemHint;
|
||||
|
||||
property Align;
|
||||
property Anchors;
|
||||
// property BiDiMode;
|
||||
property BorderSpacing;
|
||||
property Color;
|
||||
property Constraints;
|
||||
property DockSite;
|
||||
property DragCursor;
|
||||
property DragKind;
|
||||
property DragMode;
|
||||
property Enabled;
|
||||
property Font;
|
||||
// property ParentBiDiMode;
|
||||
property ParentColor;
|
||||
property ParentFont;
|
||||
property ParentShowHint;
|
||||
property PopupMenu;
|
||||
property ShowHint;
|
||||
property TabOrder;
|
||||
property TabStop;
|
||||
property Visible;
|
||||
property OnClick;
|
||||
property OnContextPopup;
|
||||
property OnDblClick;
|
||||
property OnDragDrop;
|
||||
property OnDockDrop;
|
||||
property OnDockOver;
|
||||
property OnDragOver;
|
||||
property OnEndDock;
|
||||
property OnEndDrag;
|
||||
property OnEnter;
|
||||
property OnExit;
|
||||
property OnGetSiteInfo;
|
||||
property OnMouseDown;
|
||||
property OnMouseMove;
|
||||
property OnMouseUp;
|
||||
property OnKeyDown;
|
||||
property OnKeyUp;
|
||||
property OnKeyPress;
|
||||
property OnStartDock;
|
||||
property OnStartDrag;
|
||||
property OnUnDock;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
constructor TJvOwnerDrawViewer.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
Color := clWindow;
|
||||
end;
|
||||
|
||||
function TJvOwnerDrawViewer.GetOptions: TJvOwnerDrawViewerOptions;
|
||||
begin
|
||||
Result := TJvOwnerDrawViewerOptions(inherited Options);
|
||||
end;
|
||||
|
||||
function TJvOwnerDrawViewer.GetOptionsClass: TJvItemViewerOptionsClass;
|
||||
begin
|
||||
Result := TJvOwnerDrawViewerOptions;
|
||||
end;
|
||||
|
||||
procedure TJvOwnerDrawViewer.SetOptions(const Value: TJvOwnerDrawViewerOptions);
|
||||
begin
|
||||
inherited Options := Value;
|
||||
end;
|
||||
|
||||
end.
|
Reference in New Issue
Block a user