Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 558

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Подскажите ,пожалуйста, как в 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

Здравствуйте, Меньшиков И.Л.!

Есть еще вот такой вариант..

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. procedure Button1Click(Sender: TObject);
  13. procedure ClickButtons(Sender: TObject);
  14. private
  15. { Private declarations }
  16. public
  17. ButtonArray: Array of TButton;
  18. { Public declarations }
  19. procedure AddButtons(CountButton: Integer);
  20. end;
  21.  
  22. var
  23. Form1: TForm1;
  24.  
  25. implementation
  26.  
  27. {$R *.dfm}
  28.  
  29. procedure TForm1.ClickButtons(Sender: TObject);
  30. begin
  31. ShowMessage('Ok! Enjoy!');
  32. end;
  33.  
  34. procedure TForm1.AddButtons(CountButton: Integer);
  35. var
  36. i: Integer;
  37. begin
  38. SetLength(ButtonArray, CountButton);
  39. for i := 0 to CountButton - 1 do
  40. begin
  41. ButtonArray[i] := TButton.Create(Application);
  42. ButtonArray[i].Top:= I*30;
  43. ButtonArray[i].Left:= 100;
  44. ButtonArray[i].Width := 75;
  45. ButtonArray[i].Height:= 25;
  46. ButtonArray[i].Visible := true;
  47. ButtonArray[i].Font.Name:= 'Tahoma';
  48. ButtonArray[i].Font.Style:= [fsBold];
  49. ButtonArray[i].Caption := 'Button ' + IntToStr(I);
  50. ButtonArray[i].Tag := i + 100;
  51. ButtonArray[i].OnClick := ClickButtons; //Событие OnClick
  52.  
  53. ButtonArray[i].Parent := Form1; //Ставим кнопку на форму
  54. end;
  55. end;
  56.  
  57. procedure TForm1.Button1Click(Sender: TObject);
  58. begin
  59. AddButtons(5);
  60. end;
  61.  
  62. end.
  63.  


Ответ отправил: Дмитрий-998 (статус: 1-ый класс)
Время отправки: 8 мая 2007, 09:34

Ответ #3. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Меньшиков И.Л.!
Объект - экземпляр класса, переменная объекта - указатель на экземпляр, массив переменных объектов - массив указателей, т.е. двойных слов.

А во что там Вы его (массив) обернете: в LongWord, Pointer или непосредственно в TButton, например, зависит только от Вас.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 8 мая 2007, 12:33


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 13 октября 2014, 22:56; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 8 мая 2007, 08:22 [#1]:

Кстати, есть исчо такой список как TObjectList. Предназначен именно для хранения указателей на ОБЪЕКТЫ, т.е. экземпляры классов. Его свойство OwnsObjects: Boolean отвечает за освобождение памяти из-под объектов (вызов их деструкторов) при уничтожении самого TObjectList.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zvygin1964

zvygin1964 (статус: Посетитель), 13 октября 2014, 22:56 [#2]:

Ну где, где-же увидеть полноценный пример с TObjectList!!!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:00
Выполнено за 0.02 сек.