Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
ВнизСоздание компонента Найти похожие ветки
← →
Сатир (2002-04-26 16:45) [0]Вопрос к спецам в области создания компонентов.
Объявляю поле FSourceFile:String; а компилятор выдает ошибку
published field FSourceFile not a class nor interface type
Вот код целиком
type
TMDcGroupBar = class(TcustomDcGroupBar)
FSourceFile:String;
function SetSource:string;
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property SourceFile:String read FSourceFile write SetSource;
end;
procedure Register;
implementation
function TMDcGroupBar.SetSource;
var OpenDialog:TOpenDialog;
begin
OpenDialog:=TOpenDialog.Create(self);
with OpenDialog do begin
filter:="XML files|*.xml";
if execute then Result:=filename;
end;
end;
procedure Register;
begin
RegisterComponents("Samples", [TMDcGroupBar]);
end;
end.
Помогите советом, пожалуйста.
← →
MBo (2002-04-26 17:07) [1]TMDcGroupBar = class(TcustomDcGroupBar)
private
FSourceFile:String;
procedure SetSource(const Value:string);
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property SourceFile:String read FSourceFile write SetSource;
end;
procedure TMDcGroupBar.SetSource(const Value:string);
var OpenDialog:TOpenDialog;
begin
OpenDialog:=TOpenDialog.Create(self);
with OpenDialog do begin
filter:="XML files|*.xml";
if execute then FSourceFile:=filename;
end;
end;
← →
Юрий Федоров (2002-04-26 17:07) [2]private
FSourceFile:String;
procedure SetSource(const value: string);
← →
Сатир (2002-04-26 18:11) [3]Тогда по ходу ещё один вопрос. А как сделать это свойство редакторного типа, ну как Caption для Label или Hint.
То есть, чтобы сохранять в нём содержимое открытого файла?
И вопрос к MBo: Зачем в процедуру передавать константу Value, если она в процедуре нигде не используется?
← →
Сатир (2002-04-26 18:19) [4]Да, и это свойство как-то криво работает:-(
Во-первых, для открытия файла нужно сначала ввести любой символ, потом выйти из этого поля ввода, и только после этого открывается Open Dialog. Но после закрытия, свойство не обновляется автоматически.
Поэтому прошу совета, как вызвать окно открытия файла двойным кликом в поле ввода?
И вторая беда. При запуске приложения с этим компонентом автоматически открывается окно открытия файла. Как это побороть?
← →
Vovchik (2002-04-26 22:42) [5]> Сатир
Оно не криво работает, а нормально. Дело вот в чём. При чтении из свойства нужно указывать ф-цию, которая возвращает значение того же типа, то и свойство. А при записи в свойство - процедуру, которая собственно эту запись и делает. Поэтому у процедуры есть параметр - новое значение свойства. Вот пример:
TMyComponent=class(TComponent)
private
FSourceFile:string;
function GetSourceFile:string;
procedure SetSourceFile(V:string);
published
property SourceFile:String read GetSourceFile write SetSourceFile;
end;
function TMyComponent.GetSourceFile:string;
begin
Result:=SourceFile;
end;
procedure TMyComponent.SetSourceFile(V:string);
begin
SourceFile:=V;
end;
При чтении свойства вызывается ф-ция, а при записи - процедура. А в твоём случае нужно выйти из поля, чтобы открылся диалог, потому что только при выходе происходит попытка записи в поле и вызывается процедура SetSourceFile.
Если надо, чтобы у твоего свойства в инспекторе объектов была маленькая кнопочка, при нажатии на которую открывается некое окно редактирования этого свойства, то это делает совсем не так. А как - я не помню. Посмотри в исходниках какого-нибудь компонента, где это сделано. Посмотри хелп в Дельфях на процедуру RegisterComponentEditor.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c