1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
| unit uRayekCompoReg;
interface
uses
SysUtils, Classes, Types, DesignIntf, DesignEditors, VCLEditors,
ImgList, Graphics, uRayekCompo;
type
TImageIndexProperty = class(TIntegerProperty, ICustomPropertyListDrawing)
protected
function GetImages: TCustomImageList;
public
function GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
function GetValue: string; override;
procedure SetValue(const Value: string); override;
// ICustomPropertyListDrawing
procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
var AHeight: Integer);
procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
var AWidth: Integer);
procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
const ARect: TRect; ASelected: Boolean);
end;
procedure Register;
implementation
uses
TypInfo;
procedure Register;
begin
RegisterPropertyEditor(TypeInfo(TImageIndex), TRayekCompo, 'ImageIndex', TImageIndexProperty);
RegisterComponents('Ta palette', [TRayekCompo]);
end;
{ TImageIndexProperty }
function TImageIndexProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paValueList, paRevertable];
end;
function TImageIndexProperty.GetImages: TCustomImageList;
begin
Result := GetObjectProp(GetComponent(0), 'Images') as TCustomImageList;
end;
function TImageIndexProperty.GetValue: string;
begin
Result := IntToStr(GetOrdValue);
end;
procedure TImageIndexProperty.GetValues(Proc: TGetStrProc);
var
I: Integer;
begin
Proc('-1');
if GetImages <> nil then
for I := 0 to GetImages.Count - 1 do
Proc(IntToStr(I));
end;
procedure TImageIndexProperty.ListDrawValue(const Value: string;
ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
var
ImgWidth: Integer;
begin
with ACanvas do
begin
if GetImages <> nil then
begin
FillRect(ARect);
if ASelected then
DrawFocusRect(ARect);
ImgWidth := GetImages.Width + 2 * 2;
GetImages.Draw(ACanvas, ARect.Left + 2,
(ARect.Top + ARect.Bottom - GetImages.Height) div 2, StrToInt(Value));
end
else
ImgWidth := 0;
TextOut(ARect.Left + ImgWidth + 2,
(ARect.Top + ARect.Bottom - TextHeight(Value)) div 2, Value);
end;
end;
procedure TImageIndexProperty.ListMeasureHeight(const Value: string;
ACanvas: TCanvas; var AHeight: Integer);
var
ImgList: TCustomImageList;
ImgHeight, StrHeight: Integer;
begin
ImgList := GetImages;
if Assigned(ImgList) then
ImgHeight := ImgList.Height + 2 * 2
else
ImgHeight := 0;
StrHeight := ACanvas.TextHeight(Value);
if StrHeight > ImgHeight then
AHeight := StrHeight
else
AHeight := ImgHeight;
end;
procedure TImageIndexProperty.ListMeasureWidth(const Value: string;
ACanvas: TCanvas; var AWidth: Integer);
var
ImgList: TCustomImageList;
ImgWidth, StrWidth: Integer;
begin
ImgList := GetImages;
if Assigned(ImgList) then
ImgWidth := ImgList.Width + 2 * 2
else
ImgWidth := 0;
StrWidth := ACanvas.TextWidth(Value) + 2 * 2;
AWidth := ImgWidth + StrWidth;
end;
procedure TImageIndexProperty.SetValue(const Value: string);
begin
SetOrdValue(StrToInt(Value));
end;
end. |
Partager