Форум: "Начинающим";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
ВнизВозможность добавлять новые компоненты в программу Найти похожие ветки
← →
Tirops (2005-08-23 05:20) [0]У меня в программе есть массивы компонентов Record. Каждый массив - на определенный тип компонента record. Как сделать так, чтобы эти массивы читались программой из отдельного файла, и чтобы этот файл можно было редактировать - чтобы пользователь мог добавить свои компоненты? Не бейте меня за тупость, пожалуйста...
← →
Джо © (2005-08-23 05:28) [1]Предположу, что имеет место неверное употребление терминологии и смешение понятий. Приведи, пожалуйста, код хотя-бы одного "компонента Record". И что есть "чтобы этот файл можно было редактировать - чтобы пользователь мог добавить свои компоненты"?
← →
tirops (2005-08-23 05:43) [2]Ну да, я новичок - мог и неправильно назвать - не зря же говорил - не бейте за тупость :). Я не знаю как назвать record - может, это тип. В общем:
type
TResistor = record
Move:boolean;
Name:String;
Resistance:integer;
Image:TImage;
end;
var
ResistorArray:array of TResistor;
Мне нужно, чтобы моя программа имела возможность добавлять типы компонентов цепей - например, добавить транзистор и т. п. И чтобы все эти резисторы, транзисторы были записаны в одном или нескольких файлах (чтоб программа могла их читать).
← →
Джо © (2005-08-23 06:02) [3]
> [2] tirops (23.08.05 05:43)
> Я не знаю как назвать record
Record - это "запись". Никакого отношения к компонентам не имеет. Совершенно.
А "пинать за тупость" :) уже утром будут. Сейчас все спят.
Думаю, что задачу, в этой постановке, никто вам не решит. Ибо равнозначно просьбе - "напишите за меня программу!". Попробуйте озвучить конкретный вопрос, возможно, тогда вам подскажут.
← →
Tirops (2005-08-23 06:07) [4]У меня уже день...
Конкретный вопрос - как записывать record в файлы и какие файлы использовать?
P. S. Писать за меня программу я не просил - у меня тоже гордость есть...
← →
Джо © (2005-08-23 06:11) [5]
> Конкретный вопрос - как записывать record в файлы и какие
> файлы использовать?
Записывать можно как угодно. Можно с использованием WiAPI-функций, можно использовать стандартные паскалевские Assign и BlockWrite, можно воспользоваться методами TFileStream... Только вот подозрение вызывают вот такие записи:
TResistor = record
Move:boolean;
Name:String;
Resistance:integer;
Image:TImage;
end;
Какой смысл записывать/читать из файла ссылку на компонент (выделено)?
← →
Tirops (2005-08-23 06:38) [6]Никакого, этого у меня уже нет...
Я вопрос не так задал - поторопился... Как заставить программу создавать эти рекорды во время рантайма - чтобы она брала тип этих рекордов не из кода самой программы, а из файла.
Черт, как же это выразить...
Начну сначала... Например, пользователь создает резистор, добавляет ему свойство Resistance, все это записывается в файл. Так вот, как программу заставить при запуске читать данные из файла и создавать массив этих резисторов ResistorArray, в котором каждый элемент - рекорд с заданными свойствами? Например, файл вроде:
TResistor {Элемент массива}
Resistance:integer {Свойство резистора}
Name:String {Еще одно свойство}
ResistorArray {Массив}
А программа должна создать:
TResistor=record
Resistance:integer;
Name:String;
ResistorArray:array of Tresistor
← →
Джо © (2005-08-23 06:49) [7]Если вопрос на этот раз поставлен окончательный - то самый общий вариант решения - написание интерпретатора и среды выполнения. Но "меня терзают смутные сомнения", что и на сей раз путаница понятий. На это подозрение наводят фразы вроде
> Как заставить программу создавать эти рекорды во время рантайма
или
> А программа должна создать:
> TResistor=record
> Resistance:integer;
> Name:String;
---
← →
Tirops (2005-08-23 07:01) [8]Джо, простите, но кажется, вы забыли, что я чайник...
Я не знаю что значит "написать интерпретатор и среду выполнения".
Как заставить программу создавать эти рекорды во время рантайма
Ну, в смысле, во время запуска программы она читает из файла все эти записи и создает нужное количество нужный массивов нужных элементов (которые указаны в файле):
TResistor=record
Resistance:integer;
Name:String;
← →
Anatoly Podgoretsky © (2005-08-23 08:53) [9]Тебе надо создать (проработать) структуру файла, если это будет типизированый файл, то ни каких ссылочных типов, типа string/image.
Ну и по постановке задачи, тебе прямой путь к базам данных, пускай даже и простых.
Ответ хотя бы на такой вопросtype
TResistor = record
Move:boolean;
Name:String;
Resistance:integer;
Image:TImage;
end;
Как ты собираешь хранить картинку? Ни в текстовом, ни в типизированом файле это так просто не получится. Можно конечно хранить картинки в отдельном файле(файлах), а в записи индекс данной картинки. И для типизированого файла надо будет сменить тип строки.type
TResistor = record
Move: Boolean;
Name: ShortString;
Resistance: integer;
ImageIndex: Integer;
end;
Вот тогда можно будет использовать и типизированые файлы, но без баз по мере роста объема, система все дальше и дальше будет стремить к разрушению.
← →
Tirops (2005-08-23 09:26) [10]2Anatoly Podgoretsky
Спасибо, я уж думал меня все бросили...
Со string/image я уже разобрался в хелпе (хотя с трудом).
Можно 2 последних вопросика:
1. А что такое типизированные файлы и чем они отличаются от остальных?
2. Можно вместо ImageIndex использовать какую-нибудь переменную PChar - мне так проще понимать?
← →
Anatoly Podgoretsky © (2005-08-23 11:32) [11]Типизированый файл это файл содержащий записи только одного определенного типа, например
var
Resistors: file of TResistor;
вместо ImageIndex можно использовать ImagePath: ShortString (путь до файла с образом) не длиннее 255 символов.
← →
Tirops (2005-08-24 10:54) [12]Нет, боюсь типизированные файлы здесь не совсем то...
Мне нужно создавать не только резисторы, но и, например, диоды. Т.Е. рекорды будут разные: Tresistor, Tdiod, Ttriod, Tещечтото...
И на каждый из этих компонентов должен создаваться массив типа TresistorArray, TdiodArray, TtriodArray и т. п.
← →
Tirops (2005-08-24 11:01) [13]Т. Е. Программа, читая файл и наткнувшись на "Tresistor" создает:
type Tresistor=record...
var ResistorArray:array of Tresistor;
, натыкаясь на Tdiod дописывает:type Tresistor=record...
Tdiod=record...</
var ResistorArray:array of Tresistor;
DiodArray:array of Tdiod;
CODE>
Вот ка сделать так, чтобы она это дописывала?
← →
Zeqfreed © (2005-08-24 11:10) [14]Tirops (24.08.05 11:01) [13]
Полями каких типов могут обладать записи?
Delphi - это не интерпретатор и он не может во время выполнения добавлять новые типы данных в программу, но в зависимости от задачи можно найти тот или иной выход.
← →
Tirops (2005-08-24 12:41) [15]
> Полями каких типов могут обладать записи?
Integer, Boolean, ShortString.
← →
Tirops (2005-08-26 12:43) [16]Все, спасибо всем, кто пытался помочь ламеру (то есть мне) :))
Добился я того, что мне нужно, правда другим путем - через варианты. Но все равно огромное спасибо, что слушали мои глупые объяснения!!!
P. S. Не бейте за тупость :)))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.014 c