![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Я вот пишу:
В файле пишутся только несколько пробелов! Как мне быть? Это сообщение отредактировал(а) Sniper - 28.10.2003, 22:50 -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Расскажи поподробнее, какие объекты ты хочешь записать. Если это компоненты (наследники TComponent), то можно попробовать через потоки...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
поподробнее так поподробнее :-))
Я хочу записать:
Вот такие массивы! %-) -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Запись типа объекта так как вы делаете приводит к записи в файл лишь 4х байтового значения указателя на объект.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Записать массивы из Tobj0Vector и Tobj1Vector - легко...
А насчет Tobj2Vector - в принципе это тоже решаемо, если раскажешь что такое TModel... -------------------- С уважением, г-н Посол. |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
p0s0l
А как? %-) TModel = class Meshes : TList; // Сетки CurMesh : word; // Текущий кадр TexVertices : PGLVertexArray; // Массив вершин текстуры TexFaces : PGLFacesArray; // Массив граней текстуры {animation speed} TimeIsSet : boolean; TimeEnd : dword; {model info} MeshCount, //meshes count MeshVCount, //mesh vertices count MeshFCount : word; //mesh faces count isFaset, //1=faset normals was included isSmooth : byte; //1=smooth normals was included TexVCount, //tex vertices count TexFCount : word; //tex faces count IsOwnTexture : byte; //1=texture file was included {} OwnTexture : gluint; //use if texture file included Это сообщение отредактировал(а) Sniper - 29.10.2003, 00:23 -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
TList, TGLVertexArray, TGLFacesArray - тоже их распиши...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
PGLVertex = ^TGLVertex;
TGLVertex = record x,y,z : glfloat; end; PGLVector = ^TGLVector; TGLVector = array[0..2] of glfloat;//тип GLFloat = single PGLFace = ^TGLFace; TGLFace = array[0..2] of word; PGLVertexArray = ^TGLVertexArray; TGLVertexArray = array[Word] of TGLVertex; PGLFacesArray = ^TGLFacesArray; TGLFacesArray = array[word] of TGLFace; -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| p0s0l |
|
||||||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Это писалось навскидку, так что должны быть глюки...
Запись:
Чтение:
Только в классе TModel придется добавить два метода в секции Public: Для записи:
Для чтения:
Для Mesh : TList - сам сделаешь, т.к. так и не написал, что это такое... Это сообщение отредактировал(а) p0s0l - 29.10.2003, 01:11 -------------------- С уважением, г-н Посол. |
||||||||
|
|||||||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
p0s0l
TList - это стандартный класс Delphi! %-) Находится в Classes! -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Ты видимо не понял суть затруднений сохранения данных в файл... А эта трудность заключается в сохранении динамических данных. Первый раз с этим встречаешься в objects2. TModel - это класс, а значит поле model - это лишь указатель на объект. Запись этого указателя в файл ничего не даст, т.к. сам объект в файл не запишется, а запишется только лишь его адрес... Поэтому были сделаны два метода для записи/чтения модели. Второй раз это были TexVertices и TexFaces из класса TModel - они тоже лишь указатели на массивы... И третий - TList, который ты никак не хочешь расписать, что же в нем всё-таки хранится... Ведь TList - это массив указателей. И запись этих указателей опять-таки бессмыслена. Надо знать, на что ссылаются эти указатели. А из тебя как из партизана надо вытягивать все эти данные... Тебе надо было идти в разведчики... Это сообщение отредактировал(а) p0s0l - 29.10.2003, 23:54 -------------------- С уважением, г-н Посол. |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Вырезка из модуля Classes.pas
Это сообщение отредактировал(а) Sniper - 30.10.2003, 00:31 -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
2 Sniper - мы вообще-то знаем модуль classes.pas, ровно как и классы в нём прописанные, приводить его не обязательно, а если привёл, так поясни - зачем? Что в этом коде тебя смущает?
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Vit
Это надо p0s0l спросить! %-) что в этом коде его смущает! Он просил: расписать TList - я выполнил его просьбу! %-) -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Или ты его используешь для хранения не указателей, а чего-то другого ? Вообще, ты делал ту прогу, или откуда-то взял ? -------------------- С уважением, г-н Посол. |
||||
|
|||||
| Dmitry V.Abramov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
p0s0l Ты забыл еще спросить, - а надо ли ему это вообще... Судя по публикациям classes.pas и усмешкам - не очень то и надо.
--------------------
/DVA |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Просто Sniper никак не хочет понять, что от него хотят...
Это моя последняя попытка: "Снайпер, скажите нам, НА ЧТО же всё-таки ССЫЛАЮТСЯ те самые указатели из TLIST ? Т.е. распишите те типы структур/объектов на которые ссылается этот TList." -------------------- С уважением, г-н Посол. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Похоже вы не поняли, что он от Вас хочет. Для программиста на Дельфи модуль classes.pas и классы в нём прописанные, всё равно что 4 арифметических действия для математика - зная уровень p0s0l я не сомневаюсь, что он прекрасно осведомлён и о модуле classes.pas и о классе TList, поэтому попытайтесь понять те вопросы, которые Вам задают и ответить на них, проблема в Вашем понимании задачи, а не понимании нами этого модуля и класса TList. (без обид, Вам действительно хотят помочь, но к сожалению мы должны понять ЧТО именно надо). -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Я понимаю и ценю вашу помощь!
Но я, как сказал Vit, не понимаю что вам дать чтобы вы мне помоги! :-((((( p0s0l поверь я хочу тебе сказать на что они указываю.... знать бы только как!! (у меня проект стоит! из-за моей тупизны :-( публикую все типы которые содержатся в модуле model.pas
Там дальше по тексту пишу: Meshes := TList.Create; Я кажись начинаю понимать, что вам нужно! :-) вот например: TexFaces : PGLFacesArray; но PGLFacesArray указывает на ^TGLVertexArray который в свою очередь указывает на array[Word] of TGLVertex; а тот на TGLVertex = record x,y,z : glfloat; end; так вам нужно вот такое же как эта цепочка, только про TList? Я правильно понял? Если да то для TList ТАКОЙ ЦЕПОЧКИ НЕТ! :-( Он просто берётся из этого ...... classes.pas Тьфу! Это сообщение отредактировал(а) Sniper - 30.10.2003, 20:46 -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| <Spawn> |
|
||||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Sniper Смотри, указатели могут ссылаться на данные разных типов. К примеру, в TList могут быть указатели на тип integer( PInteger), а могут и на целые структуры:
Так вот у тебя пытаются выяснить на какой тип данных указывают указатели в TList?? Или они у тебя вообще не типизированные(Pointer)? К примеру, если бы в TList "сидели" PInteger, то запись могла бы быть примерно такой
Это сообщение отредактировал(а) <Spawn> - 30.10.2003, 23:09 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
||||
|
|||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
<Spawn> понятно!
Meshes.Add(ogmd_NextMesh); TGMDMesh(Meshes.Items[CurMesh]).Draw; for i:=0 to Meshes.Count-1 do TGMDMesh(Meshes.Items[i]).Destroy; Больше в модуле нигде не встречается Meshes а TList описан в classes.pas.... а как уж в этом модуле идут ссылки всем известно! -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Посмотри какой тип у переменной ogmd_NextMesh - судя по смыслу должно быть TGMDMesh...
Если это так, то тут возникают трудности: у TGMDMesh есть ссылки на массивы Vertices, FasetNormals, SmoothNormals, Faces, но нет ничего, что могло бы помочь узнать размеры этих массивов - следовательно по той приведенной части кода запись/чтение сделать скорее всего невозможно. Было бы легче, если бы ты показал метод LoadFromFile, наверняка там эти массивы заполняются... Это сообщение отредактировал(а) p0s0l - 30.10.2003, 23:26 -------------------- С уважением, г-н Посол. |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
p0s0l Хм, я что то не понимаю или ты не обратил внимания, но TGLVertex имеет размер 65536 (SizeOf(Word)) структур, содержащих 3 значения типа Float(в OpenGL почти ко всем типам приделаны приставки gl).
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Sniper, не надо, ничего не смотри, я протормозил - в TList'е однозначно хранятся переменные типа TGMDMesh (либо его наследники, но это маловероятно, тем более ты привел все типы из того модуля)...
<Spawn>, так вообще-то и делают... Можно было описать TGLVertexArray как array [0..0] of TGLVertex - ничего бы не изменилось. Вернее в последнем варианте с включенной опцией Range Checking вывалилась бы ошибка при обращении, например, к элементу [1]. Но она обычно выключена (по умолчанию). Просто реальный размер массива задаётся при выделении памяти: var p : PGLVertexArray; GetMem (p, 1024*SizeOf(TGLVertex)); // это массив из 1024 элементов -------------------- С уважением, г-н Посол. |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
p0s0l
я сделал так s.Write(Meshes, SizeOf(TList)); и 60kb в файле файле конфигурации прибавилось, а было 40 байт! %-) Я чувстую что я правильно сделал!? |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
p0s0l
я сделал так s.Write(Meshes, SizeOf(TList)); и 60kb в файле файле конфигурации прибавилось, а было 40 байт! %-) Я чувстую что я правильно сделал!? -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| Dmitry V.Abramov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
Sniper На этот раз предчувствия тебя обманывают...
SizeOf(TList))=SizeOf(TForm)=SizeOf(T_Что_угодно_порожденное_от_TObject)=4. Везде. Даже если Папа Римский наберет сейчас дрожащими руками в католическом Delphi "writeln(SizeOf(TList))", то сниспослано ему в ответ будет число 4. И это правильно. И это можно не знать, а нужно просто помнить. Как 2х2. А передачу Meshes в качестве параметра на запись - обязательно надо предложить Borland'у. А то понагородили тут какие-то RTTI, {M+}, TPersistent, TWriter, TReader... Попутно выдумали "проблему сохранения и восстановления классов" на нашу голову... А ее, оказывается, нет - сохраним 4 байта адреса из Heap - и хватит. Но! Главное - не выдать врагу этот метод! Пусть это будет нашим секретом. Резюме: ответ отрицательный. --------------------
/DVA |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Dmitry V.Abramov Но у меня файл весит не 4 байта, а 60KB!!!!
Что же он тогда сохраняет -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Sniper, дак ведь ты не один меш сохраняешь в файл ? Из-за этого и получается такой размер...
-------------------- С уважением, г-н Посол. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |