Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2021, 15:25   #1
Катя93
Пользователь
 
Регистрация: 11.01.2021
Сообщений: 48
По умолчанию Как заполнить многомерный массив разными данными цвета? D3DCOLOR_XRGB

Я создала многомерный массив. Мне нужно заполнить его вещественными числами и еще добавить функцию D3DCOLOR_XRGB. Какой тип массива указать при создании?

Если воспользоваться extended выдает ошибку.
Цитата:
[Error] primer.pas(142): Constant expression expected
Если вместо D3DCOLOR_XRGB добавить число с точкой например 1.0, то все работает, но мне нужно конкретно добавить D3DCOLOR_XRGB. Пример:
Код:
 vertices: array[0..7, 0..3] of extended = (
    (-1.0, -1.0, -1.0,  D3DCOLOR_XRGB( 255,   0,   0)),
    (-1.0, 1.0, -1.0, D3DCOLOR_XRGB(   0, 255,   0)),
     (1.0, -1.0, -1.0, D3DCOLOR_XRGB(   0,   0, 255)),
     (1.0, 1.0, -1.0, D3DCOLOR_XRGB( 255, 255,   0)),
     (1.0, -1.0, 1.0, D3DCOLOR_XRGB( 255,   0, 255)),
     (1.0, 1.0, 1.0,  D3DCOLOR_XRGB(   0, 255, 255)),
     (-1.0, -1.0, 1.0, D3DCOLOR_XRGB(   0,   0,   0)),
     (-1.0, 1.0, 1.0, D3DCOLOR_XRGB( 255, 255, 255))
   );
Катя93 вне форума Ответить с цитированием
Старый 12.01.2021, 22:37   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Так и должно быть. Макрос D3DCOLOR_XRGB (а не функция) определяет 3 целочисленных значения, которые не могут быть впихнуты в вещественный массив, и компилятор лается на несоответствие типов. Видимо, нужно создать массив записей (RECORDS) и его инициализировать. Или отдельно - массив вещественный и целочисленный цветовой.
https://firststeps.ru/mfc/directx/dxhelp/r.php?14
digitalis вне форума Ответить с цитированием
Старый 13.01.2021, 06:50   #3
Катя93
Пользователь
 
Регистрация: 11.01.2021
Сообщений: 48
По умолчанию

Этот пример взят с MicroSoft Visual C++ 6.0. Пытаюсь сделать это на delphi. На C++ это выглядит вот так. Как сделать это на delphi я не знаю.
Код:
MyVertex v[] =
	{
		{ -1.0f, -1.0f, -1.0f, D3DCOLOR_XRGB( 255,   0,   0), }, 
		{ -1.0f,  1.0f, -1.0f, D3DCOLOR_XRGB(   0, 255,   0), }, 
		{  1.0f, -1.0f, -1.0f, D3DCOLOR_XRGB(   0,   0, 255), }, 
		{  1.0f,  1.0f, -1.0f, D3DCOLOR_XRGB( 255, 255,   0), }, 
		{  1.0f, -1.0f,  1.0f, D3DCOLOR_XRGB( 255,   0, 255), }, 
		{  1.0f,  1.0f,  1.0f, D3DCOLOR_XRGB(   0, 255, 255), },
		{ -1.0f, -1.0f,  1.0f, D3DCOLOR_XRGB(   0,   0,   0), }, 
		{ -1.0f,  1.0f,  1.0f, D3DCOLOR_XRGB( 255, 255, 255), }
	};
Катя93 вне форума Ответить с цитированием
Старый 13.01.2021, 11:12   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

А если так:
Код:
type anything = record
     flt:array[0..2] of Extended;
     colr:array[0..2] of integer;
end;
 
const nifiga:array[0..7] of anything = (
      (flt:-1.0,-2.0,-3.0; colr:D3DCOLOR_XRGB( 255, 255, 255)),
       ...............................
      (flt:-2.0,-1.0,0.0; colr:D3DCOLOR_XRGB( 2, 5, 0))
      );
см. https://delphisources.ru/forum/showthread.php?t=25926
Попробовал - не скомпилилось, не знает он этого макроса D3DCOLOR_XRGB . Выбросил имя, толку от него никакого - всё стало ОК. Только цвета - байтовый массив.
Код:
type anything = record
     flt:array[0..2] of Extended;
     colr:array[0..2] of byte;
end;

const nifiga:array[0..7] of anything = (
      (flt:(-1.0,-2.0,-3.0); colr:( 255, 255, 255)),
       ...............................
      (flt:(-2.0,-1.0,0.0); colr:( 2, 5, 0))
      );

Последний раз редактировалось digitalis; 13.01.2021 в 11:26.
digitalis вне форума Ответить с цитированием
Старый 14.01.2021, 12:42   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Ну всё, похоже, массив цветов заполнился сам собой. Так что я зря старался.
digitalis вне форума Ответить с цитированием
Старый 14.01.2021, 13:06   #6
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от Катя93 Посмотреть сообщение
На C++ это выглядит вот так.
Не совсем. Вы забыли про:
Код:
struct MyVertex
{
    D3DXVECTOR3 position;
    D3DCOLOR    color;
};
А это не массив флоатов или интеджеров.
FrosyaZZ вне форума Ответить с цитированием
Старый 02.02.2021, 15:09   #7
Катя93
Пользователь
 
Регистрация: 11.01.2021
Сообщений: 48
По умолчанию

Спасибо всем за помощь, я изучаю книгу по Delphi Фленова, по этому не могу часто отвечать. Вот что у меня получилось.
box.png
Катя93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ComboBox на UserForm заполнить данными с другого листа ? Snekich Microsoft Office Excel 2 08.12.2011 18:37
как заполнить накладную в книге данными из 1листа во 2м в 1м данные заполняются вручную POSOL8 Microsoft Office Excel 3 03.04.2011 07:58
Как описать многомерный массив в VBA me-lo Microsoft Office Word 3 04.02.2011 12:29
Как создать многомерный динамический массив в Delphi? Velross Помощь студентам 3 06.01.2010 20:50
Как заполнить форму данными из таблицы применяя макет dgadavin Microsoft Office Excel 5 11.09.2009 14:45