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

Вниз

Создание компонента   Найти похожие ветки 

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

Наверх




Память: 0.48 MB
Время: 0.007 c
1-39698
Riko
2002-04-29 14:59
2002.05.13
Обработка CloseQuery.


14-39844
savva
2002-04-04 10:22
2002.05.13
После большого числа веток про единство и борьбу...


3-39647
rvs
2002-04-17 11:33
2002.05.13
Query в Query


1-39708
Shiza
2002-04-24 19:09
2002.05.13
Перевод из C++ в дельфи


3-39666
Gamar
2002-04-17 17:06
2002.05.13
Звполнение дат без точек