Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.004 c
3-39655
wHammer
2002-04-17 10:09
2002.05.13
ODBC Paradox 7


1-39791
Samvel
2002-04-29 10:34
2002.05.13
Помогите новичку


14-39842
Sergo
2002-04-04 10:45
2002.05.13
Как сделать?


4-39900
Cobalt
2002-03-07 17:20
2002.05.13
Создание окна


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





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