Вставка ссылки на модуль
Рисунок 19.2 . Вставка ссылки на модуль
При вызове метода show второе окно появляется на экране и работает одновременно с первым, поэтому управление сразу передается оператору, стоящему за обращением к этому методу. Такие окна называются немодальными, они всегда открываются в одном методе, а закрываются в другом. В отличие от этого обращение к show-Modal создает модальное окно, которое полностью берет на себя дальнейшее управление программой, поэтому оператор за обращением к showModal в вызывающей части программы получит управление только после закрытия модального окна.
Модальные окна всегда требуют от пользователя принятия какого-либо решения. С их помощью реализуется диалог с пользователем или создается информационное окно, которое пользователь должен закрыть после ознакомления с содержащейся в нем информацией. Если от пользователя требуется принятие решения, в модальное окно вставляются зависимые или независимые переключатели, кнопки и другие интерфейсные элементы, с помощью которых пользователь сможет сообщить программе о принятом решении. В момент закрытия диалога модальное окно должно поместить число, соответствующее решению пользователя, в свое свойство ModalResuit. Некоторые стандартные кнопки (ok, Yes, No, cancel и т. п.) автоматически выполняют эти действия: помещают нужное число в ModalResuit и закрывают окно. В других случаях об этом должен позаботиться программист. Вызывающая программа получает значение ModaiResuit как значение функции showModal и может тут же его проанализировать:
if For.gif" >
Демонстрация комплексных вариантов
Рисунок 10.1. Демонстрация комплексных вариантов
Создание пользовательского варианта проходит в три этапа.
Сначала в записи rvarData размещаются новые данные или ссылка на них. Объявляется класс, который является прямым или косвеннымпотомком специального класса TCustomVariantType. В этомклассе предусматриваются все необходимые методы для реализации свойств варианта: присваивания ему новых значений, преобразования хранящихся значений к другим типам, выполнения необходимых математических действий. Создаются вспомогательные методы для объявления потомков нового класса и определения их типов.В результате перечисленных шагов вы получаете полноценный вариант, обогащенный новыми свойствами: он может хранить не только те значения, которые перечислены в табл. 10.2, но и любые другие, в том числе свойства и методы! (В этом последнем случае наследником для исполняемого класса нового варианта вместо TCustomVariantType является TInvokeableVariantType или TPublishableVariantType.)
Демонстрация компонента TAnimate
Рисунок 18.24. Демонстрация компонента TAnimate
Скопируйте файл demos | cool: cool. avi в ваш рабочий каталог (каталог demos распологался в каталоге размещения Delphi). На пустую форму положите компоненты Animate, ProgressBar, Timer (страница System) и кнопку BitBtn. Таймер необходим для имитации достаточно длительного по времени процесса, который будет отображаться в ProgressBar на фоне вращающейся надписи “COOL” в компоненте Animate. Установите в свойство Enabled компонента Timer1 значение False, а в его же свойство interval - значение 10. Поместите в свойство Visible компонента ProgressBarl значение False и сохраните форму в том же каталоге, куда вы скопировали файл COOL.AVI. Создайте такой обработчик события OnClick кнопки BitBtn1:
procedure TFor.gif" >
Демонстрация компонента TValueListEditor
Рисунок 18.17. Демонстрация компонента TValueListEditor
property DropDownRows: Integer; | Указывает максимальное количество строк в списке возможных значении, показ которых не сопровождается появлением полосы прокрутки |
property ItemProps[const KeyOrIndex: Variant]: TItemProp; | Сложное свойство, управляющее различными аспектами отображения значений (см. пояснения ниже) |
type TKeyOption = (keyEdit, keyAdd, keyDelete, keyUnique) ;
TKeyOptions = set of TDisplayOption; property KeyOptions: TKeyOptions; |
Управляет возможным изменением списка: keyEdit - пользователь может изменять имя параметра (в первом столбце); keyAdd - пользователь может добавлять новую пару имя-значение нажатием клавиши Insert (требует включения keyEdit); keyDelete -пользователь может уничтожить выделен ную пару нажатием клавиши Delete; keyUnique - названия вводимых пользователем имен должны быть уникальными |
property Keys[Index: Integer]:String; | Открывает доступ к названиям значений по их индексам |
property RowCount: Integer; | Содержит количество строк |
property Strings: TStrings; | Содержит строки списка |
property TitleCaptions: TStrings; | Содержит заголовки столбцов |
property Values[const Key:String]: String; | Открывает доступ к значениям по их индексам |
Свойство itemprops класса Titemprop имеет собственные свойства:
property EditMask: String; | Содержит маску для формирования значения. Правила создания маски описаны в п. 18.2.3 |
type TEditStyle = (esSimple,
esEllipsis, esPickList); property EditStyle: TEditStyle; |
Определяет правила редактирования значения: esSimple - значение редактируется в обычном однострочном редакторе; esEllipsis - в строку значения вставляется кнопка для вызова диалогового окна редактора значения (возбуждается событие OEditButtonclick); esPickList - в строку значения вставляется кнопка для раскрытия списка возможных значений (возбуждается событие OnGetPickList) |
property MaxLength: Integer; | Определяет максимальную длину (в символах) значения. Если 0, нет ограничений на длину |
property PickList: TStrings; | Содержит выпадающий список возможных значений |
property Readonly: Boolean; | Разрешает/запрещает редактирование значения |
Свойство PickList не предназначено для программного доступа. Чтобы создать выпадающий список возможных значений, нужно свойству ItemProp.EditStyle присвоить значение esPickList и написать обработчик события onGetpickList. Пусть, например, первое значение должно иметь выпадающий список. Тогда необходим такой код:
procedure TFor.gif" >
Диалоговое окно выбора формы
Рисунок 19.4. Диалоговое окно выбора формы
Форма для учебной программы
Рисунок 5.1. Форма для учебной программы
Фрагмент дерева классов Object Pascal
Рисунок 9.1. Фрагмент дерева классов Object Pascal
Главное окно с нестандартным расположением своих элементов
Рисунок 2.4. Главное окно с нестандартным расположением своих элементов
это последовательность произвольных операторов программы,
5.4.1. Составной оператор и пустой оператор Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки - зарезервированные слова begin ... end . Составные операторы - важный инструмент Object Pascal, дающий возможность писать программы по современной технологии структурного программирования (без операторов перехода goto). Object Pascal не накладывает никаких ограничений на характер операторов, входящих в составной оператор. Среди них могут быть и другие составные операторы - язык Object Pascal допускает произвольную глубину их вложенности: Функция Trim не определена в версии 1. Вместо указанной единственной строки в этом случае следует написать :[ while post' ', edinput.Text)>0 do system.delete(edinput.Text, post' ', edinput.Text), 1); StrToint(edinput.Text);] begin begin begin end; end; end; Фактически весь раздел операторов, обрамленный словами begin ... end, представляет собой один составной оператор. Поскольку зарезервированное слово end является закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего оператора, поэтому ставить перед ним символ “;” необязательно. Наличие точки с запятой перед end в предыдущих примерах означало, что между последним оператором и операторной скобкой end располагается пустой оператор. Пустой оператор не содержит никаких действий, просто в программу добавляется лишняя точка с запятой. В основном пустой оператор используется для передачи управления в конец составного оператора: как и любой другой, пустой оператор может быть помечен, и ему можно передать управление. |
Представляет собой удобную комбинацию однострочного
18.2.16. TLabelEdit - однострочный редактор с меткой Представляет собой удобную комбинацию однострочного редактора с меткой. Надпись в метке определяет свойство EditLabei. Свойство type TLabelPosition = (IpAbove, ipBelow, IpLeft, IpRight); property LabelPosition: TLabelPosition; определяет положение метки относительно редактора, а property LabelSpacing: Integer; расстояние от метки до редактора (в пикселях). Впервые введен в версии 6. |
с версии 5, главное окно
2.1.2. Настройка окон Начиная с версии 5, главное окно обогатилось тремя новыми интерфейсными элементами, указанными в группе Desktops предыдущей таблицы. С помощью этих инструментов программист может подготовить несколько вариантов расположения остальных окон Delphi и сохранить их в настроечном файле. Обычно выбираются две или три основные конфигурации окон: для режима разработки форм, для кодирования и для отладки. При разработке формы на экране должна быть видна сама форма, Дерево объектов и Инспектор объектов. Настроив соответствующие размеры и положение этих окон, такую настройку можно сохранить под именем, например, Design Desk. Для режима кодирования обычно нужно только максимально распахнутое на экран окно кода с браузером Code Explorer и пристыкованное к нему окно Дерева объектов. Такую конфигурацию можно сохранить под именем code-Desk. Наконец, в отладочном режиме к окну кода желательно “прицепить” некоторые отладочные окна, такие как Watches (окно наблюдений за переменными/выражениями) и Breakpoints (окно создания/настройки точек контрольного останова). Такую конфигурацию можно сохранить под именем DebugDesk, например. Теперь при переходе к тому или иному режиму достаточно раскрыть список и выбрать из него нужную настройку. Если вы предварительно укажете с помощью кнопки настройку для отладочного режима, эта стройка появится автоматически, как только среда перейдет в режим отладки. |
стереть символ справа от курсора
П1.2.2. Команды удаления/вставки |
INS | включить/отключить режим вставки | Delete | стереть символ справа от курсора |
Enter | вставить строку | Ctrl+T | стереть слово справа от курсора |
Qrl+Y | удалить строку | Ctrl+Q+Y | стереть остаток строки справа от курсора |
Back.gif" > |
Использование графических врезок
Рисунок 21.5. Использование графических врезок
Кнопки компонента TMediaPlayer
Рисунок 18.36 . Кнопки компонента TMediaPlayer
Если ваш компьютер оснащен звуковой картой, вставьте этот компонент в пустую форму, в его свойство FileName поместите название любого файла с расширением WAV (из каталога с: | winsows | media), установите в свойство Autoopen компонента значение True и запустите программу - после щелчка мышью по кнопке
вы услышите звучание выбранного музыкального фрагмента. Как видите, использование компонента предельно просто. Он автоматически распознает тип мультимедийного устройства по расширению файла и берет на себя управление этим устройством. Разумеется, в каждый момент времени компонент может управлять лишь одним устройством, однако с помощью изменения содержимого FileName или явно с помощью свойства DeviceType программа может менять устройство, связанное с компонентом.Каждая кнопка компонента имеет собственное имя, позволяющее программисту сделать какую-либо кнопку невидимой или недоступной. В следующей таблице приводится имя и назначение каждой кнопки (под носителем информации подразумеваются файлы и физические устройства, которые могут служить источником или приемником информации).
btStop | Останавливает запись или воспроизведение |
btNext | Позиционирует устройство на следующую дорожку или в конец носителя информации, если устройство не имеет дорожек |
btPrev | Позиционирует устройство на предыдущую дорожку или в начало носителя информации, если устройство не имеет до |
btStep | рожек Позиционирует устройство на один блок кадров ближе к концу носителя информации. Количество кадров в блоке |
btBack.gif" > |
Компонент Tfmage воспроизводит изображение
Рисунок 18.12. Компонент Tfmage воспроизводит изображение
Напишите такой обработчик события onСlick для кнопки Button1:
procedure TFor.gif" >
Метка IbOutput показывает имя перетаскиваемого компонента
Рисунок 17.5. Метка IbOutput показывает имя перетаскиваемого компонента
Для ручного (программного) управления механизмом Drag&Drop используются следующие методы, доступные любому потомку TControl:
procedure BeginDrag (Immediate: Boolean); | Используется источником для инициализации процесса Drag&Drop. Если Immediate =True, процесс начинается немедленно, в противном случае - после смещения указателя мыши на 5 пикселей в любом направлении |
procedure DragDrop (Source: TObject; X, Y: Integer); | Вызывает обработчик события OnDragDrop |
procedure EndDrag(Drop: Boolean); | Вызывает обработчик события OnEndDrag и в параметре Drop сообщает о том, были ли приняты данные |
Наиболее важные окна Delphi
Рисунок 2.1. Наиболее важные окна Delphi:
Настройка инструментальных панелек
Рисунок 2.3. Настройка инструментальных панелек: а) вспомогательное меню; б) окно настройки с выбранной закладкой Command
Для примера на Рисунок 2.4 показано главное окно с нестандартным расположением панелек и набором отображаемых в них кнопок.
При его создании мне хотелось, с одной стороны, получить больше места для размещения страниц галереи компонентов, а с другой поместить в главное окно пиктограммы часто используемых мною команд меню: Project | Syntax check (проверка синтаксиса кода программы), View | Debug Windows | Watches) доступ к окну наблюдения отладочного режима) и View | Debug windows | Breakpoints (доступ к окну точек останова).
Окно демонстрационной программы
Рисунок 18.23. Окно демонстрационной программы DEMOS | RICHEDIT | RICHED1T.EXE
На Рисунок 18.23 показан пример использования возможностей компонента. Полный текст программы, с помощью которой создан рисунок, приводится в папке demos | RICHEDIT | RICHEDIT.DPR, котораянаходится в каталоге размещения Delphi.
Компонент использует вспомогательные объекты класса TTextAt-tributes для хранения атрибутов шрифта. Эти атрибуты распространяются на весь текст через свойство редактора DefAttributes или на выделенную часть текста - через его свойство SeiAttributes.
Помимо обычных шрифтовых свойств CharSet, Color, Height, Name, Pitch, Size И Style (см. класс TFont) объект TTextAttributes содержит также свойства consistentAttributes и protected. Первое доступно только для чтения и содержит набор текстовых характеристик, общих как для всего текста, так и для его выделенной части. Свойство protected защищает весь текст или его части от редактирования. Попытка изменить текст, имеющий атрибут protected, вызывает обработчик события OnProtectChange, который может разрешить или запретить изменения. По умолчанию изменения запрещены.
Для каждого текстового абзаца создается объект класса трага-Attributes, в котором сохраняются атрибуты абзаца. Эти атрибуты доступны через следующие свойства класса TparaAttributes:
property Alignment: TAlignment; | Определяет горизонтальное выравнивание текста абзаца относительно границ компонента |
property Firstlndent: Longint; | Указывает отступ текста абзаца в пикселях от предыдущего абзаца |
property Leftlndent: Longint; | Указывает отступ текста абзаца в пикселях от левого края компонента |
TNumberingStyle =
(nsNone, nsBullet) ; property Numbering: TNum beringStyle; |
Указывает, надо ли вставлять слева от абзаца символы списка. Если содержит nsBullet, символы списка вставляются |
property Rightlndent:
Longint; |
Указывает отступ текста абзаца в пикселях от правого края компонента |
property Tab[Index: Byte] : Longing; | Для табулостопа с индексом index содержит его позицию в пикселях от левого края компонента |
property TabCount: Irteger; | Определяет количество табулостопов в строке абзаца |
Свойства класса TRichEdit
property DefAttributes:
TTextAttributes; |
Определяет шрифтовые атрибуты всего текста |
TConversionClass = class of TConversion;
property DefaultConverter: TConversionClass; |
Свойство указывает класс конвертора, использующегося для преобразования текстовых форматов причтении или записи текста. По умолчанию нет преобразования |
property HideScroliBars:
Boolean; |
Определяет, будет ли редактор автоматически вставлять полосы прокрутки, если текст отсекается границами компонента. Игнорируется, если scrollBars содержит ssNone |
property HideSelection:
Boolean; |
Указывает, будет ли убираться выделение текста, если компонент потеряет фокус ввода |
property Lines: TStrings; | Содержит набор строк текста. С помощью его методов LoadFromFile и SaveToFile компонент может читать текст из файла или записывать в него текст |
property PageRect: TRect; | Указывает размеры страницы при печати на принтере |
property Paragraph:
TParaAttributes; |
Содержит атрибуты текущего абзаца, т. е. абзаца с выделением или с текстовым курсором. Программа не может изменить свойство paragraph, но может изменить свойства связанного с ним абзаца |
property PlainText: Boolean; | Запрещает/разрешает записывать в файл или читать из него служебную информацию формата RTF (True -запрещает) |
property SelAttributes:
TTextAttributes; |
Определяет шрифтовые атрибуты выделенного текста |
property SelLength: Integer; | Задает длину в символах выделенной части текста |
property SelStart: Integer; | Определяет номер первого символа выделенной части текста от начала текста (нумерация символов начинается с 0). Если нет выделения, указывает символ, перед которым располагается текстовый курсор |
property SelText: String; | Содержит выделенный текст. Установка нового значения SelText заменяет выделенный текст на новый, а если нет выделения - вставляет его в позицию курсора |
Методы компонента:
procedure Clear;
TSearchType = (stWholeWord, stMatchCase) ; TSearchTypes = set of TSear chType ; function FindText(const SearchStr: String; StartPos, Length: Integer; Options: TSear chTypes) :Integer; |
Удаляет весь текст
Ищет в тексте строку SearchStr и возвращает индекс первого ее символа при удачном поиске: StartPos - начало поиска: Length-длина строки, options указывает, будет ли поиск идти по целым словам и надо ли учитывать высоту букв |
function GetSelTextBuf(Buffer:
PChar; BufSize: Integer): Integer; |
Копирует не более BufSize символов выделенного текста в буфер Buffer и возвращает количество скопированных символов |
procedure Print(const Caption:
String) ; |
Форматирует текст по границам листа бумаги и печатает его на умалчиваемом принтере, caption определяет заголовок печати |
TConversionClass = class of TConversion; class procedure RegisterConver-
sionFor.gif" > |
Окно демонстрационнойпрограммы
Рисунок 11.1. Окно демонстрационнойпрограммы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, For.gif" >
Окно кода с расположенным слева браузером Code Explorer
Рисунок 2.8. Окно кода с расположенным слева браузером Code Explorer
Двойной щелчок мышью на элементе в окне браузера приводит к позиционированию текстового указателя в окне кода на описание соответствующего объекта или его первое упоминание. При разработке несложных учебных программ можно закрыть окно браузера маленькой кнопкой
Окно компонента TDirectoryOutLine
Рисунок 18.46. Окно компонента TDirectoryOutLine
Компонент является наследником класса TCustomOutLine, и поэтому многие его свойства (itemHeight, Optins, PictureXXX, ShowBars и Style) совпадают с аналогичными свойствами другого наследника этого класса - компонента TOutLine. Свойство TTextCase = (tcLowerCase, tcUpperCase, tcAsIs) ;
property TextCase: TTextCase;
определяет высоту букв в именах каталогов: tcLowerCase - строчные буквы; tcUpperCase - заглавные буквы; tcAsis - строчные и заглавные буквы.
Следующие два свойства доступны только на этапе прогона программы:
property Drive: Char;
property Directory: TFileName;
Первое определяет выбранный диск, второе - выбранный каталог.
Окно конструктора меню
Рисунок 18.3. Окно конструктора меню
Создание опций не вызывает проблем. Перейдите в окно Инспектора объектов и введите текст опции в строке caption, после чего нажмите Enter - опция готова, и можно переходить к следующей. Каждая опция главного меню может раскрываться в список подопций или содержать конечную команду. Для создания подопций щелкните мышью по строке ниже опции и введите первую подопцию. Продолжайте ввод, пока не будет создан весь список подопций, после чего щелкните по пустому прямоугольнику справа от первой опции и введите вторую опцию. Процесс гораздо сложнее описать, чем выполнить.
В названиях опций можно указать символ “&” перед тем символом, который определит клавишу быстрого выбора опции (в терминологии Windows такие клавиши называются акселераторами). Например, на Рисунок 18.3 показана опция Файл, которую можно выбрать сочетанием клавиш Alt+Ф. При создании меню эта опция в строке caption Инспектора объектов содержала текст &Файл.
Если вы захотите вставить разделительную черту, отделяющую группы подопций, назовите очередной элемент меню именем “-”. Так, например, создана черта, отделяющая опции сохранить как и выход в примере меню на Рисунок 18.3: свойство caption, пятого по счету элемента списка опций Файл, содержит единственный символ “-”.
Для создания разветвленных меню, т. е. таких, у которых подопций вызывают новые списки подопций, щелкните по подопций и нажмите Ctrl+вправо, где вправо - клавиша смещения курсора вправо. Такого же эффекта можно добиться после щелчка правой кнопкой мыши на подопций и выборе продолжения create Submenu. На Рисунок 18.4 показан пример разветвленной структуры меню.
Свойства компонента:
property AutoMerge: Boolean; | Разрешает/запрещает слияние главного меню вторичной формы с главным меню основной формы в не MDI-приложениях |
type TMenu.gif" >
|
Окно Поиск со списком названий
Рисунок 21.3. Окно Поиск со списком названий найденных разделов (“З. Выберите нужный раздел ...”)
Название раздела задается с помощью сноски “$”, которая должна предшествовать первому символу текста раздела. На Рисунок 21.4 показан пример окна Word с названием Режим|0тладка для раздела Отладочный режим. Название раздела записывается в тексте сноски и отделяется от символа “$” одним пробелом. В тексте названия можно указывать любые символы, в том числе и пробелы. Максимальная длина названия - 255 символов. Обычно название раздела совпадает с его заголовком.
Окно прогона программы сравнения
h2> Окно прогона программы сравнения сортировки строк для Windows 32 и Windows З.х
Как видим, строки в 32-разрядных Windows сортируются не с учетом внутреннего кода символа, а с учетом “смысла”: в начале располагаются все знаки препинания и разного рода “мусор”, затем идут цифры, буквы латинского алфавита и символы кириллицы. Буквы упорядочены парами - сначала заглавная, за ней строчная - и не идут сплошным массивом. “Виновником” такой сортировки является API-функция AnsiCompareText, К который обращается метод TStringList. Quicksort. Если вам понадобится отсортировать так, как это принято в MS-DOS или Windows З.х, т. е. по коду символа, проделайте следующее.
Разыщите в каталоге source | Rtl | common исходный файл classes . pas и скопируйте его в ваш рабочий каталог (в предыдущих версиях этот файл располагался в каталоге Source | vci). Если вы не найдете этого файла, вы не сможете изменить сортировку, т. к. в классе TStringList метод Quicksort, отвечающий за сортировку, определен в секции private и, следовательно, недоступен наследникам. В раздел implementation этого модуля сразу после предложения Uses поместите такое описание функции AnsiCompareText:Function AnsiCompareText(SI, S2 : String): Integer;
begin
if S1 < S2 then Result := -1
else if SI == S2 then Result := 0
else Result := 1
end;
3. С помощью опции Project | Add To Project добавьте измененный модуль classes к вашему проекту и сделайте новый прогон программы. Теперь оба столбца будут идентичны.
Окно програлшы для определения цветовых констант
Рисунок 17.1. Окно програлшы для определения цветовых констант
Положите на пустую форму две панели - они будут наглядно демонстрировать цвет, выбранный с помощью TCoiorDialog (левая панель), и цвет, заданный с помощью 16-ричной константы (правая панель). Установите в свойство Align панели Panel1. Значение alRight, а в такое же свойство Рапе12 - alClient. На левую панель положите кнопку TButtcni и диалог TCoiorDialog (этот компонент находится на странице Dialogs палитры компонентов). В значение caption кнопки поместите строку. Выбор цвета. На правую панель положите редактор TEdit и кнопку TButton. В свойство charCase редактора поместите значение ecupper-case - это заставит компонент преобразовывать вводимые в нем буквы к заглавным и упростит дальнейший их анализ. В Caption кнопки поместите Ввод константы. Напишите такой обработчик события OnClick кнопки Button1 (в нем открывается диалоговое окно компонента ColorDialog1, закрашивается выбранным цветом левая панель panel 1, в заголовок окна помещается десятичное представление цветовой константы, а в редактор Editi - ее 16-ричное представление:
procedure TFor.gif" >
Окно программы CopyTxt
Рисунок 5.4. Окно программы CopyTxt
Комментарий к программе
Вводимый текст хранится в свойстве Text компонента edInput. После выполнения первого оператора присваивания он будет перенесен в свойство caption компонента IbOutput и тут же появится на экране над строкой ввода.
Многострочньш редактор mmOutput способен сохранять и отображать на экране множество строк. Все они содержатся в его свойстве Lines, относящемуся к классу TStringList (подробнее об этом классе см. п. 12.1). Метод Add класса TStringList добавляет новую строку к имеющемуся в Lines набору строк. Добавленная с помощью второго оператора строка тут же отображается на экране. С помощью оператора
edInput.Text := ' ' ;
строка ввода очищается и подготавливается к вводу нового текста. Двойной апостроф в правой части оператора указывает “пустую” строку или, что то же, строку нулевой длины. Завершает обработчик оператор
edinput.SetFocus ;
с помощью которого строка edinput получает фокус ввода. Термином “фокус ввода” в Delphi фактически обозначается клавиатура”* “Получить фокус ввода” означает связать указанный компонент с клавиатурой. В окне программы может быть несколько компонентов, способных принимать и обрабатывать клавиатурный ввод (в нашей программе таких компонентов четыре: редактор mmoutput, строка edinput и кнопки bbRun и bbciose). Каждый из таких компонентов имеет метод SetFocus, с помощью которого программа может передать компоненту контроль над клавиатурой. Чтобы оценить действия, реализуемые оператором edinput. SetFocus, поставьте в самом начале оператора признак комментария (символы “//”), сделайте новый прогон программы и введите с ее помощью хотя бы 2-3 строки.
Замечу, что в момент появления окна программы на экране строка edinput не имеет фокуса ввода, что затрудняет ввод первой строки. Попробуйте самостоятельно создать обработчик события опАс-tivate для формы fmExampie и в нем установить фокус ввода для строки edinput. (Подсказка: раскройте список выбора в верхней части окна Инспектора объектов, выберите в нем компонент fmExampie и дважды щелкните по правой колонке свойства OnActivate на странице Events этого окна.)
Окно программы IntMult
Рисунок 5.5. Окно программы IntMult
Прежде всего обсудим две проблемы, связанные с реализацией программы:
как известить программу о вводе каждого из операндов; что будет, если пользователь подготовит неверную запись целого числа (например “12.3”).Суть первой проблемы состоит в том, что подготовленная нами учебная форма fmExampie имеет только одну строку ввода edinput и одну кнопку bbRun (кнопка bbClose используется для прекращения работы программы и эту ее функциональность не следует изменять). Мы могли бы написать программу, которая вводит строку типа
2*3
и после анализа строки выводит результат. Однако логика анализа существенно перегрузит программу и потребует использования в ней средств, с которыми мы пока не знакомы. Значительно проще вставить в форму еще одну кнопку. Тогда щелчок по первой кнопке будет сигналом о том, что в строке ввода подготовлен первый операнд, а щелчок по второй - что готов второй операнд и можно вычислять результат. В этом варианте следует предусмотреть случай, когда щелчок по второй кнопке будет предшествовать щелчку по первой и программа будет вычислять выражение с неопределенным первым операндом. Решение этой дополнительной проблемы состоит в том, чтобы сделать вторую кнопку недоступной или даже невидимой до тех пор, пока не будет введен первый операнд.
Подводя итог, я предлагаю поместить на форму fmExample новую кнопку BitBtn (страница Additional галереи компонентов) так, чтобы она полностью закрыла собой имеющуюся кнопку bbRun, назвать новую кнопку bbResuit (свойство Name), установить для нее сорт (свойство Kind) bkOK и сделать ее временно невидимой (поместить в свойство visible значение False). После такой подготовки в момент начала работы новая кнопка не будет видна и не помешает пользователю щелкнуть по кнопке bbRun. В обработчике события bbRun-click следует спрятать кнопку bbRun и показать кнопку bbResuit, чтобы пользователь смог подтвердить ввод второго операнда. Сделайте необходимые изменения формы для нового проекта, а я пока перейду к обсуждению второй проблемы.
Суть второй проблемы заключается в том, что пользователь может случайно или преднамеренно ввести строку, которая не содержит правильного представления целого числа. Преобразование такой строки к целому числу может привести к аварийному завершению работы программы. Существует множество способов решения этой проблемы, я предлагаю наиболее простой: заменить обычный однострочный редактор edinput на специализированный, способный контролировать ввод пользователя. Удалите из формы редактор edinput (щелкните по нему мышкой и нажмите клавишу Delete) и поместите на его место компонент MaskEdit (страница Additional). Дайте ему прежнее имя edinput (свойство Name) и раскройте диалоговое окно свойства EditMask (Рисунок 5.6). Это свойство указывает маску компонента, т. е. определяет, какие символы и в какой последовательности может набирать пользователь в окне ввода.
Окно редактора архива
Рисунок 5.3. Окно редактора архива
В списке pages этого окна щелкните по строке For.gif" >
Окно редактора ImageList
Рисунок 18.16 . Окно редактора ImageList
Установите в свойство images компонента TooiBar1 значение ImageList1 и поместите в него столько кнопок, сколько изображений вы подготовили в imageList1. Для вставки кнопки щелкните по TooiBar1 правой кнопкой мыши и выберите опцию NewButton. Поместите на свободное место формы еще один компонент ToolBar. Он автоматически прижмется к нижнему краю СоntrolBar1.Измените в его свойстве Align значение alTop на а1None и мышью сместите компонент несколько вниз - на этапе прогона программы этот компонент будет “причаливать” к ControlBar1. Свяжите компонент С ImageList2 (свойство Images) и создайте в нем кнопки (см. п. 7). Для обоих компонентов поместите в свойства DragKind значения dkDock, В DragMode - dmAutomatic И В AutoSize — True. Запустите программу и перетащите нижнюю панель кнопок на ControlBar1.
Свойства компонента:
property AutoDrag: Boolean; | Разрешает/запрещает компонентам ToolBar покидать границы controlBar |
property Picture: TPicture; | Содержит изображение, которое, периодически повторяясь, создает фон компонента |
property RowSize: TRowSize; | Задает высоту одного ряда инструментальных панелей. Умалчиваемое значение 25 в точности соответствует высоте одной панели и в этом случае между рядами нет зазора |
property RowSnap: Boolean; | Если содержит True, “причаливаемая” панель будет выравниваться по высоте ряда |
Метод
procedure StickControls; virtual;
устанавливает все дочерние компоненты на их окончательные позиции после “причаливания” или “отчаливания” очередной инструментальной панели. Его нужно перекрыть, если стандартное размещение панелей по каким-либо причинам вас не устраивает;
События компонента:
TBandInfoEvent = procedure(Sender: TObject; Control: TControl; var Insets: TRect; var PreferredSize, RowCount: Integer) of object-property OnBandInfo: TBandInfoEvent; | Возникает при перемещении панели внутри компонента: Sender - компонент; control - панель; insets - зазор между сторонами компонента и панели; Рге-ferredsize - предпочтительная ширина панели; RowCount - количество рядов панелей |
TBandMoveEvent = procedure (Sender: TObject; Control: TControl; ARect: TRect) of object/property OnBandMove: TBandMoveEvent; | Возникает при перемещении панели " внутри компонента: Sender - компонент; Control - панель; ARect - прямоугольник для размещения панели |
TBandPaintEvent = procedure (Sender: TObject; Control: TCon-tro,l; Canvas: TCanvas; var ARect: TRect; var Options: TBandPaintOp-tions) of object;
property OnPaint: TNotifyEvent; |
Возникает при необходимости прорисовки панели: sender - компонент; Control - панель; Canvas - канва для прорисовки; ARect - прямоугольник прорисовки; Options - определяет, какая часть панели нуждается в прорисовке Возникает при необходимости прорисовки компонента |
Окно редактора изображений с заготовкой для указателя мыши
Рисунок 17.3. Окно редактора изображений с заготовкой для указателя мыши
С помощью опции Resource | Rename обязательно измените стандартное имя ресурса cursorl на любое другое, например, mycursor. Вы можете даже написать прежнее имя Сursor1, но изменить умалчиваемое имя ресурса нужно обязательно, иначе функция LoadCursor не сможет извлечь указатель из ресурсного файла (это имя должно состоять из заглавных букв). Дважды щелкните по ресурсу в списке ресурсов или выберите опцию Resource | Edit - на экране появится окно редактора с двумя пустыми полями, обведенными красными рамками. Левое поле предназначено для показа создаваемого указателя в крупном масштабе, правое показывает его в натуральную величину. Выберите инструмент в форме окружности в левой части окна редактора, нажмите и удерживайте клавишу Shift, чтобы получилась правильная окружность, подведите указатель мыши в виде крестика несколько правее и ниже верхнего угла левого поля редактора, нажмите левую кнопку мыши и, удерживая кнопку и клавишу Shift нажатыми, переместите указатель несколько левее и выше правого нижнего угла поля, после чего отпустите кнопку и клавишу (см. Рисунок 17.5: на этом рисунке выбранный инструмент имеет вид вдавленной кнопки). Щелкните мышью по заголовку untitiedi.res окна со списком ресурсов (или закройте окно с изображениями указателя кнопкой в его правом верхнем углу) и с помощью File | save сохраните ресурсный файл под именем cursor, после чего закройте редактор изображений. Создайте новый проект с пустой формой и напишите такой обработчик события OnCreate для формы For.gif" >
Окно редактора палитры компонентов
Рисунок 2.5. Окно редактора палитры компонентов
Окно со списком стандартных действий
Рисунок 18.21. Окно со списком стандартных действий
Если вы запустите программу, то увидите пустое окно с меню File и инструментальной кнопкой Exit, причем опции меню (кроме недоступной опции Run) и инструментальная кнопка выполняют ожидаемые от них действия. Щелчок по инструментальной панели активизирует уже знакомое нам (Рисунок 18.20) окно редактора Atcion-Manageri, и вы можете изменять состав меню и инструментальной панели.
Свойства компонента:
property ActionBars: TAction
Bars; |
Содержит коллекцию всех инструменталь ных полос, определенных в приложении. Коллекция автоматически пополняется, когда на очередную полосу впервые кладется элемент меню (категория) или кнопка (действие) |
property ActionCount: Integer; | Содержит общее количество определенных в программе действий |
property Actions[Index: Integer]:
TContainedAction; |
Открывает индексированный доступ к конкретному действию |
property FileName: TFileName; | Имя файла, в котором компонент сохраняет текущую конфигурацию действий |
property LinkedActionLists: TActionListCollection; | Содержит коллекцию всех связанных с компонентом действий |
property Images: TCustomImageList; | Ссылка на связанное с компонентом хранилище изображений |
property PrioritySchedule:
TStringList; |
Содержит для каждого действия номера сессий (запусков программы), когда связанная с действием кнопка или опция меню меняла свою видимость. Если какой-то элемент интерфейса должен постоянно присутствовать на экране, его строка PrioritySchedule должна хранить (-1) |
type TActionListState = (asNormal, asSuspended, asSuspendedEnabled) ; | Включает или отключает действия: asNormal - все действия включены; asSuspended - все действия выключены, их свойства |
property State: TActionListState; | Enabled не изменяются; asSuspendedE nabled - все действия выключены, их свойства Enabled получают значения True |
Если свойство FileName не определено, компонент не сможет запоминать изменения, сделанные пользователем в интерфейсе программы, и представит элементы интерфейса так, как они были определены при создании программы. Для файла нет умалчиваемого расширения, но сама среда Delphi запоминает сделанные вами изменения в файле BIN\DELPHI32 . DMT.
Методы компонента:
procedure LoadFromFile(const FileName: String); | Читает файл, указанный в параметре File-Name и загружает информацию, необходимую для восстановления полос действий |
procedure LoadFromStream(Stream: TStream); | Загружает информацию, необходимую для восстановления полос действий, из потока Stream Восстанавливает вид полосы таким, как сохраняет ее свойство DefaultActionBar Уничтожает файл, указанный в свойстве FileName |
procedure ResetActionBar(Index: Integer) ; procedure ResetUseageData; | Сохраняет текущие настройки интерфейса в файле FileName |
procedure SaveToFile(const FileName: String) ; procedure SaveToStream(Stream: TStream); | Сохраняет текущие настройки интерфейса в потоке Stream |
function ExecuteAction(Action: TBasicAction): Boolean; override; | Создает событие OnExecute для выполнения действия Action |
Окно связи с Inprise (Borland)
Рисунок 2.2. Окно связи с Inprise (Borland)
С помощью этого окна вы сможете получить доступ к Web-страницам корпорации Inprise для просмотра самой свежей информации о корпорации и ее программных продуктах, копирования дополни тельных файлов, чтения ответов на наиболее часто задаваемые вопросы и т. д. При повторных запусках Delphi это окно появляется автоматически с некоторой периодичностью, определяемой настройками на странице окна Tolls | Environment Options, связанной с закладкой Delphi Direct. Вы также сможете его вызвать в любой момент с помощью опции Help | Delphi Direct главного меню.
Окно утилиты Microsoft Help Workshop
Рисунок 21.6. Окно утилиты Microsoft Help Workshop
Страница General
Default topic - идентификатор умалчиваемого раздела;
Help title - заголовок основного окна справочной службы; замечу, что мне не удалось получить заметных результатов, связанных с изменением этой строки, так что для изменения заголовка основного окна пришлось использовать дополнительное окно main (см. ниже п. 21.4.3); заголовок можно также изменить при создании файла содержания (см. п. 21.5);
Notes - если переключатель выбран, компилятор сообщает о возникающих проблемах, если не выбран - только общее количество предупреждений и ошибок;
Progress - если переключатель выбран, компилятор сообщает о транслируемом -RTF-файле;
Errors - открывает окно для указания кодов ошибок, о которых компилятор не будет сообщать;
Display this text... - определяет текст, который будет помещен
В окно Справка | Версия справочной службы;
ОТ АВТОРА
ОТ АВТОРА
Этот диск предназначен для тех, кто самостоятельно или под руководством опытного преподавателя пытается научиться программировать, т.е. создавать программы, работающие под управлением современных 32-разрядных графических операционных систем (ОС) Windows 95/98/NT/2000 (в дальнейшем - Windows 32).
Эволюция технических средств персональных компьютеров привела к повсеместному вытеснению старой “доброй” ОС MS-DOS значительно более мощными системами Windows, программирование для которых существенно сложнее, чем программирование для MS-DOS. Разработчики систем программирования, и прежде всего такие корпорации, как Microsoft и Borland, не замедлили выпустить соответствующие средства: уже в 1991 году, т. е. сразу после появления Windows 3.1, Borland выпускает Turbo Pascal for Windows, а в 1992 - усовершенствованную версию этой системы программирования - Borland Pascal with Objects 7.0. Эти первые специализированные инструменты требовали основательного знания Windows и были сложны в освоении. Но вот в 1993 году Microsoft выпустила первую визуальную среду программирования Visual Basic, и программирование для Windows стало даже проще, чем программирование для MS-DOS. В ответ на это Borland в 1995 году выпустила первую версию Delphi, а затем, с интервалом в 1 год, - еще 4 версии: 2, 3, 4 и 5. Наконец, в середине 2001 г. выпускается версия б, которая и положена в основу этой книги. Замечу, что материал книги можно с некоторыми (часто несущественными) ограничениями использовать и для изучения более ранних версий.
Не секрет, что лучшим языком для изучения и освоения программирования является Паскаль, а лучшей в мире системой программирования для MS-DOS - Turbo Pascal. Delphi продолжила серию Паскаль-ориентированных средств программирования и, по моему глубокому убеждению, является наиболее удобным инструментом для Windows-программирования.
Этот диск во многом использует материал книги [27], который был дополнен и изменен с учетом изменений в версиях Delphi 6 и 5. В ней рассматривается менее трети возможностей этой мощной современной системы программирования, и это не случайно. Дело в том, что версии Delphi развивались по принципу наращивания своих возможностей. Если с 1-й по 4-ю версии Delphi могла работать с базами данных только с помощью механизма BDE, то в версии б таких механизмов уже 4 - BDE, ADO, IBExpress, dbExpress. Если 8 компонентов страницы internet версии 2 давали лишь возможность использовать некоторые технологии Интернет в локальных сетях, то более 100 компонентов версии 6 обеспечивают полноценную возможность Web-программирования, т. е. создания работающих под управлением Web-сервера программ, обеспечивающих интерактивное взаимодействие с клиентом и публикацию по его требованию необходимых данных. Как бы там ни было, перед вами всего лишь “Учебный курс”, т. е. Диск, в котором описываются лишь самые общие приемы программирования с помощью Delphi. Она, как уже говорилось, рассчитана, в основном, на начинающих программистов, во всяком случае ее освоение не требует специальных знаний ни в области программирования, ни в области Windows, хотя умение работать с Windows на уровне пользователя - обязательное условие (если, разумеется, вы захотите создать хотя бы одну из описываемых в книге программ).
Руководство на диске делится на 3 части.
В первой дается неформальное знакомство со средой Delphi и основными конструкциям лежащего в ее основе языка программирования Object Pascal. Изложенный в ней материал, как мне кажется, позволит вам в дальнейшем “видеть” систему целиком, не погрязая в неизбежных деталях, которым и посвящены остальные главы книги.
Вторая часть посвящена современному языку программирования Object Pascal, без детального знания которого эффективная работа с Delphi невозможна. Фактически все основные синтаксические конструкции и операторы этого языка описываются в довольно большой по объему и насыщенной короткими учебными примерами 5-й главе, а все остальные главы этой части посвящены типам данных. Особое значение имеет глава 9, в которой описывается основополагающий инструмент Object Pascal - классы и объекты. Практически все современные языки программирования (в том числе C++ и Visual Basic) поддерживают методику объектно-ориентированного программирования (ООП), позволяющую резко сократить сроки разработки программ и существенно повысить их качество. В гл. 9 описываются включенные в Object Pascal средства ООП, а в гл. 16 - классы самого общего назначения.
В третьей части книги рассматриваются компоненты, формы и программа в целом. Сразу оговорюсь, что рассматриваются далеко не все компоненты, но только общего употребления: за рамками книги остались компоненты для работы с базами данных, с Internet и ряд специальных компонентов.
Главы 17 и 18 посвящены стандартным компонентам - основным строительным элементам любой Delphi-программы. Являющиеся частным случаем классов, компоненты играют огромную роль в практике Delphi-программирования.
В заключительных главах книги рассмотрены так называемые глобальные объекты. Эти объекты автоматически создаются в момент старта программы и уничтожаются вместе с ней. К глобальным относится собственно объект-программа, а также экран, принтер, буфер межпрограммного обмена. Здесь же описывается методика создания справочной службы программы и проблемы ее распространения и настройки.
П 1 1 4 Опция View
П 1.1.4. Опция View
Project Manager | Показывает окно Менеджера проекта |
Translation Manager | Открывает доступ к Менеджеру трансляций Показывает окно Инспектора объектов |
Object Inspector | Показывает окно |
Object TreeView | Дерева объектов |
To_Do List | Открывает доступ к списку To-Do |
Alignment Palette | Показывает окно палитры выравнивания компонентов |
Browser | Показывает окно браузера объектов |
Code Explorer | Показывает спрятанное ранее окно Навигатора кода |
Component List | Показывает окно для выбора компонентов |
Window List | Показывает окно открытых окон проекта |
Debug Windows | Отладочные окна. Эта опция-заголовок открывает доступ к подменю со следующими опциями |
Breakpoints | Показывает окно точек останова |
Call Stack | Показывает окно стека |
Watching expressions | Показывает окно наблюдения за переменными/выражениями |
Local Variables | Позволяет наблюдать за изменениями локальных переменных в отладочном режиме |
Threads | Показывает окно статуса потоков команд |
Modules | Показывает окно модулей проекта |
Event Log | Показывает журнал событии |
CPU | Показывает состояние регистров центрального процессора |
FPU | Показывает состояние регистров арифметического сопроцессора |
Desktops | Управляет конфигурациями основных окон. Эта опция-заголовок открывает доступ к подменю со следующими опциями |
Save Desktop | Сохраняет текущую конфигурацию |
Delete | Удаляет ранее сохраненную конфигурацию |
Save Debug Desktop | Определяет текущую конфигурацию как отладочную |
Toggle For.gif" >
|
П 1 2 РАБОТА С РЕДАКТОРОМ
П 1.2. РАБОТА С РЕДАКТОРОМ
Все команды редактора можно разделить на команды перемещения курсора, команды удаления/вставки, команды работы с блоками, прочие.
При их описании используются следующие обозначения клавиш управления курсором:
вл
вп |
курсор влево;
курсор вправо; |
вв
вн |
курсор вверх;
курсор вниз. |
П 1 3 2 Окно наблюдения
П 1.3.2. Окно наблюдения
Наблюдать за состоянием переменной или выражения можно с помощью специального окна, вызываемого опцией View | Debug windows | Watches (cm. там же).
Окно наблюдения (Рисунок П 1.17) используется в отладочном режиме для наблюдения за изменением значений выражений, помещенных в это окно. Для добавления нового выражения щелкните по окну правой кнопкой мыши и выберите опцию New Watch. В строке Expression введите выражение. Окно Repeat count определяет количество показываемых элементов массивов данных; окно Digits указывает количество значащих цифр для отображения вещественных данных; переключатель Enabled разрешает или запрещает вычисление выражения. Остальные элементы определяют вид представления значения. Замечу, что в последних версиях Delphi вы можете просмотреть в отладочном режиме текущее значение любой переменной, если укажите на нее курсором: значение появится в ярлычке рядом с курсором.
П 1 3 8 Ведение протокола работы программы
П 1.3.8 Ведение протокола работы программы
В ряде случаев бывает неудобно или невозможно пользоваться пошаговой отладкой программ. Если вы, например, установите точку останова в подпрограмме прорисовки сетки TDBGrid, программа после останова не сможет нормально продолжить свою работу, т. к. в этом случае она будет пытаться восстановить экран и вновь будет остановлена и т. д. В таких ситуациях вам могут помочь контрольные точки, которые не прерывают работу программы, а лишь помещают некоторую информацию в специальный файл трассировки. Для реализации такой точки раскройте окно RunlAdd Breakpoint | Source Breakpoint (см. Рисунок П1.19), уберите флажок в переключателе Break и напишите сообщение в строке Log message. Вы можете также в строке Eval expression указать некоторое выражение, которое будет вычислено и вместе с сообщением помещено в протокол работы программы. Этот протокол можно просмотреть в любой момент (в том числе и после завершения прогона программы) с помощью опции View] Debug Windows! Event Log.
П1 1 2 Опция Edit
П1.1.2. Опция Edit
Undo | Отменяет последнее изменение проекта |
Redo | Восстанавливает последнее изменение проекта |
Cut | Вырезает выбранный компонент формы или фрагмент текста и
помещает его в буфер Clipboard |
Copy | Копирует в Clipboard выделенные компоненты формы или
фрагмент текста модуля |
Paste | Извлекает из буфера и переносит компоненты на форму или копирует текст в модуль (в позицию, указываемую текущим положением текстового курсора) |
Delete | Удаляет выделенные компоненты или фрагмент текста |
Select All | Выделяет все компоненты формы или весь текст модуля |
Align To Grid | Привязывает выделенные компоненты к масштабной сетке так, чтобы их левые верхние углы располагались в ближайших точках сетки |
Bring To Front | Перемещает выделенные компоненты на передний план |
Send To Back.gif" >
|
П1 1 3 Опция Search
П1.1.3. Опция Search
Find | Ищет фрагмент текста и подсвечивает его, если он найден |
Find In Files | Ищет фрагмент текста во всех файлах проекта, или только в открытых файлах, или, наконец, |
Replace | Ищет и заменяет фрагмент текста во всех файлах текущего каталога |
Search Again | Повторяет поиск или поиск и замену |
Incremental Search | Ищет текст по мере его ввода - сначала первую букву, затем две первые буквы и т. д. |
Go to Line Number | Перемещает курсор на строку с указанным номером от начала файла |
Browse Symbol | Показывает место возникновением определения символа программы (опция доступна только после успешного прогона программы). Символом считается любой глобальный идентификатор вашего проекта |
Find Error | По адресу ошибки периода прогона программы отыскивает фрагмент кода, связанный с ее |
Go to Line Number Find Error Browse Symbol
П1 1 5 Опция Project
П1.1.5. Опция Project
Lanages | Позволяет добавить новый, удалить или сделать главным один из существующих языков локализации |
View Source | Показывает окно с кодом проекта Опция-заголовок. |
Add To Repository | Помещает проект в репозиторий |
Import Type Library | Импортирует в проект библиотеку типов элементов ActiveX |
Remove From Project | Удаляет файл из проекта |
Add To Project | Добавляет файл к проекту |
Add Remove Set Active Update Resources DLL | Добавляет новый язык локализации Удаляет существующий язык локализации Делает активным язык локализации Создает заново ресурсные DLL, управляющие локализацией программы |
Add New Project | Добавляет программу, DLL или пакет к текущей проектной группе |
Add Exists Project | Открывает проект и добавляет его к текущей проектной группе |
Compile Project! | Компилирует модули, которые изменились с момента предыдущей компиляции проекта |
Build Projecti | Компилирует все модули проекта и создает исполняемую программу |
Syntax Check Project1 | Проверяет синтаксическую правильность программы |
Information | Показывает информацию о вашей программе |
Compile All Projects | Компилирует все файлы данной проектной группы, которые изменились с момента предыдущей компиляции |
Build All Projects | Компилирует все файлы данной проектной группы независимо от того, изменялись ли они или нет с момента последней компиляции |
Web Deployment Options | Устанавливает ActiveX компонент или ActiveFor.gif" >
|
П1 1 5 Опция Run
П1.1.5. Опция Run
Run | Компилирует программу и делает ее прогон |
Attach to Process | Позволяет присоединиться в режиме отладки к одному из уже запущенных процессов на другой сетевой машине |
Parameters | Указывает командную строку запуска вашей программы |
Register ActiveX Servers | Регистрирует ваш проект в реестре Windows. Опция доступна для ActiveX-проектов |
Unregister ActiveX Servers | Удаляет ваш проект из реестра Windows. Опция доступна для ActiveX-проектов |
Install MTS Objects | Регистрирует в вашем проекте объект MTS |
Step Over | В отладочном режиме выполняет текущую строку кода и не прослеживает работу вызываемых подпрограмм |
Trace Into | В отладочном режиме выполняет текущую строку кода и
прослеживает работу вызываемых подпрограмм |
Trace To Next Source Line | Программа выполняется до ближайшего от текущего
положения курсора исполняемого оператора |
Run To Cursor | В отладочном режиме выполняет программу и останавливается перед выполнением кода в строке с текстовым курсором |
Run Until Return | В отладочном режиме выполняет текущую подпрограмму и останавливается |
Show Execution Point | Отображает в окне кода оператор, на котором было прервано выполнение программы |
Program Pause | Приостанавливает прогон отлаживаемой программы |
Program Reset | Прекращает прогон программы и восстанавливает ре жим конструирования программы |
Inspect | Открывает окно проверки текущего значения |
Evaluate/Modify | Открывает окно проверки/изменения переменных |
Add Watch | Добавляет переменную или выражение в окно наблюдения |
Add Breakpoint | Добавляет точку останова |
П1 1 6 Опция Component
П1.1.6. Опция Component
New Component | Открывает окно эксперта компонентов |
Install Component | Помещает компонент в существующий или новый пакет |
Import ActiveX Control | Добавляет к проекту библиотеку типов ActiveX-компонентов |
Create Component Template | Помещает шаблон в палитру компонентов |
Install Packages | Указывает пакеты, необходимые на этапе конструирования и прогона программы |
Configure Palette | Вызывает диалоговое окно настройки палитры компонентов |
П1 1 7 Опция Database
П1.1.7. Опция Database
Explore | Вызывает инструмент исследования баз данных - Database Explorer или SQL Explorer (в зависимости от версии Delphi) |
SQL Monitor | Вызывает инструмент запросов к БД - SQL Monitor |
For.gif" > |
П1 1 8 Опция Tools
П1.1.8. Опция Tools
Environment Options | Вызывает окно настройки параметров среды Delphi и ее инструментов |
Editor Options | Вызывает окно настройки параметров редактора Delphi |
Debugger Options | Вызывает окно настройки параметров отладчика Delphi |
П 1.1.8.1. Настройка параметров среды
Диалоговое окно настройки параметров среды вызывается опцией Tools I Environment Options (Рисунок П1.11).
П1 1 9 Опция Help
П1.1.9. Опция Help
Delphi Help | Основная справочная служба Delphi |
Delphi Tools | Справочная служба по инструментам Delphi |
Windows SDK | Справочная служба по Windows API |
Borland Home Page | Домашняя страничка Borland |
Delphi Home Page | Домашняя страничка Delphi |
Borland Developer Support | Страничка поддержки разработчиков |
Delphi Direct | Окно Интернет-поддержки разработчика |
Customize | Вызов службы OpenHelp |
About | Окно с краткой информацией о Delphi |
П1 2 1 Команды перемещения курсора
П1.2.1. Команды перемещения курсора
вл | на символ влево | HOME | в начало строки |
вп | на символ вправо | END | в конец строки |
Ctrl-ВЛ | на слово влево | Ctrl+PgUp | в начало экрана |
Ctrl-ВП | на слово вправо | Ctrl+PgDn | в конец экрана |
вв | на строку вверх | Ctrl+HOME | в начало файла |
вн | на строку вниз | Ctrl+END | в конец файла |
PgUp | на страницу вверх | Ctrl+Q+B | в начало блока |
PgDn | на страницу вниз | Ctrl+Q+K | в конец блока |
П1 2 3 Команды работы с блоками
П1.2.3. Команды работы с блоками
При подготовке текстов программ часто возникает необходимость перенести фрагмент текста в другое место или удалить его. Для такого рода операций удобно использовать блоки - фрагменты текста, рассматриваемые как единое целое. Длина блока может быть достаточно большой, он может занимать несколько экранных страниц. В каждый момент в одном окне редактора может быть объявлен только один блок. Обмен блоками между окнами возможен только через буфер Clipboard.
Ctrl+K+T | пометить в качестве блока слово слева от курсора |
Ctrl+K+P | напечатать блок |
Ctrl+K+H | убрать выделение блока цветом; повторное использование Ctrl+K+H вновь выделит блок |
Ctrl+K+Y | удалить блок |
Ctrl+K+R | читать блок из дискового файла в позицию, определяемую текстовым курсором |
Ctrl+K+W | записать блок на диск |
Ctrl+K+I | сместить блок вправо на два символа |
Ctrl+K+U | сместить блок влево на два символа |
Shift+Delete | вырезать блок и поместить его в Clipboard |
Ctrl+Insert | копировать блок в буфер Clipboard |
Shift+Insert | вставить содержимое Clipboard в позицию, указываемую текстовым курсором |
П1 2 4 Прочие команды
П1.2.4. Прочие команды
Ctrl+F F3 | искать по образцу продолжить поиск |
Ctrl+R | искать по образцу и заменить |
Ctrl+K+n | установить маркер; п = 0..9 (см. ниже) |
Ctrl+Q+n | искать маркер |
Ctrl+Q+] | искать парную скобку (см. ниже) |
Ctrl+O+O | вставить настройку компилятора в начало файла (см. ниже) |
Ctri+Shift+R | начинает и заканчивает определение макроса |
Ctrl+Shift+P | выполняет ранее определенный макрос |
Назначение большинства команд понятно без каких-либо комментариев, но некоторые нуждаются в пояснении.
Ctrl+K+n. Устанавливает в текущую позицию курсора маркер с номером п = 0..9. Маркер на экране появляется в виде небольшого окошка с номером маркера в служебном поле слева от текста. Он никак не влияет на исполнение программы. Команда используется совместно с командой Ctrl+Q+n (искать маркер с номером и) для ускорения поиска нужных фрагментов текста при разработке крупных программ. Раз установленный маркер нельзя удалить, но можно его поместить в другое место файла. При записи на диск маркеры не запоминаются, т. е. после чтения файла с диска в нем нет маркеров.
Ctrl+Q+]. Эта команда используется для поиска ближайшей парной скобки. Она позволяет отыскивать пары скобок ( и ), { и }, [ и ]. Подведите курсор так, чтобы он расположился непосредственно перед одной из скобок, и дайте команду - редактор отыщет нужную парную скобку.
Ctrl+0+0. Эта команда заставит редактор поместить в самое начало файла строки, содержащие текущую настройку среды в виде директив компилятора, например:
($A+,B-,C+,D+,E-,F-,G+,H+,
I+,J+,K-,L+,M-,N+,0+,P+,
Q-,R-,S-,T-,U-,V+,W-,X+,
Y-}
($MIKSTACKSIZE $00004000)
($MAXSTACKSIZE $00100000)
{$IMAGEBASE $00400000}
{$APPTYPE GUI)
В окне кода можно запрограммировать часто повторяющиеся манипуляции с клавишами в виде макроса. Для начала указания макроса используется команда Ctri+Shift+R . После этого любые действия программиста с клавиатурой запоминаются вплоть до повторения команды Ctrl+Shift+R. Запомненный макрос исполняется командой Ctrl+Shift+P.