Форум: "Основная";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
ВнизПодскажите как сделать редактор свойств для своего компанента? Найти похожие ветки
← →
dimonf (2003-04-15 18:06) [0]Типа как TFont!
Я знаю, что надо создать свой класс от TPersistent.
Делаю:
type
TDrive = class(TPersistent)
private
FDisk: String;
published
property Disk: String read FDisk write FDisk;
end;
TdvDriveComboBox = class(TCustomComboBox)
private
FDrive: TDrive;
procedure SetMyFont(const Value: TDrive);
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Drive: TDrive read FDrive write SetMyFont;
end;
{ TdvDriveComboBox }
constructor TdvDriveComboBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDrive.Create;
end;
destructor TdvDriveComboBox.Destroy;
begin
FDrive.Free;
inherited Destroy;
end;
{ TDrive }
procedure TdvDriveComboBox.SetMyFont(const Value: TDrive);
begin
FDrive.Assign(Value);
end;
Но желаемого результата не получилось, в чем я ошибаюсь???
← →
Skier (2003-04-15 18:13) [1]
> Но желаемого результата не получилось, в чем я ошибаюсь???
Что не получается ?
RegisterPropertyEditor надеюсь делаешь ?
Покажи класс редактора свойства...
Если нужнен диалог, то нужно перекрывать метод Edit у
класса-редактора свойства см. TFontProperty
← →
Skier (2003-04-15 18:15) [2]Забыл...и в нужно ещё перекрывать метод GetAttributes
и там ставить
Result := [..., paDialog, ...];
← →
dimonf (2003-04-15 19:35) [3]Вроде сделал все что ты сказал, но так и не могу добиться, что бы у меня по клику на плюсик расхлопывалися дополнительные свойства TDrive
Вот как я это реализовал:
Type
TDrive = class(TPropertyEditor)
private
FDisk: String;
function GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
published
property Disk: String read FDisk write FDisk;
end;
TDisk = class(TStringProperty)
function GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
end;
procedure Register;
begin
RegisterPropertyEditor(TypeInfo(string), TdvDriveComboBox, "Drive", TDrive);
RegisterPropertyEditor(TypeInfo(string), TdvDriveComboBox, "Disk", TDisk);
end;
{ TDisk }
function TDisk.GetAttributes: TPropertyAttributes;
begin
Result := inherited GetAttributes + [paValueList, paSortList];
end;
procedure TDisk.GetValues(Proc: TGetStrProc);
var drv: TList;
i: integer;
begin
drv:=TList.Create;
FullDriver(drv);
for i:=0 to drv.Count-1 do
Proc(PDriveObject(drv.Items[i]).ParsingName);
drv.Free;
end;
{ TDrive }
function TDrive.GetAttributes: TPropertyAttributes;
begin
Result := inherited GetAttributes + [paDialog];
end;
procedure TDrive.GetValues(Proc: TGetStrProc);
begin
Proc("ss");
end;
← →
Skier (2003-04-15 19:44) [4]function TDrive.GetAttributes: TPropertyAttributes;
begin
Result := [paMultiSelect, paSubProperties, paDialog,paReadOnly];
end;
>что бы у меня по клику на плюсик расхлопывалися дополнительные >свойства TDrive
1)Нужно добавить paSubProperties
2)paMultiSelect на счёт paMultiSelect и paReadOnly тебе решать...
← →
dimonf (2003-04-15 19:53) [5]С этим все понятно, а как мне добавить в класс TDrive дополнительные свойства чтобы я мог их в инспекторе объектов редактировать?
У меня получилось вывести Класс с плюсиком но внутри ничего нет 8(
← →
Skier (2003-04-15 20:12) [6]Покажи-ка весь код...
← →
Andryk (2003-04-16 00:19) [7]Все очень просто вы вы допутили грубую ошибку при инициализиализации вашего свойства в конструкторе вашего компонента, и поэтому делфи вам говорить что она не может раскрыть это свойство.
вы написали:
FDrive.Create,
а надо:
FDrive := TDrive.Create
И не надо регистровать никаких редакторов, Дельфи подцепит редактор, по умолчанию.
← →
Skier (2003-04-16 09:14) [8]>Andryk
> FDrive := TDrive.Create
Во, точно ! А слона-то я и не заметил...Спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c