Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2008, 09:50   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Много переменных

Привет всем!
У меня такая ситуация:
Короче есть рекод и в нём переменные, снасало все было ОК но потом я решил добавить несколько переменных. И что-же у меня стали прогисходить странные вещи. Как-то он их не так видит... Переставил их местми одна вроде исправилось, но с другой стороны вылезло! Я даже не знаю. Все переменные уникальные. Я прямо в шоке! Если у кого-то были такие-же проблемы, пожалуйсто скажите, что делать...
Altera вне форума Ответить с цитированием
Старый 17.07.2008, 10:11   #2
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Пример кода хотябы приведи... а так тыкать пальцем со словами "гдето там не работает" бесполезно, так никто помочь не сможет

кстати очень часто вылазят ошибки если не указал размер рекорда... ну или из-за невнимательности, возможно гдето чтото пропустил
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 17.07.2008 в 10:13.
Johnson вне форума Ответить с цитированием
Старый 17.07.2008, 10:23   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,803
По умолчанию

Altera, код в студию )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.07.2008, 11:57   #4
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,238
По умолчанию

Если идёт речь о полях в RECORD, то получается следующее:
изменняя типы, размерности полей, добавяя новые или удаляя определённые поля, меняется размер записи. При чтении и записи происходит забор данных из файла по размеры заданной RECORD.
Простой пример:
Код:
Type TSz1 = RECORD
  t :Integer;
  y :boolean;
  s :String[200];
End;

Type TSz2 = RECORD
  t :Integer;
  y :boolean;
  s :String[200];
  u :Word; {size=2}
End;

begin
 WriteLn('TSz1=', SizeOf(TSz1));
 WriteLn('TSz2=', SizeOf(TSz2));
 Readln;
end.
В первом случае будет 204, во втором 206.
Поэтому поля могут несовпадать с содержимым.
Alter вне форума Ответить с цитированием
Старый 17.07.2008, 13:15   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Ну, я хотел переделать свой Клокер, а точнее его будильник в органайзер.
Для будильника, как для таймера и секундомера, у меня вуделена запись, котороя содержит в своих переменных все порамеры одного будильника:
Код:
alarms_rec = record
   set_in, note, music_way, soft_way, soft_param: string;
   active, is12, isPm, playMusic, runSoft, time_out,
   rings_unlimit, del_alarm, set_unactive, editing: boolean;
   so_h, so_m, so_s, rings_num: byte;
   end;
Что-бы переделать его в органайзер понадобилось добавить ещё несколько переменных, а точнее so_day, so_month и so_year типа word, а так-же массив days: array [1..7] of boolean, который держит в себе инфу о тех днях недели в которые должен звенеть будила (если стоит режим звонков ежедневно). Так-же я адобавил ещё массив mode: array [0..3] of boolean, который хранил в себе инфу о режиме звонков будилы (один раз, ежедневно, ежемесячно, ежегодно). Для редектирования полей даты (tSpinEdit) я использовал те же компоненты, что и для редактирования полей времени. Но вот началась заморочка с полем a_year_input: tSpinEdit, окно добавления/редактирования будилы. Сначало при добавлении будильника в месте текущего года, он отображал какой-то 146, Потом я поменял в alarms_rec so_year: word на so_year: integer; C годами сначало стало всё ОК, но вот с временем пошли проблемы, а потом в a_year_input стало писаться значение, максимальное для integer. У меня аж волосы дыбом встали, это явно или глюк самой Delphi или какое-то ограничение на DLL. Я менял тибы этих переменных до того, пока DLL-ка вообще не сдохла. Запускаю Clocker, кнопка открытия окна утелит неактивна (она становить неактивной, когда отсутствует библиотека, так прогу можа запускать и без utilsDll.dll, только примочки те не будут доступны) и при выключении проги пишет опибку dll и аврийный выход из проги. Я вообще позеленел. Хорошо, у меня быда резервная копия Clocker-а v2.1, я её сохранил, перед тем, как заняться органайзером.

Короче вот такая история. Не знаю, может кто-то сталкивался с подобной проблемой, на мой взгляд, в alarms_rec правдо много переменных, но разве это должно влиять на работу?

Могу ещё одно заметить: Когда я работал с цветом, RGB, то для R, G и B значений взял byte, т.к. у него диапозон от 0 до 255 и у R, G и B точно такой-же. Так хрен! он мне половину цветов срезал! И воодще было что-то ужасное. Потом я взял word, ситуатион стала лучше, но не на много. Потом взял integer и всё стало ОК. Что за юмор такой, не понимаю. Объясните плиз, может я что-то не знаю о типах данных? Вот здесь помойму всё ясно видно...

Помогите плиз!
Altera вне форума Ответить с цитированием
Старый 17.07.2008, 13:42   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Ужас Оо
Ошибки наверняка в коде, а не в обявлении записи.

Вообще, страшно неоптимальный подход, от кучи переменных можно запросто избавиться, например вместо
days: array [1..7] of boolean
days: byte и отмечать нужные дни установкой всего одного бита (00000001 - понедельник, 00010001 - понедельник и пятница ...)
дату хранить в формате TDateTime и т.д.
пыщь
JTG вне форума Ответить с цитированием
Старый 17.07.2008, 14:47   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,238
По умолчанию

Как дополнение, в Record надо ограничить размер у String`а от 1 до 255, типа string[255].
Alter вне форума Ответить с цитированием
Старый 17.07.2008, 16:07   #8
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Ужас Оо
Ошибки наверняка в коде, а не в обявлении записи.

Вообще, страшно неоптимальный подход, от кучи переменных можно запросто избавиться, например вместо
days: array [1..7] of boolean
days: byte и отмечать нужные дни установкой всего одного бита (00000001 - понедельник, 00010001 - понедельник и пятница ...)
дату хранить в формате TDateTime и т.д.
Про дни: это тут выбор, тоесть как набор (set). я могу выбирать несколько дней.
Altera вне форума Ответить с цитированием
Старый 17.07.2008, 18:19   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Если явно указать string[255] или shortstring - одна такая запись будет занимать чуть ли не килобайт, а с ansistring динамическая память используется, хотя неизвестно что быстрее

Но если использовать ansistring (по умолчанию string = ansistring) в записях, то каждый "экземпляр" кажись нужно явно создавать/уничтожать через New/Dispose, видимо этого сделано не было (или заюзал GetMem и FreeMem, которые почему-то нифига не работают в таких конструкциях)
пыщь
JTG вне форума Ответить с цитированием
Старый 17.07.2008, 19:43   #10
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Возможно не указал размер массива, либо указал неправильно... я например обычно использую такую процедуру:
SetLength(massiv,1000);
число обозначает длину массива
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вальс переменных Иллидан Общие вопросы Delphi 9 27.01.2008 10:39
Замена переменных NoName_emaNoN Win Api 4 18.01.2008 09:05
Ошибка в переменных Maugli-rus Общие вопросы Delphi 2 24.12.2007 07:44
список переменных krasivosleva Microsoft Office Excel 2 26.11.2007 19:32
Проверка переменных *_ViruS_* Общие вопросы C/C++ 3 21.09.2007 21:33