Форум: "Начинающим";
Текущий архив: 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