Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];

Вниз

Ошибка при создании компанента   Найти похожие ветки 

 
Pattern   (2003-05-29 23:38) [0]

Сделал составной компанент. На TCustomPanel находится TLabel. Добавляю новое свойство PicName, чтобы заполненное название в свойствах на PicName передалось на Caption этой TLabel.

private
FPicName: TCaption;
...

published
property PicName: TCaption
read FPicName
>>> write SetPictureName; //ругается на эту строку
procedure SetPictureName(Value: TCaption);
...

procedure TFxPicView.SetPictureName(Value: TCaption);
begin
MyLabel.Caption := PicName;
end;

При компиляции выдаёт ошибку
Field or method identifier expected
Подскажите, что здесь не так?


 
Юрий Зотов   (2003-05-30 01:02) [1]

Процедура SetPictureName объявлена ПОСЛЕ того, как использована. Значит, в момент использования она неизвестна.

Переместите выше. Обычно в private.


 
Pattern   (2003-05-31 06:48) [2]

100 в гору... Прогнал... Хотя до этого у меня почему то не получилось. Спасибо за помощь. d;)


 
Anatoly Podgoretsky   (2003-05-31 07:11) [3]

И не просто выше, а в секцию private
И кроме того явно бессмысленая процедура или неверная. Предполагалось установка FPicName или оно лишнее совсем, Value совсем не используется.

procedure TFxPicView.SetPictureName(Value: TCaption);
begin
FPicName := Value;
MyLabel.Caption := Value;
end;


 
Pattern   (2003-05-31 15:45) [4]

Это я просто проводил эксперимент... Всё заработало. На самом деле всё намного проще решается:

private
...
function GetPictureName_: TCaption;
procedure SetPictureName_(Value: TCaption);
...

published
...
property PictureName: TCaption read GetPictureName_ write SetPictureName_;
...

function TFxPicView.GetPictureName_: TCaption;
begin
Result := FxLabel.Caption;
end;

procedure TFxPicView.SetPictureName_(Value: TCaption);
begin
FxLabel.Caption := Value;
end;


А вот встречный вопрос. Как сделать, чтобы TCustomPanel не отображало Caption? Если его не указывать в publisher, то это свойство просто отсутствует, но тем не менее оно на самой панели прописывается.


 
jack128   (2003-05-31 15:56) [5]

Caption := ""; ???


 
Pattern   (2003-05-31 16:08) [6]

2jack128 >>
Это понятно. Если так написать, то во время создания компонента она исчезает, а во время проектирования оно всё равно находится по середине компаненты.


 
Юрий Зотов   (2003-05-31 19:25) [7]

Caption := "" в конструкторе .


 
Pattern   (2003-06-01 17:13) [8]

2Юрий_Зотов >>
Ну это естественно что в конструкторе. Он у меня так и прописан:

constructor TFxPicView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FxLabel := TLabel.Create(Self);
FxLabel.Parent := Self;
FxImage := TImage.Create(Self);
FxImage.Parent := Self;
Caption := "";

А как-нить можно избавиться от свойств Width и Height?


 
Юрий Зотов   (2003-06-01 20:24) [9]

1. И что, Caption у панели не исчезает?
2. Избавиться - нельзя, убрать из Object Inspector - можно (зарегистрировав NIL вместо редактор свойства).


 
Pattern   (2003-06-02 13:25) [10]

1. Во время проектирования не исчезает, а вот когда запускается на форме, тогда исчезает.
2. А вот этого не понял. Как зарегистрировать NIL вместо редактора свойств? Вместо property написать NIL что ли?????
d%(


 
Skier   (2003-06-02 13:39) [11]

>Pattern © (02.06.03 13:25)
RegisterPropertyEditor(TypeInfo(TYourType), TYourComponent, "YourPropertyName", nil);


 
Юрий Зотов   (2003-06-02 13:40) [12]

1. В конструкторе напишите:
ControlStyle := ControlStyle - [csSetCaption];

2. В RegisterPropertyEditor указать nil вместо класса редактора.


 
Pattern   (2003-06-02 13:52) [13]

Всё понял! Огромное спасибо всем отозвавшимся мастерам своего дела!!!


 
Pattern   (2003-06-02 17:10) [14]

Ну вот так всегда. Разобраться разобрался, а сделать никак не могу. В книге Марко Кэнту написано, что он использует для этого RegisterPropertyInCategory, предварительно занеся в uses модуль DsgnIntf. Я когда пытаюсь этот модуль вогнать в uses, он мне пишет, что такого модуля не находит... Может для Delphi7 друой модуль используется?


 
Skier   (2003-06-02 17:25) [15]

пропиши к нему путь (Environment Options|Library|Library Path)
молудь DsgnIntf.pas должен лежать в ...\Source\ToolsAPI\


 
Skier   (2003-06-02 17:43) [16]

>Pattern © (02.06.03 17:10)
"Замираю в глубоком пардоне" :) в D7 он называется DesignIntf.pas


 
Pattern   (2003-06-02 18:23) [17]

2 Юрий Зотов, Anatoly Podgoretsky, jack128, Skier ->>
ВСЕМ ОГРОМНОЕ СПАСИБО ЗА ВАШЕ ПОТРАЧЕННОЕ ВРЕМЯ!!!!!!!!!
Всё прекарсно заработало!!!!!!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
14-35041
rainbow_13
2003-05-26 12:26
2003.06.12
поиск адресов


7-35093
v.topalov
2003-04-09 12:36
2003.06.12
COM порт


1-34849
KpeHgeJIb
2003-05-30 16:48
2003.06.12
Работа с риестром


1-34876
Seldon
2003-05-30 22:43
2003.06.12
MDI


14-34976
LikeLamer
2003-05-28 16:04
2003.06.12
Express Inspector (от DevExpress)





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