Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ekzam_voprosy (1).doc
Скачиваний:
13
Добавлен:
21.04.2019
Размер:
1.92 Mб
Скачать

Компонент ReplaceDialog

Компонент ReplaceDialog организует стандартное диалоговое окно Replace (см. скриншот), предназначенное для ввода текстовой информации в строки Find what (Найти) и Replace with (Заменить на). Введенные строки являются значениями свойств FindText и ReplaceText типа String соответственно.

Диалоговое окно поиска и замены строк в Delphi реализуется компонентом ReplaceDialog, который аналогичен компоненту FindDialog, но имеет дополнительное свойство ReplaceText типа String и событиеOnReplace типа TNotifyEvent, возникающее при нажатии кнопок Replace и Replace All. Связанные с поиском и заменой текста действия должны выполняться в обработчике этого события.

Реализуемые компонентами FindDialog и ReplaceDialog диалоговые окна являются немодальными и после их активизации методом Execute могут оставаться в неактивном состоянии одновременно с другими окнами. В связи с этим метод Execute удобно использовать как процедуру.

ColorDialog — диалоговое окно выбора цвета

Диалог выбора цвета обеспечивает изменение свойства Сolor для любого визуального компонента, обладающего этим свойством, например, формы или поля редактирования. В Delphi диалог выбора цвета реализует компонент СolorDialog (см. скриншот).

Основными свойствами диалога ColorDialog:

Color типа TColor (определяет выбранный или установленный цвет);

Options типа TColorDialogOptions (служит для настройки отдельных параметров диалога);  это свойство включает следующие параметры:

  • cdFullopen (отображение дополнительной панели выбора цвета);

  • cdPreventFullOpen (отключение кнопки Define Custom Colors »);

  • cdShowHelp (отображение кнопки Help);

  • cdSolidColor (задание вместо выбранного цвета ближайшего сплошного цвета);

  • cdAnyColor (выбор несплошных цветов).

По умолчанию все параметры выключены.

Устанавливаем цвет редактора Edit1 с помощью диалога ColorDialog

   

  1. if ColorDialog1.Execute then

  2. begin

  3. Edit1.Color := ColorDialog1.Color;

  4. end;

В вышеуказанном коде с помощью диалога выбора цвета устанавливается цвет редактора Edit1.

В Delphi на странице Additional Палитры компонентов содержится также компонент ColorBox. Это специализированный комбинированный список, который позволяет выбрать цвет. Список доступных цветов компонента определяется свойством Colors [index: integer] типа TColor, а текущий (выбранный) цвет указывает свойство Selected типа TColor.

FontDialog — диалоговое окно выбора параметров шрифта

Диалоговое окно выбора названия (гарнитуры) и других параметров шрифта обеспечивает изменение свойства Font (шрифт) для любого визуального компонента, обладающего этим свойством, например, формы или метки (надписи). В Delphi диалог выбора параметров шрифта (см. скриншот) реализует компонентFontDialog.

Основные свойства диалога FontDialog:

Основные свойства FontDialog

Свойство Font типа TFont определяет параметры шрифта. Управление параметрами шрифта осуществляется через его подсвойства, наиболее важными из которых являются NameStyleSizeColor.

Свойство MaxFontSize типа Integer ограничивает доступный в диалоговом окне максимальный размер шрифта. Активно, если включен параметр fdLimitsize.

Свойство MinFontSize типа Integer ограничивает доступный в диалоговом окне минимальный размер шрифта. Активно, если включен параметр fdLimitsize.

Свойство Device типа TFontDialogDevice указывает тип устройства, для которого устанавливается шрифт, и может принимать одно из трех значений:

  • fdScreen (вывод на экран);

  • fdPrinter (вывод на принтер);

  • fdBoth (вывод на экран и принтер).

Свойство Options типа TFontDialogOptions служит для настройки отдельных параметров диалога и включает свыше полутора десятков параметров; важнейшие из них (по умолчанию включен параметр fdEffects):

  • fdEffects (отображение флажков атрибутов Подчеркнутый и Зачеркнутый, а также списка Цвет);

  • fdLimitsize (активизация свойств MaxFontSize и MinFontSize, устанавливающих допустимый диапазон размеров шрифта);

  • fdTrueTypeOnly (отображение в списке только шрифто в TrueType);

  • fdWysiwyg (отображение в списке шрифтов, одновременно доступных и для экрана, и для принтера).

Так, в приведенной ниже строке кода задается шрифт надписи Label1 с помощью диалога выбора шрифтов.

Задаем шрифт надписи Label1

   

  1. if FontDialog1.Execute then

  2. begin

  3. Label1.Font := FontDialog1.Font;

  4. end;

выбор файла

  • openDialog (выбор открываемого файла);

  • saveDialog (выбор сохраняемого файла);

12. Создание меню. Виды меню. Конструктор меню. Примеры.

Разработка меню.

MainMenu – главное меню. PopupMenu – всплывающее меню. Это невизуальные компоненты

MainMenu – главное меню.

Основное свойство компонента – Items. Его заполнение производится с помощью Конструктора меню, вызываемого двойным щелчком на компоненте MainMenu.

Каждый элемент свойства Items является объектом типа TMenuItem, обладающим своими свойствами, методами, событиями:

Caption – надпись раздела, если в качестве Caption вставить символ «-», то в меню появится разделитель (-----------).

Name – имя объекта, соответствующего разделу меню (вместо N6 лучше задавать осмысленные имена: Mfile, Mopen, Msave и т.п.

ShotCut – определяет клавиши быстрого доступа к разделу меню

Default – определяет, является ли данный раздел разделом по умолчанию своего подменю, т.е.разделом, выполняемым при двойном щелчке пользователя на родительском разделе; подменю может содержать только один раздел по умолчанию, выделяемый жирным шрифтом.

Checked – установленное в true указывает, что в разделе меню будет отображаться маркер флажка, показывающий, что данный раздел выбран.

RadioItem – при установки в true определяет, что данный раздел должен работать в режиме радиокнопки совместно с другими разделами, имеющими то же значение свойства GroupIndex. По умолчанию значение GroupIndex равно 0, но его можно задать большим нуля. Если для разделов, имеющих одинаковое значение GroupIndexдля одного из разделов установить Checked в true, то в остальных разделах Checkedавтоматически сбросится в false.

Для каждого раздела могут быть установлены во время проектировани или программно во время выполнения свойства Enabled (доступен) иVisible (видимый). Если Enabled=false раздел будет отображаться серой надписью. Эти свойства используются для изменения состава доступных пользователю разделов в зависимости от работы приложения.

Главные меню вторичных форм могут объединяться с меню главной формы, если в приложениях с несколькими формами и главная и вспомогательная формы имеют свои главные меню.

(В MDI приложениях меню дочерних форм всегда объединяются с меню родителькой формы.)

Наличие или отсутствие объединения определяется свойством AutoMerge компонентов TmainMenu. Для главной формы AutoMerge должно оставаться false, а в каждой вторичной форме – true.

Способ объединения меню определяется свойством разделов GroupIndex. Разделам надо задать неубывающие номера свойств GroupIndex. Тогда, если разделы встраиваемого меню имеют теже значения GroupIndex, что и какие-то разделы меню основной формы, то эти разделы заменяют соответствующие разделы основного меню. В противном случае разделы вспомогательного меню встраиваются между элементами основного меню.

Например:

Тогда в момент, когда активизируется вторая форма, в первой появляется меню со структурой:

PopupMenu – всплывающее меню

Контекстное меню привязано к конкретным компонентам. Оно всплывает, если во время, когда данный компонент в фокусе, пользователь щелкнет прваой кнопкой мыши. Обычно в контекстное меню включают те команды главного меню, которые в первую очередь могут понадобится при работе с данным компонентом. В приложении могут быть несколько контекстных меню. Оконные компоненты: панели, окна редактирования и т.п. имеют свойство PopupMenu, с которым будет связан данный компонент.

Формирование контестного меню, так же как и главного производится с помощью конструктора. Можно копировать разделы из главного меню. Для этого в режиме конструктора PopupMenu нужно в контекстном меню выбрать команду Select Menu, перейдя в главное менюможно выделить нужный раздел, выполнить их копирование в буфер обмена (Ctrl-C), через команду Select Menu вернуться в контекстное меню, указать место для вставки и вставить (Ctrl-V). Контекстные меню разных форм не объединяются.

13. Обработка исключительных ситуаций: виды ошибок, классы исключений, вызов исключений. Примеры.

 Исключительные ситуации в Delphi встречаются постоянно. Исключительная ситуация это такая ситуация, в результате которой генерируется ошибка, и выполнение программы прерывается. Именно потому такая ситуация и называетсяисключительной. Например, деление на ноль - классический пример исключительной ситуации.    Как в такой ситуации действует человек? Если он пытается что-то сделать, и это не получается - он идёт другим путём. Так же и компьютер, следующий программе, умеющей обрабатывать исключительные ситуации. Он не бросает выполнение программы, не виснет, а обходит исключительную ситуацию, выполняя альтернативный вариант фрагмента, в которой исключительная ситуация возникла.    Возникает вопрос, почему бы не поставить проверку, например, на равенство нулю знаменателя при делении? Можно и поставить. Но во многих случаях источник исключительной ситуации далеко не так очевиден, а на все случаи жизни проверки не введёшь.    Итак, для контроля исключительных ситуаций программист должен подготовить как основной вариант фрагмента, гдевозможна исключительная ситуация, так и его вариант, в котором она заведомо невозможна, или выводится информационное сообщение для пользователя.    Вот как выглядит оператор контроля исключительных ситуаций: try    основные операторы фрагмента; except    альтернативный вариант фрагмента; end;    Вначале производится попытка выполнить операторы секции try/except, содержащие основной вариант программы. При возникновении в каком-либо операторе этой секции исключительной ситуации остальные операторы секции пропускаются, и выполняется секция except/end. Если всё "проходит штатно", то секция except/end пропускается.    Ещё один вариант оператора контроля исключительных ситуаций применяется, когда необходимо, чтобы определённый фрагмент кода выполнился в любом случае, возникла исключительная ситуация или нет: try    операторы finally    заключительные действия end;    Основные операторы, находящиеся в секции try, могут пройти штатно, или вызвать исключительную ситуацию. Операторы заключительных действий, находящиеся в секции finally, будут выполнены в любом случае.    Есть ещё один способ контроля исключительных ситуаций, касающийся ошибок операций ввода-вывода. Перед участком программы, где возможны ошибки ввода-вывода (а это, по сути, все операторы ввода-вывода), ставится директива {$I-}, заставляющая компилятор не включать в код автоконтроль ошибок ввода-вывода. Таким образом, в случае ошибки ввода или вывода программа не прерывается. В конце участка с операторами ввода-вывода ставится директива, включающая автоконтроль: {$I+}. Затем анализируется результат вызова функции IOResult. Если функция IOResult(вызывается без параметров) возвращает 0, значит ошибок ввода-вывода на данном участке не было. Вот какой пример использования директив {$I} и функции IOResult содержит справка системы Delphi: var   F: file of Byte; begin   if OpenDialog1.Execute then   begin     AssignFile(F, OpenDialog1.FileName);     {$I-}     Reset(F);     {$I+}     if IOResult = 0 then     begin       MessageDlg('File size in bytes: ' + IntToStr(FileSize(F)), mtInformation, [mbOk], 0);       CloseFile(F);     end     else       MessageDlg('File access error', mtWarning, [mbOk], 0);   end; end;    Функция IOResult досталась Delphi в наследство от Turbo Pascal. Тот же самый фрагмент можно составить и с использованием оператора try. На мой взгляд, это удобнее и проще.    При работе программы под управлением Delphi, система будет сама реагировать на исключительные ситуации, мешая работе операторов обработки исключений. Чтобы проверить их действие, можно запускать программу непосредственно, сворачивая Delphi и пользуясь ярлыком, установленном на Рабочем столе. Или можно отключить реакцию системы на исключительные ситуации, тем самым давая возможность отработать специально для этого написанным фрагментам программы - нашим операторам try/except/end. Для этого откроем пункт системного меню Delphi Tools -> Debugger Options.... В появившемся окошке нужно снять галку в чекбоксе Stop on Delphi Exceptions, расположенном на вкладке Language Exceptions. Теперь система Delphi будет предоставлять вашей программе возможность самостоятельно обрабатывать исключительные ситуации, среди которых могут быть и ситуации, возникновение которых прописано специально как удобный инструмент достижения необходимых результатов.

14. Работа с графикой: класс Canvas, компоненты для рисования.

См. 7

15. События мыши и клавиатуры. Примеры.

=(

16. Классы TList, TSringList и TIniFile. Динамическое помещение компонентов на форму.

Класс TList очень полезный универсальный контейнер списков. Он отличается от массивов, в которых он обеспечивает более богатые функциональные возможности.  В частности объекты TList могут быть отсортированы. Эта сортировка может быть с использованием любых выбранных критериев. Например, список может содержать набор объектов, которые имеют строку и численные поля. Вы можете отсортировать список по строке, по числу, по обоим, с возрастанием или убыванием, как Вы желаете. И пересортировать позже по другим критериям. Показанный пример кода показывает такую сортировку. Ключевые свойства и методы упомянуты ниже. Свойство Capacity Используется для установления размера (число указателей на объекты) списка. Предварительно установив в разумное значение, можно избежать множественных перераспределений памяти.  Свойство Count Число элементов (указателей) в списке. Может быть прочитано или записано. Если размер уменьшен в результате изменения значения Count, то удаляются элементы в конце списка.  Свойство Items Позволяет обращаться к элементам в списке. Например, myList.Items[2]; возвращает 3-ий элемент в списке. Это свойство, заданное по умолчанию, вышеупомянутое может быть упрощено до myList[2];. Свойство List Возвращает элементы в массиве.  Метод Add Добавляет элемент в конец списока. Метод Assign Заменяет список содержанием другого списка.  Метод Clear Удаляет все элементы списка, устанавливая Count в 0.  Метод Delete Удаляет элемент из списка по его позиции в списке.  Метод Remove Удаляет элемент из списка по его объектному указателю. Метод Exchange Меняет позиции двух элементов Метод Move Перемещает элемент в новую позицию списка.  Метод Insert Вставляет новый элемент в список в данную позицию.  Метод First Получает первый элемент в списке.  Метод Last Получает последний элемент в списке.  Метод Sort Сортирует список в соответствии с вашими указанными критериями. Сортировка списка проводится внутри TList, но каждая пара элемента сравнивается, вызывая функцию, которую вы указали для этого метода.  Метод IndexOf Выдает позицию указанного объекта в списке.

Примечания

Вы можете добавить Nil указатели в список. Delphi добавляет Nil указатели, когда Вы устанавливаете свойство Count выше чем текущий номер элемента в списке.

TStringList - полезный тип класса. Он чрезвычайно полезен для многих видов обработок списков. Элементы в строковом списке могут быть вставлены, перемещены и отсортированы.  Список может быть сформирован строка за строкой, или загружен из большой строки разделенной запятой или даже из текстового файла.TStringList происходит отTStrings. Вы можете использовать и TStrings, но это не рекомендуется, так как он не полный - некоторые из его методов абстрактны. TStringList осуществляет эти абстрактные методы (Clear, Delete и Insert). Мы рассмотрим основные свойства и методы TStringList, включая полученные из TStrings.  Свойство Count Возвращает число строк в списке.  Свойство Capacity Устанавливает или получает текущую вместимость строкового списка. Вы можете управлять этой вместимостью по необходимости. Свойство Strings Получает или корректирует строку по данному индексу в списке (первый элемент списка имеет индекс 0).  Обратите внимание, что свойствоStrings является свойством, заданным по умолчанию. Это означает, что вы можете использовать его без его указания: myName := names.Strings[4];  является эквивалентным:  myName := names[4];  Свойство Text Устанавливает или получает список в виде большой строки. Эта строка будет содержать каждую строку закончивающуюся комбинацией символов перевода каретки и перевода строки (CRLF). Полезно для загрузки из визуального объекта, который может содержать многочисленные строки текста.  Свойство CommaText Получает или устанавливает список в виде большой строки. Эта строка будет иметь список строк разделенных запятыми. Это полезно для загрузки из экспорта текстовой электронной таблицы. Если при получении строка содержит вложенные пространства, то она будет заключена в двойные кавычки. Cвойство DelimitedText Получает или устанавливает список через большую строку. Эта строка содержит список строк разделенных значением Delimiter (по умолчанию - запятая). Строки, содержащие вложенные пробелы должны быть заключены в QuoteChar (по умолчанию - "). Свойство QuoteChar Используется для замыкания строк, которые имеют вложенные пробелы при использовании DelimitedText. Свойство Delimiter Используется для разделения строк при использовании DelimitedText . Свойство Names Строки в строковом списке могут быть обработаны, как пары название/значение, как во втором примере кода. Каждая строка не должна иметь никаких внедренных пробелов, и содержать знак =. Это очень полезное понятие. См. свойства Value и ValueFromIndex, и метод IndexOfName. Свойство Values Возвращает значение для данного названия, когда используются строки пары название/значение (см. выше).  Свойство ValueFromIndex Возвращает значение по индексу строки (начинается с 0), когда используются пары название/значение.  Свойство CaseSensitive Когда true, Delphi обрабатывает строки чувствительно к регистру при выполнении некоторых операций, таких как Sort. Свойство Duplicates Это свойство может иметь одно из следующих перечислимых TDuplicatesзначений:  dupIgnore Игнорирует (отбрасывает) дубликаты dupAccept Позволяют дубликаты dupError Выбрасывает исключение, если имеются дубликаты Свойство Sorted Когда true, все строки будут добавляться в свою позицию отсортированной последовательности. Когда false, они будут добавляться в конец. См. также метод Sort. Свойство Objects Возвращает объект, связанный со строкой по данному индексу, если он существует.  Метод Add Добавляет данную строку в список, возвращая ее позицию в списке (начинается с 0).  Метод Append Так же как и Add, но без возвращения индексного значения.  Метод Insert Вставляет строку в заданную индексом позицию. Позиция 0 вызовет вставку в начало.  Метод Delete Удаляет строку по данному индексу. Метод Clear Удаляет все строки из списка.  Метод Move Перемещает строку из одной позиции в другую, сдвигая другие строки соответственно.  Метод Exchange Перестанавливает две строки в списке, идентифицированные по их индексным позициям.  Метод IndexOf Получает индекс позиции строки в списке соответствующей данной строке. Если строка не найдена, то возвращается -1.  Метод IndexOfName Получает индекс позиция первой пары название/значение строки, где название соответствует данной строке. Если не найдена - возвращается -1.  Метод Find То же самое, что и IndexOf, но с использованием списков сортированных строк.  Метод Sort Если Sorted является ложным, то это вызовет сортировку списка.  Метод AddStrings Добавляет строки из другого списка.  Метод Assign Заменяет текущий список содержанием другого списка.  Метод LoadFromFile Очень полезный метод, загружает строковый список из текстового файла. Каждая текстовая строка (законченая CRLF - см.DelimitedText) становится строкой списка.  Метод SaveToFile Сохраняет строковый список в текстовый файл.

В то время как Microsoft, без сомнений, хотела бы навсегда устранить INI-файлы из Windows и заставить разработчиков приложений хранить информацию в Registry, становится ясно, что какое-то время INI-файлы еще просуществуют. INI-файлы являются простыми текстовыми файлами с расширением .INI, обычно хра- нящимися в каталоге Windows. Они разработаны для запоминания информации о прикладных программах, их параметрах, конфигурации, положении окон и т.п. По мере роста популярности Windows и роста числа поддерживаемых приложений, большинство пользователей обзавелось десятками INI-файлов, засоряющих жесткий диск. К счастью, они не требуют много места и по-прежнему являются удобным способом запоми- нания параметров конфигурации. Таким образом, INI-файлы реально экономят время.  Если вы разрабатываете большое и сложное приложение со многими конфигурируемыми пользователем параметрами, то все-таки лучше воспользоваться доступом к Windows Registry при помощи класса TRegistry, чем полагаться на рудиментарные INI-файлы, так распространенные в старых версиях Windows. TRegistry освещается в главе 6, "TRegistry и TRegIniFile."  INI-файлы инкапсулируются классом TIniFile, который является прямым конечным потомком TObject. Для использования класса TIniFile и любого его члена необходимо включить IniFiles в пункт uses того модуля, который получает доступ к INI-файлам.  INI-файлы разделены на поименованные разделы, содержащие идентификаторы. Каждому идентифика- тору можно присвоить значение. Обычно значение является двоичным, целым или строковым. В листинге 4-1, фрагменте типичного файла WIN.INI, разделы идентифицируются квадратными скобками, окружающими имя каждого раздела. WIN.INI использован только как пример. Ваше приложение, как правило, должно поддерживать собственный INI-файл.

17. Базы данных: основные понятия. Виды СУБД. Основные понятия теории реляционных баз данных.

Принципы построения баз данных

Среда программирования Delphi предоставляет все необхо­димые инструменты для создания приложений баз данных -программ, которые могут работать с многочисленными типами баз данных, реализованных на различных платформах.

Одним из достоинств программирования баз данных в Delphi является использование открытой архитектуры доступа к данным, в основу которой положена концепция, построенная на использовании как реляционного (с помощью SQL-запросов), так и навигационного (последовательного) доступа к различным базам данных (БД) Возможность подключения к локальным и удаленным базам данных обеспечивается процессором баз данных Borland Database Engine (рис. 11.1.1).

Borland Database Engine (BDE) предоставляет единый набор функций (API) обработки локальных и серверных данных. Обращение к различным источникам данных основывается на концепции драйверов. Таким образом, обеспечивается интерфейс к наиболее распространенным форматам/способам хранения данных: DBase, Paradox, ASCII-файлам, для связи с серверами третьих фирм BDE использует стандартный интерфейс открытого подключения к БД (Open DataBase Connectivity (ODBC)), а к большинству популярных SQL-серверов BDE подключается через Borland SQL. Кроме того, библиотека визуальных компонент содержит компоненты библиотеки ADOExpress для работы с источниками данных Microsoft ActiveX Data Objects (ADO).

Основным достоинством этого подхода является то, что мож­но подключиться к новым базам данных, добавив соответствующий драйвер БД.

Основные понятия теории реляционных баз данных.

Реляционная база данных — это набор логически связанных между собой таблиц. Требования к проектированию реляционной базы данных заключаются в следующем:

  • каждая таблица имеет уникальное в базе данных имя и состоит из однотипных строк — записей;

  • каждая таблица состоит из фиксированного числа колонок (полей) и значений. В одной колонке не может быть сохранено более одного значения;

  • ни в какой момент времени в таблице не найдется двух записей, дублирующих друг друга. Записи должны отличаться хотя бы одним значением, чтобы была возможность однозначно идентифицировать любую запись таблицы. Уникальность значения каждой записи таблицы задается первичным ключом (первичным индексом), в качестве которого часто используется целое число, увеличивающееся при добавлении новой записи в таблицу;

  • каждому полю присваивается уникальное в пределах таблицы имя; для него устанавливается конкретный тип данных (дата, строка, ...);

  • при выполнении обработки данных можно свободно обращаться к любой записи или любому полю таблицы. Значения, хранимые в таблице, не накладывают никаких ограничений на порядок обращения к данным.

Для предотвращения хранения избыточной информации в реляционных базах данных используется нормализация. Нормализация — это формальный аппарат ограничений на формирование таблиц, описывающий разбиение таблиц на две или более частей, обеспечивающий создание лучших методов добавления изменения и удаления данных. Нормализация позволяет устранить дублирование, обеспечивает непротиворечивость хранимых данных и уменьшает трудозатраты на ввод и изменение данных.

Для получения информации из таблицы в заданном порядке используется один из способов. Первый — при каждом обращении к таблице производить поиск в таблице и сортировку ее в нужном порядке. Неоспоримым недостатком этого способа является значительное возрастание времени поиска информации в таблице. Второй — использовать вторичные индексы, что приводит к увеличению объема баз данных (для каждого вторичного индекса необходимо создать специальную служебную таблицу, в которой хранятся указатели на строки таблицы, упорядоченные в соответствии с вторичным ключом).

Между таблицами может быть установлено одно из следующих типов отношений:

  • один-к-одному, если часть таблицы может использоваться несколькими таблицами одновременно или ряд полей в большинстве записей не будет заполняться;

  • один-ко-многим, если для одной записи первой таблицы может существовать несколько записей во второй;

  • многие-ко-многим, если для записи первой таблицы мо­жет существовать несколько записей во второй, и для за­писи второй таблицы — несколько записей в первой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]