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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.04 c
2-1154319423
MSSS
2006-07-31 08:17
2006.08.20
Регулировака громкости


2-1154587610
холодильник
2006-08-03 10:46
2006.08.20
Скриншот


4-1145516275
Dimich1978
2006-04-20 10:57
2006.08.20
Программно нажать на кнопку закрытия формы(крестик)


15-1153391517
Vlad
2006-07-20 14:31
2006.08.20
Ваша гражданская позиция (небольшой опрос)


2-1154100660
qwe777
2006-07-28 19:31
2006.08.20
Добавление записей DBGrid





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