Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.016 c
14-1126453651
Fin
2005-09-11 19:47
2005.10.09
Литература про Mac OS X.


2-1125735542
Ксардас
2005-09-03 12:19
2005.10.09
Как выделить строку в РичЭдите при опр условиях?


3-1125314136
Stanislav
2005-08-29 15:15
2005.10.09
подключение Access через Linked Server


14-1127036002
Holy
2005-09-18 13:33
2005.10.09
Пушинский вор


6-1118606328
Руслан Бахтияров
2005-06-12 23:58
2005.10.09
Безопасное подключение к серверу...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский