Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.139.59] |
|
Сообщ.
#1
,
|
|
|
Есть функция, во которая работает с двумерным массивом String
function TForm1.AllGud(const MassivQu:TCellsType):Integer; и тип массив задаётся как TCellsType=array of array of String; Я хочу передать в функцию массив StringGrid.Cells командой if AllGud(StringGrid1.Cells)=-1 then ... Цитата [Error] OneModule.pas(88): '[' expected but ')' found Возможно дело в несовместимости типов или неправильном задании типа массива? Или стоит скопировать все элементы из .Cells в новый массив и его передавать (хотя, конечно, удобнее без лишних операций)? В целом массив .Cells будет иметь одну единственную заранее известную размерность и количество элементов. В каком месте я делаю ошибку? |
Сообщ.
#2
,
|
|
|
ChimMAG
Так для StringGrid1.Cells нужно обязательно указать номер строки и столбца в квадратных скобках []. об этом говорит компилятор. Добавлено Цитата ChimMAG @ В целом массив .Cells будет иметь одну единственную заранее известную размерность и количество элементов. Я думаю что проще в массив его загнать или прямо в функции напрямую к StringGrid1 обращаться. |
Сообщ.
#3
,
|
|
|
1. То есть это не совсем "обычный" массив?
2. Если создаю двумерный строковой массив a и пишу a:=GridString1.Cells; 3. Обходной путь я придумал, но хочется понять, почему так "не катит". |
Сообщ.
#4
,
|
|
|
> То есть это не совсем "обычный" массив?
Cells не массив, а индексированное свойство (array property), обращение к которому выглядит, как обращение к массиву (т.н. "синтаксический сахар"). >То есть копировать только поэлементно? Да, копировать поэлементно - под это можно сделать функцию. Вообще есть свойство Rows, которое возвращает TStrings с ячейками одной строки, но это все равно не массив, да и внутри геттера этого свойства может выполняться немалая работа. >но хочется понять, почему так "не катит". Язык строго типизированный, массиву определенного типа можно присвоить только массив такого же типа (нельзя даже c точно таким же объявлением). В данном случае свойство типа TCellsType отсутствует, взять нечего. |
Сообщ.
#5
,
|
|
|
Цитата ChimMAG @ a:=GridString1.Cells a:=GridString1.Cells[1,2]; Без [] не работает. |
Сообщ.
#6
,
|
|
|
Ясно, спасибо.
|