Главная страница
    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.46 MB
Время: 0.004 c
3-39648
Filippov Stas
2002-04-17 12:01
2002.05.13
сканирование БД


14-39856
Desdechado
2002-04-03 12:57
2002.05.13
тест


14-39837
kosty
2002-04-03 08:16
2002.05.13
база


6-39815
Dim2511
2002-02-28 18:14
2002.05.13
I need some help


4-39909
SerVS - S
2002-03-12 17:10
2002.05.13
HOOKs





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский