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