Здравствуйте!
Необходимо вписать в TShape текст (TLabel), а также научить этот новый TShape по клику передавать параметр(ы). Нужно переписать компонент TShape? Помогите плз ....
Я в Delphi новичок, но в примере разобраться смогу :-)
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
25-02-2005 02:55
Не понял только, причем тут TLabel?
Нужно определить новый класс -- потомок TShape -- ну и определи его. Чтобы не морочиться с регистрацией собственного компонента, можешь определить его с тем же именем TShape путем указания модуля, в котором лежит оригинальный TShape. Например, так:
type
TShape = class(ExtCtrls.TShape)
В этом случае ты сможешь позиционировать в билдере оригинальный TShape, а при работе программы будет использлваться твой собственный.
Ну а после этого тебе надо будет добавить к своему классу поле, хранящее текст для вывода и дописать процедуру Paint.
constructor TShape.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FMyLabel:='';
end;
procedure TSape.SetMyLabel(const S : String);
begin
if MyLabel = S then Exit;
FMyLabel:=S;
Invalidate;
end;
procedure TShape.Paint;
begin
inherited Paint;
//Дальше свой собственный вывод строки, например такой:
Canvas.TextOut(2,2,MyLabel);
end;
Комментарии к коду.
1. Конструктор можно не создавать (наверное). Но я с давних времен люблю явно инициализировать все введенные мной переменные (или поля моих классов), чтобы быть уверенным в правильном их начальном значении. Это только в VBA вновь созданная строка изначально является пустой.
2. По уму, если у тебя есть текст, то нужно заводить еще и свойство Font, и, может быть, какое-нибудь выравнивание. Соответствующим образом надо выполнять вывод текста в процедуре Paint.
3. Про обработку клика ищи сам. И непонятно (куда передавать?), и, честно говоря, лениво все делать за тебя :-)
А вообще-то смотри реализацию VCL-компонент. Очень способствует освоению.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.