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

Вниз

Компонет и переменная   Найти похожие ветки 

 
Ezorcist   (2006-08-01 23:30) [0]

Вот простой пример.


var
 Form1: TForm1;
 B:TButton;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 B:=TButton.Create(Form1);
 B.Left:=10;
 B.Top:=10;
 B.Height:=100;
 B.Width:=100;
 B.Name:="my";
 b.ParentWindow:=form1.WindowHandle;

end;

procedure TForm1.Button2Click(Sender: TObject);
Var a:pointer;
begin
 a:=b;
 tbutton(a).Caption:="bla-bla";
end;

procedure TForm1.Button3Click(Sender: TObject);
Var a:tbutton;
begin
 a:=b;
 a.Caption:="bla-bla 222";
end;

end.


И простой вопрос: где правильно написано? в кнопке 2 или кнопке3? работает и там и там


 
Ketmar ©   (2006-08-01 23:34) [1]

и там, и там. и в обоих местах криво. %-) правильней так:
(Sender as TButton).Caption := " ";


 
DiamondShark ©   (2006-08-02 00:32) [2]


> где правильно написано?

а для ответа надо задачу по-русски сформулировать.
если получится что-то вроде "по событию изменить текст на кнопке B вне зависимости от источника события", то везде правильно, разница только в психоделичности ;)
а вот если формулировка будет "изменить текст на кнопке, вызвавшей событие", то оба неправильные, а правильный -- [1].


 
Ezorcist   (2006-08-02 15:10) [3]


> изменить текст на кнопке, вызвавшей событие

Причем тут Sender вообще? Ведь в примере кнопка 2 и кнопка 3 меняю надпись на кнопке my а не на самих себе. :\


 
Ketmar ©   (2006-08-02 15:33) [4]

> [3] Ezorcist   (02.08.06 15:10)

вопрос: а нахрена это делать через анус соседа?


 
Джо ©   (2006-08-02 16:01) [5]

B.Caption := "bla-bla";


 
Leonid Troyanovsky ©   (2006-08-02 16:37) [6]


> Джо ©   (02.08.06 16:01) [5]

> B.Caption := "bla-bla";


где B - поле формы.

--
Regards, LVT.


 
Джо ©   (2006-08-02 16:46) [7]

> [6] Leonid Troyanovsky ©   (02.08.06 16:37)
> где B - поле формы.

Принимается :)


 
Ezorcist   (2006-08-02 17:00) [8]

Это только в примере все так просто можно)) а в программе есть массив компонентов, ссылки на которые надо разместить в другом массиве, вот я и думаю как объявить переменные Point или TMyComp. Что бы работало быстрее, а том кол-во компонентов приличное весьма.


 
Ketmar ©   (2006-08-02 17:27) [9]

> [8] Ezorcist   (02.08.06 17:00)

двести миллионов миллиардов? нет? тогда писать так, чтобы было красиво.
вообще, есть такое правило: не надо оптимизировать ненаписаный код.


 
Zeqfreed ©   (2006-08-02 17:29) [10]

> [8] Ezorcist   (02.08.06 17:00)

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


 
Leonid Troyanovsky ©   (2006-08-02 17:36) [11]


> Ezorcist   (02.08.06 17:00) [8]

> Point или TMyComp. Что бы работало быстрее, а том кол-во
> компонентов приличное весьма.


Чтобы работало быстрее, надо использовать сам массив,
а не массив ссылок на его элементы.

--
Regards, LVT.


 
Ezorcist   (2006-08-02 23:23) [12]


>
> Чтобы работало быстрее, надо использовать сам массив,
> а не массив ссылок на его элементы.

А вот если я создаю массив компонентов, то переменные будут содержать в себе компоненты или только указывать на них? (извиняюсь, если вопрос глупый :( )


 
Джо ©   (2006-08-02 23:30) [13]

> [12] Ezorcist   (02.08.06 23:23)
>
> >
> > Чтобы работало быстрее, надо использовать сам массив,
> > а не массив ссылок на его элементы.
>
> А вот если я создаю массив компонентов, то переменные будут
> содержать в себе компоненты или только указывать на них?

Указатели, разумеется.


 
Rial ©   (2006-08-02 23:35) [14]

Указвать.

Var A:TButton;
    B:TButton;

B:=A;
A.Free;
B.Caption:="Bla Bla" - AV, так как A и B указывают на один класс.
Да и еще в строке B:=A - скорее всего, утечка памяти, так как ссылку на B теряем.

Это все равно что:
Type
       TMyVar=record
         A, B, C, D : Extended;
        end;
        PMyVar = ^MyVar;

Var A,B : PMyVar;

...
A:=B;
Dispose(B);
И что теперь в A?
Правильно, указатель "не туда".



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

Текущий архив: 2006.08.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
3-1150133766
kaif
2006-06-12 21:36
2006.08.20
Обрезание имен UTF-8 при добавлении юзера в IBSecurityService


11-1131533055
Ефременко Алексей
2005-11-09 13:44
2006.08.20
Модули, требующиеся для компиляции mirror.pas


11-1131571657
Flea
2005-11-10 00:27
2006.08.20
вопрос по PopupMenu


9-1133198066
Зм1й
2005-11-28 20:14
2006.08.20
Вопрос по 3DS Max


1-1152113846
Muchacho
2006-07-05 19:37
2006.08.20
генератор отчетов для Delphi 2006 .NET