Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для lenusscik
0 / 0 / 0
Регистрация: 03.11.2019
Сообщений: 77

Как сделать двумерный динамический массив свойством класса

25.02.2020, 10:31. Показов 2223. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется двумерный динамический массив списков Record. Массив является свойством класса. Не получается обращаться к элементам этого массива и самому массиву из другого класса.
Error Index, Read, Write clause expected, but %s found. Подскажите как правильно объявить и обращаться к элементам данного массива

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Type
TGridPoint = record
    X:integer;
    Y:integer;
    ItemIndex:integer;
  end;
TArrGrid = array of array of TGridPoint;
TPageGrid = class(TImage) 
private
  FArrGrid: TArrGrid;
public
  constructor Create (AOwner: TComponent); override;
  destructor Destroy();
published
  property ArrGrid: TArrGrid;
Данный способ нашел на одном форуме, но он не работает
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2020, 10:31
Ответы с готовыми решениями:

Динамический массив как property класса
Добрый день, пытаюсь создать класс в одном из полей которого должен по замыслу храниться динамический массив значений типа 'string',...

Динамический массив как поле класса. Это возможно?
Помогите разобраться , в чем дело? Есть тип TFilterRec . есть еще класс, который содержит поле FilterRec, как динамический массив этого...

Создать двумерный динамический массив произвольного размера NxN (размер ввести). Заполнить массив случайным об
Создать двумерный динамический массив произвольного размера NxN (размер ввести). Заполнить массив случайным образом. Найти все значения...

6
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
25.02.2020, 11:02
Лучший ответ Сообщение было отмечено lenusscik как решение

Решение

Посмотри, как реализовано свойство Cells у компонента TStringGrid

Добавлено через 2 минуты
фишка в том, что чтение/запись нужно осуществлять через геттер/сеттр, а не напрямую

Добавлено через 3 минуты
Delphi
1
property Cells[ACol, ARow: Integer]: string read GetCells write SetCells;
Delphi
1
function GetCells(ACol, ARow: Integer): string;
Delphi
1
procedure SetCells(ACol, ARow: Integer; const Value: string);
как видишь, список и порядок параметров должен быть одинаков
тееб нужно правильно реализовать Get и Set методы, в которых ты будешь читать/писать в массив
1
 Аватар для lenusscik
0 / 0 / 0
Регистрация: 03.11.2019
Сообщений: 77
25.02.2020, 11:13  [ТС]
Спасибо, я понял
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
25.02.2020, 13:08
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
unit Unit2;
 
interface
 
type
  TGridPoint = record
    X: integer;
    Y: integer;
    ItemIndex: integer;
  end;
 
  TMyClass = class
  private
    FArray: array of array of TGridPoint;
    function GetItem(X,Y: integer): TGridPoint;
    procedure SetItem(X,Y: integer; Item: TGridPoint);
  public
    constructor Create;
    property Items[X,Y: integer]: TGridPoint read GetItem write SetItem;
  end;
 
implementation
 
{ TMyClass }
 
constructor TMyClass.Create;
begin
  SetLength(FArray,10,10);
end;
 
function TMyClass.GetItem(X, Y: integer): TGridPoint;
begin
  Result:= FArray[X,Y];
end;
 
procedure TMyClass.SetItem(X, Y: integer; Item: TGridPoint);
begin
  FArray[X,Y]:= Item;
end;
 
end.


Правда, я пока не разобрался, как извне присвоить значение отдельному полю записи. то бишь, вот так

Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Button1Click(Sender: TObject);
var
  I: TGridPoint;
begin
  I.ItemIndex:= 50;
  with TMyClass.Create do
    Items[5,5]:= I;
end;
получается. а так Items[5,5].ItemIndex:= 50; - нет. Нужно курить бамбук

Добавлено через 29 минут
Цитата Сообщение от lenusscik Посмотреть сообщение
Данный способ нашел на одном форуме, но он не работает
потому что ты не дочитал то, что на ТОМ форуме

property ArrGrid: TArrGrid read FArrGrid;
и забыл дописать read FArrGrid

Добавлено через 55 секунд
рабочий пример
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
unit Unit2;
 
interface
 
type
  TGridPoint = record
    X: integer;
    Y: integer;
    ItemIndex: integer;
  end;
  TArrayOfItems = array of array of TGridPoint;
 
  TMyClass = class
  private
    FArray: TArrayOfItems;
  public
    constructor Create;
    property Items: TArrayOfItems read FArray;
  end;
 
implementation
 
{ TMyClass }
 
constructor TMyClass.Create;
begin
  SetLength(FArray,10,10);
end;
 
end.


Добавлено через 1 минуту
Нюанс: размерность массива можно установить только методом класса, как это в примере сделано в конструкторе
0
 Аватар для lenusscik
0 / 0 / 0
Регистрация: 03.11.2019
Сообщений: 77
25.02.2020, 19:19  [ТС]
Все равно ругается компилятор с ошибкой "Published property cannot be of type Array" вот на эту строку
property PointGrid[Col, Row :integer] : TGridPoint read GetPointGrid write SetPointGrid;
Вложения
Тип файла: rar Архив WinRAR (2).rar (3.6 Кб, 2 просмотров)
0
Модератор
4138 / 2352 / 809
Регистрация: 15.11.2015
Сообщений: 9,399
25.02.2020, 19:40
lenusscik, значит, перенеси его в раздел public.
0
 Аватар для lenusscik
0 / 0 / 0
Регистрация: 03.11.2019
Сообщений: 77
25.02.2020, 19:48  [ТС]
Уже сделал(Че это я раньше не додумался что можно published не юзать, ведь я пишу свойства не для инспектора!?!?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.02.2020, 19:48
Помогаю со студенческими работами здесь

Динамический двумерный массив
Почему-то вылезает ошибка в строке SetLength(MassiGrafics, RecCount, 1); Может, кто знает, что делать, чтоб заработало.

Динамический двумерный массив
Здравствуйте. Задача: Задан целочисленный динамический двумерный массив A из n строк и m столбцов. Найти минимальное значение...

Двумерный динамический массив
Дана действительная квадратная матрица порядка n (n ≥2). 1 Найти сумму элементов указанного пользователем столбца. 2 Найти...

Динамический двумерный массив
Здравствуйте! Подскажите, какой оператор применяют для обозначения его размера?

Двумерный динамический массив
Ссори за тупой вопрос. В инете искал не нашел. Как создать двумерный динамический массив? Особо нет необходимости, мне просто интересно


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru