Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-91255
Sanek
2003-04-15 15:57
2003.04.28
Проблемы с TextOutW


1-91355
888
2003-04-15 06:37
2003.04.28
как сделать чтобы от формы оставался один заголовок


3-91167
tv
2003-04-07 16:17
2003.04.28
Программная репликация базы MS Access из Delphi


7-91568
Maks
2003-03-10 22:35
2003.04.28
Сканер


1-91385
Spartak
2003-04-15 12:10
2003.04.28
Убрать переход в режим асемблерного кода при отладке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский