|
Вопрос # 558/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Подскажите ,пожалуйста, как в delphi
создавать массивы объектов(например кнопок).
Заранее спасибо.
 |
Вопрос задал: Меньшиков И.Л. (статус: Посетитель)
Вопрос отправлен: 8 мая 2007, 08:04
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: min@y™
Конечно, никто не спорит, что такая конструкция как Buttons: array of TButton имеет право на существование. Но, имхо, есть способ лучше: можно юзать список TList (список указателей).
Добавление: List.Add(Button1);
Удаление: List.Delete(Index);
Обращение: TButton(List[Index]).Enabled:= False;
И т.д.
Вопросы есть? По мылу!
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 8 мая 2007, 08:18
|
Ответ #2. Отвечает эксперт: Дмитрий-998
Здравствуйте, Меньшиков И.Л.!
Есть еще вот такой вариант..
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- procedure ClickButtons(Sender: TObject);
- private
- { Private declarations }
- public
- ButtonArray: Array of TButton;
- { Public declarations }
- procedure AddButtons(CountButton: Integer);
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.ClickButtons(Sender: TObject);
- begin
- ShowMessage('Ok! Enjoy!');
- end;
-
- procedure TForm1.AddButtons(CountButton: Integer);
- var
- i: Integer;
- begin
- SetLength(ButtonArray, CountButton);
- for i := 0 to CountButton - 1 do
- begin
- ButtonArray[i] := TButton.Create(Application);
- ButtonArray[i].Top:= I*30;
- ButtonArray[i].Left:= 100;
- ButtonArray[i].Width := 75;
- ButtonArray[i].Height:= 25;
- ButtonArray[i].Visible := true;
- ButtonArray[i].Font.Name:= 'Tahoma';
- ButtonArray[i].Font.Style:= [fsBold];
- ButtonArray[i].Caption := 'Button ' + IntToStr(I);
- ButtonArray[i].Tag := i + 100;
- ButtonArray[i].OnClick := ClickButtons; //Событие OnClick
-
- ButtonArray[i].Parent := Form1; //Ставим кнопку на форму
- end;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- AddButtons(5);
- end;
-
- end.
-
 |
Ответ отправил: Дмитрий-998 (статус: 1-ый класс)
Время отправки: 8 мая 2007, 09:34
|
Ответ #3. Отвечает эксперт: Матвеев Игорь Владимирович
Здравствуйте, Меньшиков И.Л.!
Объект - экземпляр класса, переменная объекта - указатель на экземпляр, массив переменных объектов - массив указателей, т.е. двойных слов.
А во что там Вы его (массив) обернете: в LongWord, Pointer или непосредственно в TButton, например, зависит только от Вас.
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 13 октября 2014, 22:56; участников в обсуждении: 2.
|
min@y™ (статус: Доктор наук), 8 мая 2007, 08:22 [#1]:
Кстати, есть исчо такой список как TObjectList. Предназначен именно для хранения указателей на ОБЪЕКТЫ, т.е. экземпляры классов. Его свойство OwnsObjects: Boolean отвечает за освобождение памяти из-под объектов (вызов их деструкторов) при уничтожении самого TObjectList.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
zvygin1964 (статус: Посетитель), 13 октября 2014, 22:56 [#2]:
Ну где, где-же увидеть полноценный пример с TObjectList!!!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|