64) Разработка собственных компонентов.
1. Определить ближайшего предка Вашего компонента.
2. С помощью мастера создания новых компонентов сделать «заготовку» (шаблон) для нового компонента, задав имя класса, название вкладки на Панели инструментов и пути к файлу, где будет храниться код будущего компонента.
3. Написать конструктор нового компонента, не забыв его объявление в разделе Public.
4. Задать необходимые свойства в процедуре конструктора.
5. Написать деструктор компонента и сохранить файл с кодом компонента.
6. Создать новый пакет – Package
7. Добавить в него файл с кодом компонента и сохранить проект.
8. Инсталлировать новый пакет с компонентом.
9. Обязательно нажмите пиктограмму «Сохранить» перед тем, как закрыть проект.
65) Поточная обработка данных. Файловые потоки.
Tstream
В delphi используется абстрактный класс tstream (поток данных), который является основой для работы с файлами как с объектами. В случае объектов совершенно не важно, что именно является носителем информации - дисковый ли файл, ленточный носитель или оперативная память. В специализированных потомках tstream определены стандартные методы read, write и seek, открывающие полный доступ к файловому объекту. Сам объект создается конструктором и уничтожается деструктором. Примечание Поток не, учитывает специфику хранящихся в файле данных, т. е. по существу работает с данными, как если бы хранились в не типизированном файле.
Свойства
Position — указывает на текущую позицию курсора в потоке. Начиная с этой позиции будет происходить чтение данных; Size — размер данных в потоке.
Методы
CopyFrom — метод предназначен для копирования из другого потока. У него два параметра: указатель на поток, из которого надо копировать, и число, показывающее размер данных, подлежащих копированию; Read — прочитать данные из потока, начиная с текущей позиции курсора. У этого метода два параметра — буфер, в который будет происходить чтение, и число, показывающее размер данных для копирования; Seek — переместиться в новую позицию в потоке. У этого метода два параметра:
Первый параметр: число, указывающее на позицию, в которую надо перейти. Если вам нужно передвинуться на пять байт, то просто укажите цифру 5.
Второй параметр: откуда надо двигаться. Тут возможны три варианта:
soFromBeginning — двигаться на указанное количество байт от начала файла;
soFromCurrent — двигаться на указанное количество байт от текущей позиции в файле к концу файла;
soFromEnd — двигаться от конца файла к началу на указанное количество байт.
SetSize — установить размер потока. Здесь только один параметр — число, указывающее новый размер потока. Допустим, что вам надо уменьшить размер файла. В этом случае с помощью метода SetSize потока TFiieStream вы можете уменьшить или даже увеличить размер файла. Write — записать данные в текущую позицию потока. У этого метода два параметра:
переменная, содержимое которой нужно записать;
число байт для записи.
Собственно от THandleStream произведен только класс TFileStream. Остальные из категории поточных произведены от TStream. Ну, мы рассматриваем TFileStream, так что этим и займемся.
TFileStream
Этот конструктор использует два параметра - имя создаваемого файла (AnsiString) и режим открытия. режим открытия задает типы операций и права доступа, применимые к данному объекту. Могут быть следующие значения, комбинируемые с помощью binary or оператора "|".
fmCreate
создать новый файл. Если файл существует, то открывается в режиме чтения.
fmOpenRead
открыть для чтения.
fmOpenWrite
открыть для записи.
fmOpenReadWrite
открыть и для того, и для другого.
fmShareCompat
совмещенный режим доступа.
fmShareExclusive
эксклюзивный режим. Ни одно приложение не может читать или записывать открытый файл.
fmShareDenyWrite
запрет по записи для других приложений.
fmShareDenyRead
запрет по чтению.
fmShareDenyNone
никакого разделения ресурса.
Read, Write, Seek
Первые два в качестве параметра используют преременную void* и целое, определяющее длину считываемой/записываемой порции данных. Ну а Seek вообще очень похоже на fseek. Вот примеры использования функции:
TFileStream* stream=new TFileStream("c:\\test.txt",fmOpenReadWrite|fmShareExclusive) //на всякий случай займем этот файл как эксклюзив ;) stream->Seek(0,soFromBeginning);
Этот пример иллюстрирует возможность создания формата (полностью демонстрационного) для хранения изображений. В общем-то являясь уступающим аналогом DIB (по нашему - BMP), тем не менее я думаю это хороший пример.
Некоторая оговорка. Я не говорю, что TFileStream вообще и в данном случае - наилучший вариант поточного io класса. Например, можно было использовать fstream [basic_fstream]. Но все-таки это раздел, посвященный VCL и всему, что с ним связано. Поскольку программист на C++ Builder часто использует компонентные классы VCL, то ему приходится обращаться к сооствествующим поточным классам (потомкам TStream).
TMemoryStream
Класс TMemoryStream обеспечивает сохранение данных в адресном пространстве. При этом методы доступа к этим данным остаются теми же, что и при работе с файловыми потоками. Это позволяет использовать адресное пространство для хранения промежуточных результатов работы приложения, а также при помощи стандартных методов осуществлять обмен данными между памятью и другими физическими носителями.
Свойство
property Memory: Pointer;
определяет область памяти, отведенную для хранения данных потока. Изменение размера отведенной памяти осуществляется методом
procedure SetSize(NewSize: Longint); override;
Для очистки памяти потока используется метод
procedure Clear;
Чтение/запись данных в память выполняется привычными методами Read и Write.
Также запись данных в память может осуществляться методами:
procedure LoadFromFile(const FileName: string); — из файла;
procedure LoadFromStream(Stream: TStream) ; — из другого потока.
Дополнительно можно использовать методы записи данных в файл или поток:
procedure SaveToFile(const FileName: string);
procedure SaveToStream(Stream: TStream);
66)
Вообщем. Большие числа записываются в массив (т.е. каждая цифра такого числа есть элемент массива) и далее с этими массивами производятся соответствующие деяствия.