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

Вниз

изменение/добавление свойств у стандартных компонентов   Найти похожие ветки 

 
Alex603081   (2006-03-15 19:11) [0]

Если можно, то как добавить к компоненту TImage новое свойство, например NewProp типа Real или String, чтобы к нему можно было обратьться так: Form1.Image1.NewProp и можно было его и читать и в него записывать.
x:=Form1.Image1.newProp;
Form1.Image1.newProp:=x;

Зарание спасибо


 
Кашперук Иван   (2006-03-15 20:52) [1]

Насколько я знаю, создать компоненту на основании TImage и добавить свойство.
Стандартные думаю менять нельзя.
Если не прав, поправьте.


 
AbrosimovA   (2006-03-16 08:55) [2]

Я обычно иду по пути - создание наследника TImage.

uses ... , ExtCtrls;

type TMyImage = class(TImage)
 private
   FNewProp: real;
 public
   constructor Create(AOwner: TComponent); override;
 published
   property NewProp: real read FNewProp write FNewProp;
 end;

var
 MyImage: TMyImage;

constructor TMyImage.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FNewProp:=2.3;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MyImage:=TMyImage.Create(Self);
with MyImage do begin
 Parent:=Self;
 ...
 Label1.Caption:=FloatToStr(NewProp);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
MyImage.Free
end;


 
adre   (2006-04-02 22:31) [3]

ещё проще в плане создания наследника -
в public пишу необходимые мне свойства.

uses .... ;  

type
  TImageMy = class(TImage)
public
Way : string; // мои свойства
BootFile : string;// мои свойства
Programm : string;// мои свойства
ImText : string;// мои свойства
 end;

Затем в программе создаю объект данного типа с помощью процедуры
with  TImageMy.Create(Self) do
begin
//здесь задаю необходимые мне свойства
end;
у меня это работает, если что не верно поправте.


 
Наиль ©   (2006-04-02 23:54) [4]


> with  TImageMy.Create(Self) do
> begin
> //здесь задаю необходимые мне свойства
> end;

Так можно делать только в том случае, если не собираешься изменять однажды заданные свойства. В противном случае лучше воспользоваться такой записью:

TForm1=class(TForm)
...
ImageMy:TImageMy;
...
end;
...
ImageMy:=TImageMy.Create(Self);
with ImageMy do begin
//здесь задаю необходимые мне свойства
end;
...
with ImageMy do begin
//здесь изменяю необходимые мне свойства
end;


 
AbrosimovA   (2006-04-03 09:29) [5]


> public
> Way : string; // мои свойства
> BootFile : string;// мои свойства
> Programm : string;// мои свойства
> ImText : string;// мои свойства
>  end;


Вообще-то это не свойства, а переменные для описываемого класса.


 
Leonid Troyanovsky ©   (2006-04-04 22:07) [6]


> AbrosimovA   (03.04.06 09:29) [5]

> Вообще-то это не свойства, а переменные для описываемого
> класса.


Которые принято называть полями (fields).

--
Regards, LVT.


 
MPX_NoFear ©   (2006-06-20 15:38) [7]

Товарищи, я конечно извеняюсь... Но какого вы па**тесь?
...
Можно подумать, вы какие-то супер серьезные или показательные программы создаете... Сомневаюсь...
А раз так, то в данном конкретном случае можно било бы просто создать запись которая состояла бы из TImage и String или чего-то еще и все...
Все... Ну мы ведь не на уроке информатики...!!!


 
Юрий Зотов ©   (2006-06-20 22:01) [8]

> MPX_NoFear ©   (20.06.06 15:38) [7]

Предположим, TImage должен рисовать текст на фоне картинки. Идем по вашему пути:

TMyRecord = record
 Image: TImage;
 Text: string
end;

Отлично. Теперь в программе пишу: MyRecord.Text := "что-то".

Внимание, вопрос!

Не подскажете, как сделать, чтобы при изменении текста TImage тут же отобразил новый текст? С учетом того, что сегодня текст в коде программы меняется в 100 произвольных местах, а завтра он будет меняться еще в 100 произвольных местах.

Заранее благодарю.


 
ZeroDivide ©   (2006-06-21 08:28) [9]

Классы хелперы могли бы помочь, но в D7 их еще небыло.

TTest = class
  procedure SomeProc;
end;

TTestHelper = class helper for TTest
  function SomeFunc : string;
end;

С этим определением класса, мы можем использовать следующий код:

var
  t:TTest;
begin
 t:=TTest.Create;
 t.SomeFunc ;
...
даже несмотря на то, что SomeFunc не была определена в классе TTest!


 
StriderMan ©   (2006-06-21 19:06) [10]

я че-то не пойму о чем спор?

как добавить свойство в компонент не создавая компонент-наследник и не переписывая стандартный?



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

Форум: "Компоненты";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.031 c
15-1173046966
kaif
2007-03-05 01:22
2007.04.01
Изображая жертву


2-1173852902
Alex_C
2007-03-14 09:15
2007.04.01
Общие функции - как лучше


2-1173426039
wwwrr
2007-03-09 10:40
2007.04.01
constructor


1-1170426346
Азимов Ризван
2007-02-02 17:25
2007.04.01
Работа с OLEContainer


1-1170675164
Leff
2007-02-05 14:32
2007.04.01
некорректный ClipRect при resize TCustomControl а





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