Главная страница
    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.038 c
1-1152435012
17Landgraf
2006-07-09 12:50
2006.08.20
Как узнать, что файл полностью загрузился?


6-1144057516
gamer
2006-04-03 13:45
2006.08.20
Трансляция звука по сети?


15-1153837535
Parus
2006-07-25 18:25
2006.08.20
Сайт


9-1133300574
Ricks
2005-11-30 00:42
2006.08.20
Переключение между Direct3D и OpenGL


2-1154109859
Lexx_Lamer
2006-07-28 22:04
2006.08.20
Вот задачка!!!





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