Форум: "Компоненты";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Вниз
ImageIndex Найти похожие ветки
← →
Незнайка111 (2006-12-07 10:59) [0]Как реализовать чтобі в инспекторе поле ImageIndex біло с картинками, как например в ActionList ?
← →
ors_archangel © (2006-12-10 10:46) [1]Хороший вопрос, Нейзнайка111!
Пример, тут поле типа TStartStopState (вот такой у меня тип) - это enum, имеющий два состояния (ssStart,ssStop), он отображается в инспекторе как список с иконками, можно использовать и, например, TIntegerProperty, конечно, если нужно....
||| CODE STARTS HERE |||
{$r uCombCtrlsPropEds.dcr} // тут я нарисовал две картинки, что рисовать
interface
uses Windows, Types, Graphics, DesignIntf, DesignEditors, vcleditors…;
type
{ TStartStopStateProperty
Property editor for the TStartStopState type.
Displays the icon and state name }
TStartStopStateProperty = class(TEnumProperty, ICustomPropertyDrawing,
ICustomPropertyListDrawing)
public
{ 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);
{ ICustomPropertyDrawing }
procedure PropDrawName(ACanvas: TCanvas; const ARect: TRect;
ASelected: Boolean);
procedure PropDrawValue(ACanvas: TCanvas; const ARect: TRect;
ASelected: Boolean);
end;
procedure Register;
implementation
uses
Classes, TypInfo…;
procedure Register;
begin
RegisterPropertyEditor(TypeInfo(TStartStopState), nil{any component}, ""{any name}, TStartStopStateProperty);
end;
{ TStartStopStateProperty }
procedure TStartStopStateProperty.PropDrawValue(ACanvas: TCanvas; const ARect: TRect;
ASelected: Boolean);
begin
if GetVisualValue <> "" then
ListDrawValue(GetVisualValue, ACanvas, ARect, ASelected)
else
DefaultPropertyDrawValue(Self, ACanvas, ARect);
end;
procedure TStartStopStateProperty.ListDrawValue(const Value: string;
ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
var
Right: Integer;
OldPenColor, OldBrushColor: TColor;
icon: HIcon;
state: TStartStopState;
begin
Right := (ARect.Bottom - ARect.Top) {* 2} + ARect.Left;
with ACanvas do
begin
// save off things
OldPenColor := Pen.Color;
OldBrushColor := Brush.Color;
// frame things
Pen.Color := Brush.Color;
Brush.Color := clWindow;
Rectangle(ARect.Left, ARect.Top, right, ARect.Bottom);
// draw icon
state := TStartStopState(GetEnumValue(GetPropInfo^.PropType^, Value));
case state of
ssStart: icon := LoadIcon(HInstance, "COMBCTRLS_STARTBTN");
ssStop: icon := LoadIcon(HInstance, "COMBCTRLS_STOPBTN");
else
icon := 0;
end;
//textout(0,0,value);
DrawIconex(ACanvas.Handle, arect.Left,arect.top, icon, 16,16, 0,0, DI_NORMAL);
//DrawIcon(ACanvas.Handle, arect.left,arect.top, icon);
DeleteObject(icon);
// restore the things we twiddled with
Brush.Color := OldBrushColor;
Pen.Color := OldPenColor;
DefaultPropertyListDrawValue(Value, ACanvas,
Rect(right, ARect.Top, ARect.Right, ARect.Bottom), ASelected);
end;
end;
procedure TStartStopStateProperty.ListMeasureWidth(const Value: string;
ACanvas: TCanvas; var AWidth: Integer);
begin
AWidth := AWidth + ACanvas.TextHeight("A") {* 2};
end;
procedure TStartStopStateProperty.ListMeasureHeight(const Value: string;
ACanvas: TCanvas; var AHeight: Integer);
begin
// No implementation necessary
end;
procedure TStartStopStateProperty.PropDrawName(ACanvas: TCanvas;
const ARect: TRect; ASelected: Boolean);
begin
DefaultPropertyDrawName(Self, ACanvas, ARect);
end;
||| END OF CODE |||
Собственно я тут только часть метода ListDrawValue, остальное просто скопировал из стандартных исходников, подробнее смотри Delphi Help: Component Writers Guide / Making Components available at design time / Adding property editors и Delphi 7/Source/Tools API/VCLEditors.pas и др.
Удачи всем в создании своих компонентов!
← →
DrPass © (2006-12-12 00:16) [2]Все это, конечно, круто...
Но если ImageIndex - номер картинки в ImageList, достаточно будет вызвать RegisterPropertyEditor для компоненты тов. Незнайки111, указав стандартный редактор свойства ImageIndex.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c