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

Вниз

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

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

Наверх




Память: 0.5 MB
Время: 0.029 c
1-34912
Valentino
2003-05-31 01:14
2003.06.12
Повторение рисунка в TImage


1-34899
Valentino
2003-05-31 16:57
2003.06.12
TMemo. Скроллинг.


8-34933
Митяй2
2003-02-28 13:25
2003.06.12
ImageList (оптимизация)


3-34688
moorcat
2003-05-22 10:30
2003.06.12
Excel


3-34716
Alex_x
2003-05-23 13:37
2003.06.12
Express QuantumGrid 4