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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2010, 14:23   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Присваивание записи блока памяти.

Есть у меня некоторая запись, например
Код:
TC = Record
 S1 : String[512];
 S2 : String[512];
 S3 : String[512];
 S4 : String[512];
Эта запись - один из элементов массива. Чтобы заполнить весь массив мне требуется написать достаточно много однообразного кода:
Код:
С[0].S1 := '.......'; // Это все строки, которые находятся в константах.
C[0].S2 := '................';
C[0].S3 := '.......................';
C[0].S4 := '.........';
С[1].S1 := '.......';
C[1].S2 := '................';
C[1].S3 := '.......................';
C[1].S4 := '.........';
....
Можно ли составить код иначе, чтобы код подобного рода был не на 5 страниц, а хотя бы на страницу. В общем, можно ли назначить одной записи все поля в одну команду? Понимаю, что можно составить для этого процедуру или функцию. А есть ли что-нибудь встроенное?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 04.09.2010, 15:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) Коллега, а в чём компилируете?!
дело в том, что String не может быть 512:
Цитата:
Код:
type
 TC = Record
   S1 : String[512];
...
[Error] Unit1.pas(20): String literals may have at most 255 elements
это раз.

2) можно использовать такой подход:
Код:
Const
  C : array[0..1] of TC = ( (
     S1: 'Первая'; S2: 'Вторая';
     S3: 'Третья'; S4: 'Четвёртая'),
     (S1: 'второй элемент - s1'; S2: 'Второй - s2';
     S3: '...'; S4: '...'))
    ;
begin
  Button1.Caption := C[0].S1 +' | '+ C[1].S1;
...
3) вот как раз для таких целей идеально подходит чтение из внешнего файла (например, var f : file of TC; )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.09.2010, 15:50   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

1) 512 указал чисто для примера. Забыл про ограничение.
2) Хм... Посмотрим.
3) Дело в том, что это дефолтные настройки, которые активизируются, когда НЕТ файла конфигурации.

Создал функцию, как компромис между "ручной подачей" и 2.

Спасибо.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 04.09.2010, 17:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
3) Дело в том, что это дефолтные настройки, которые активизируются, когда НЕТ файла конфигурации.
а не проще засунуть типовой файл конфигурации в ресурс. И вытягивать его оттуда в случае отсутствия его в каталоге с программой.
Одни плюсы - и редактировать его легко. И код будет простейший (буквально несколько строчек). Да и потом, в случае необходимости можно будет этот файл легко заменить (хотя бы и самому пользователю, если есть желание)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.09.2010, 18:08   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Хм.... подумаю над этим.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 04.09.2010, 18:53   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Обычно делают так: просто читают из файла конфигурации. Если опции нет (как частный случай: вообще нет файла) - применяют значение по-умолчанию.

Как-то так:
Код:
S1 := ReadSetting('General', 'S1', 'значение по-умолчанию для S1');
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не хватает памяти для записи рисунка в БД Pound БД в Delphi 3 11.01.2011 18:53
Datagridview. Копирование и присваивание. Arhe Общие вопросы .NET 3 09.09.2009 16:34
разъясните терминалогию,референсная частота,частота чипа,памяти,шейдерного блока Jesus2.0 Компьютерное железо 5 04.05.2009 07:54
Присваивание объектов Stalevar Общие вопросы Delphi 0 17.02.2009 19:06
динамическое присваивание параметров The Doberman БД в Delphi 0 14.09.2007 07:58