Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.88.249] |
|
Сообщ.
#1
,
|
|
|
Только начинаю постигать азы разработки компонентов и возник такой вопрос:
есть набор констант: xlWBATChart = -4109; xlWBATExcel4IntlMacroSheet = 4; xlWBATExcel4MacroSheet = 3; xlWBATWorksheet = -4167; Надо сделать так, чтобы в дизайн-тайме у компонента появлялся в свойствах список с этими константами. Посмотрел как это примерно делается с TColor: type {$IF NOT DEFINED(CLR)} PColor = ^TColor; {$IFEND} TColor = -$7FFFFFFF-1..$7FFFFFFF; {$IF NOT DEFINED(CLR)} {$NODEFINE TColor} {$OBJTYPENAME TColor 'NTColor'} (*$HPPEMIT 'namespace Graphics'*) (*$HPPEMIT '{'*) (*$HPPEMIT ' enum TColor {clMin=-0x7fffffff-1, clMax=0x7fffffff};'*) (*$HPPEMIT '}'*) {$IFEND} const clSystemColor = $FF000000; clScrollBar = TColor(clSystemColor or COLOR_SCROLLBAR); clBackground = TColor(clSystemColor or COLOR_BACKGROUND); clActiveCaption = TColor(clSystemColor or COLOR_ACTIVECAPTION); clInactiveCaption = TColor(clSystemColor or COLOR_INACTIVECAPTION); clMenu = TColor(clSystemColor or COLOR_MENU); Попробовал реализовать у себя: type TWBTemplate = -4167 .. 4; const xlWBATChart = TWBTemplate(-4109); xlWBATExcel4IntlMacroSheet = TWBTemplate(4); xlWBATExcel4MacroSheet = TWBTemplate(3); xlWBATWorksheet = TWBTemplate(-4167); В инспекторе появилось новое свойство, но просто как числовое значение, а не комбобокс со списков констант. Подскажите плз как сделать свойство со списком |
Сообщ.
#2
,
|
|
|
не уверен но все же
может так type TWBTemplate = (xlWBATChart = -4109, xlWBATExcel4IntlMacroSheet = 4, xlWBATExcel4MacroSheet = 3, xlWBATWorksheet = -4167) |
Сообщ.
#3
,
|
|
|
Цитата Vlad55 @ Подскажите плз как сделать свойство со списком нужно создать и зарегистрировать редактор свойства, см. например TFontNameProperty/TColorProperty/etc. (VCLEditors) |
Сообщ.
#4
,
|
|
|
unit Test; interface uses Classes, DesignEditors, DesignIntf; const xlWBATChart = -4109; xlWBATExcel4IntlMacroSheet = 4; xlWBATExcel4MacroSheet = 3; xlWBATWorksheet = -4167; xlWBAValues: array[0..3] of TIdentMapEntry = ( (Value: xlWBATChart; Name: 'xlWBATChart'), (Value: xlWBATExcel4IntlMacroSheet; Name: 'xlWBATExcel4IntlMacroSheet'), (Value: xlWBATExcel4MacroSheet; Name: 'xlWBATExcel4MacroSheet'), (Value: xlWBATWorksheet; Name: 'xlWBATWorksheet')); type TMyComponent = class(TComponent) private fTest: integer; published property Test: integer read fTest write fTest; end; TTestPropertyEditor = class(TIntegerProperty) public function GetAttributes: TPropertyAttributes; override; function GetValue: string; override; procedure GetValues(Proc: TGetStrProc); override; procedure SetValue(const Value: string); override; end; procedure Register; implementation procedure Register; begin RegisterComponents('Standard', [TMyComponent]); RegisterPropertyEditor(TypeInfo(integer),TMyComponent,'Test',TTestPropertyEditor); end; { TTestPropertyEditor } function TTestPropertyEditor.GetAttributes: TPropertyAttributes; begin Result := [paMultiSelect, paValueList, paRevertable]; end; function TTestPropertyEditor.GetValue: string; var i: integer; begin Result := ''; for I := Low(xlWBAValues) to High(xlWBAValues) do if xlWBAValues[I].Value = GetOrdValue then begin Result := xlWBAValues[I].Name; Break; end; end; procedure TTestPropertyEditor.GetValues(Proc: TGetStrProc); var I: Integer; begin for I := Low(xlWBAValues) to High(xlWBAValues) do Proc(xlWBAValues[I].Name); end; procedure TTestPropertyEditor.SetValue(const Value: string); var i: integer; begin for I := Low(xlWBAValues) to High(xlWBAValues) do if xlWBAValues[I].Name = Value then begin SetOrdValue(xlWBAValues[I].Value); Exit; end; inherited SetValue(Value); end; end. |
Сообщ.
#5
,
|
|
|
Спасибо большое, всем кто откликнулся. Вопрос решен
|