Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Возможность добавлять новые компоненты в программу   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.038 c
14-1126006066
A.L.I.E.S
2005-09-06 15:27
2005.10.09
Кто и где работает самый лучший программист


2-1125436176
SarDoX
2005-08-31 01:09
2005.10.09
Выделение в Stringgrid 2


2-1125496160
Гость22
2005-08-31 17:49
2005.10.09
Как проверить, доступна ли сетевая папка?


2-1125465410
DimonS
2005-08-31 09:16
2005.10.09
Нужна помощь по TQuery.


5-1102603997
AdmeraL
2004-12-09 17:53
2005.10.09
TclientSocket .... TserverSocket