Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.28;
Скачать: CL | DM;

Вниз

Подскажите как сделать редактор свойств для своего компанента?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
1-91311
Slonic75
2003-04-15 12:58
2003.04.28
Java API в Delphi


7-91565
Ал
2003-03-11 14:21
2003.04.28
Можно и нужно ли устанавливать screensaver в папку c: Windows?


1-91325
saska
2003-04-15 15:30
2003.04.28
Убить TStringlist


14-91493
DiamondShark
2003-04-09 18:27
2003.04.28
Хочу поделиться радостью


1-91357
shurik
2003-04-15 21:30
2003.04.28
стиль ХР