- •Средства визуального программирования
- •090105 «Комплексное обеспечение информационной безопасности
- •Ставрополь, 2010 Содержание
- •Введение
- •Задачи дисциплины – дать основы:
- •В результате изучения дисциплины студенты должны
- •1.1. Версия 1
- •1.2. Версия 2
- •1.3. Версия 3
- •1.4. Версия 4
- •1.5. Версия 5
- •1.6. Версия 6
- •2.1. Главное окно
- •2.2. Окно формы
- •2.3. Окно дерева объектов
- •2.4. Окно инспектора объектов
- •2.5. Окно кода программы
- •3.1. Пустая форма и ее модификация
- •3.2. Размещение нового компонента
- •3.3. Реакция на события
- •3.4. Некоторые итоги
- •4.1. Страница standard
- •4.2. Страница additional
- •4.3. Страница win32
- •4.4. Страница system
- •4.5. Страница dialogs
- •4.6. Страница win31
- •4.7. Страница samples
- •4.8. Компоненты для работы с базами данных
- •4.9. Компоненты для доступа к интернет
- •4.10. Доступ к серверам автоматизации
- •5.1. Учебная программа
- •5.2. Структура программ delphi
- •5.3. Типы
- •5.4. Операторы языка
- •5.5. Массивы
- •5.6. Процедуры и функции
- •6.1. Алфавит
- •6.2. Идентификаторы
- •6.3. Константы
- •6.4. Выражения
- •6.5. Операции
- •7.1. Простые типы
- •7.2. Структурированные типы
- •7.3. Строки
- •7.4. Указатели и динамическая память
- •7.5. Псевдонимы типов
- •8.1. Локализация имен
- •8.2. Описание подпрограммы
- •8.3. Параметры-массивы и параметры-строки
- •8.4. Процедурные типы
- •8.5. Рекурсия и опережающее описание
- •9.1. Основные понятия
- •9.2. Составляющие класса
- •9.3. Объявление класса
- •9.4. Интерфейсы
- •10.1. Основные свойства варианта
- •10.2. Преобразование вариантов к данным других типов
- •10.3. Подпрограммы для работы с вариантами
- •10.4. Вариантные массивы
- •10.5. Пользовательские варианты
- •11.1. Доступ к файлам
- •11.2. Процедуры и функции для работы с файлами
- •11.3. Текстовые файлы
- •11.4. Типизированные файлы
- •11.5. Нетипизированные файлы
- •11.6. Средства windows для работы с файлами
- •11.7. Отображение файлов в память
- •11.7.1. Создание/открытие файла
- •11.8. Объектная модель работы с файлами
- •12.1. Структура модулей
- •12.2. Заголовок модуля и связь модулей друг с другом
- •12.3. Интерфейсная часть
- •12.4. Исполняемая часть
- •12.5. Инициирующая и завершающая части
- •12.6. Доступ к объявленным в модуле объектам
- •12.7. Типы модулей в delphi
- •13.1. Назначение
- •13.2. Реализация
- •13.3. Пример
- •13.4. Использование
- •13.5. Включение в библиотеку форм
- •15.1. Константы простых типов и типа string
- •15.2. Константы-массивы
- •15.3. Константы-записи
- •15.4. Константы-множества
- •15.5. Константы-указатели
- •15.6. Инициация переменных
- •16.1. Класс exception - обработка исключений
- •16.2. Класс tlist - списки
- •16.3. Классы tstrings и tstringlist -наборы строк и объектов
- •16.4. Графический инструментарий
- •Список используемой литературы
11.8. Объектная модель работы с файлами
В Delphi используется абстрактный класс TStream (поток данных), который является основой для работы с файлами как с объектами. В случае объектов совершенно не важно, что именно является носителем информации - дисковый ли файл, ленточный носитель или оперативная память. В специализированных потомках TStream определены стандартные методы Read, write и seek, открывающие полный доступ к файловому объекту. Сам объект создается конструктором и уничтожается деструктором.
П оток не, учитывает специфику хранящихся в файле данных, т. е. по существу работает с данными, как если бы хранились в не типизированном файле.
В следующем примере файл с именем, хранящимся в Editl.Text,
копируется В файл Edit2 . Text.
procedure TFormI.CopyFileClick(Sender:TObject) ;
var
Streami, Stream2: TStream;
begin
Streami:=TFileStream.Create(Editi.Text,
fmOpenRead or fmShareDenyWrite) ;
try
Stream2 :=TFileStream.Create(Edit2.Text,
fmOpenCreate or fmShareDenyRead);
try
Stream2.CopyFrom(Streami, Streami.Size);
finally
Stream2.Free;
finally
Stream1.Free
end;
Абстрактный класс т Stream лишь декларирует ключевые методы Read и write, которые перекрываются в его наследниках для специализации операций:
TFileStream - обмен данными с файлом;
TStringStream - обмен данными с длинной строкой (в памяти);
TMemoryStream - обмен данными с памятью;
TBLOBStream - чтение/запись полей данных типа BLOB (Binary Large Object - большой двоичный объект;
TWinsocketStream - обмен данными с сокетным подключением;
TOLEStream - обмен данными в формате OLE.
Любой наследник получает в свое распоряжение метод copyFrom, с помощью которого он может прочитать содержимое другого потока. Таким способом можно, например, файловые данные расположить в памяти или наоборот - содержимое памяти записать в дисковый файл.
Точно так же от TStream наследуются множество других полезных методов, в том числе:
Seek - пропускает нужное количество байт от текущей позиции потока;
ReadBuffer - читает из буфера в поток нужное количество байт;
Readcomponent - читает свойства компонента из потока;
WriteBuffer - записывает в поток содержимое буфера заданной длины;
WriteComponent - записывает в поток свойства компонента.
Следующий обработчик bbRunciick выведет в редактор mmOutput свойства кнопки bbRun:
procedure TfmExample.bbRunClick(Sender: TObject);
var
MemSourceStream, MemDestStream: TMemoryStream;
begin
MemSourceStream := TMemoryStream.Create;
try
MemDestStream := TMemoryStream.Create;
try
MemSourceStream.WriteComponent(bbRun);
MemSourceStream.Seek(0, soFromBeginning) ;
ObjectBinaryToText(MemSourceStream, MemDestStream);
MemDestStream.Seek(0, soFromBeginning) ;
mmOutput.Lines.LoadFromStream(MemDestStream) finally
MemDestStream.Free
end;
finally
MemSourceStream.Free
end;
end;
Комментарий к программе
Вначале свойства компонента записываются в поток MеmSourceStream. Чтобы полученным таким образом двоичным данным придать “читабельный” вид, используется процедура ObjectBinaryToText, которая преобразует данные из MemSourceStream и помещает иx в MemDestStream. Содержимое этого второго потока и выводится
В окне mmOutput. Вид окна работающей программы представлен на рис. 11.2.
Рис. 11.2. Свойства компонента bbRun
Лекция 12. МОДУЛИ
СТРУКТУРА МОДУЛЕЙ
ЗАГОЛОВОК МОДУЛЯ И СВЯЗЬ МОДУЛЕЙ ДРУГ С ДРУГОМ
ИНТЕРФЕЙСНАЯ ЧАСТЬ
ИСПОЛНЯЕМАЯ ЧАСТЬ
ИНИЦИИРУЮЩАЯ И ЗАВЕРШАЮЩАЯ ЧАСТИ
ДОСТУП К ОБЪЯВЛЕННЫМ В МОДУЛЕ ОБЪЕКТАМ
ТИПЫ МОДУЛЕЙ В DELPHI
Стандартный Паскаль не предусматривает механизмов раздельной компиляции частей программы с последующей их сборкой перед выполнением. Более того, последовательное проведение в жизнь принципа обязательного описания любого объекта перед его использованием делает фактически невозможной разработку разнообразных библиотек прикладных программ. Точнее, такие библиотеки в рамках стандартного Паскаля могут существовать только в виде исходных текстов, и программист должен сам включать в программу подчас весьма обширные тексты различных поддерживающих процедур, таких как процедуры матричной алгебры, численного интегрирования, математической статистики и т. п.
Вполне понятно поэтому стремление разработчиков коммерческих компиляторов Паскаля включать в язык средства, повышающие его модульность. Чаще всего таким средством является разрешение использовать внешние процедуры и функции, тело которых заменяется стандартной директивой External. Разработчики Object Pascal пошли в этом направлении еще дальше, включив в язык механизм так называемых модулей.
Модуль - это автономно компилируемая программная единица, включающая в себя различные компоненты интерфейсного раздела (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующего раздела. Появление объектов в интерфейсной части делает их доступными для других модулей и основной программы. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователя.
Роль модулей в Delphi не исчерпывается только механизмом раздельной компиляции. Delphi связывает с каждым включаемым в программу окном собственный модуль и таким способом локализует все свойства окна в отдельной программной единице. Как мы уже выяснили (см. п. 5.2), основная программа (файл проекта dpr) весьма специфична: она содержит перечень всех используемых в программе модулей и несколько исполняемых операторов, обеспечивающих создание нужных окон и связь программы с Windows. Вся основная работа программы управляется кодом, содержащимся в модулях.