procedure TForm1.FormCreate(Sender: TObject);
begin
Memol. Lines. LoadFromFile(ChangeFileExt(Application. ExeName,'.dpr'))
end;
Специализированный редактор TMaskEdit предназначен для ввода текста, соответствующего некоторому шаблону, задаваемому свойством EditMask: String. Если это свойство не задано, TMaskEdit работает как обычный редактор TEdit. Свойство IsMasked: Boolean доступно только для чтения и содержит True, если строка шаблона задана. Свойство EditText: string содержит текст до наложения на него маски шаблона (т. е. то, что ввел пользователь), а свойство Text: String может (в зависимости от шаблона см. ниже) содержать либо исходный текст, либо результат наложения на него маски шаблона.
Для всех редактируемых компонентов определено событие OnChange, которое генерируется при изменении содержимого компонента. Для примера приведем обработчик события OnChange, в котором изменяется надпись при наборе текста в строке редактирования.

procedure TForm1.Edit1Change(Sender: TObject);
begin
Label1.Caption:='Идет ввод текста';
end;
5.4 Списки выбора
Списки выбора являются удобными интерфейсными элементами Windows, с помощью которых пользователь может выбрать один или несколько элементов выбора. На закладке Standart имеются два компонента, которые служат примерами списков выбора: TListBox (обычный список выбора) и TComboBox (раскрывающийся список выбора). Оба эти компонента имеют общего предка TWinControl.
Рассмотрим свойства компонента TListBox.
Таблица 18 Свойства компонента TListBox
AutoComplete | Логическое свойство, которое определяет, будет ли компонент автоматически получать фокус ввода при нажатии пользователем на клавиатуру. |
BorderStyle | Перечислимое свойство определяет стиль рамки: bsNone – нет рамки; bsSingle – рамка толщиной в один пиксел. |
Canvas | Канва для программной прорисовки элементов. |
Columns | Определяет количество колонок элементов в списке. |
ItemIndex | Содержит индекс сфокусированного элемента. Если свойство MultiSelect равно False, то Itemlndex совпадает с индексом выделенного элемента |
Items | Содержит набор строк, показываемых в компоненте |
MultiSelect | Логическое свойство, разрешающее (отменяющее) возможность выбора нескольких элементов |
SelCount | Содержит количество выбранных элементов |
Selected[X: Integer] | Индексированное свойство, которое содержит признак выбора (True/False) для элемента с индексом Х (первый элемент имеет индекс 0) |
Sorted | Логическое свойство, которое разрешает/отменяет сортировку строк в алфавитном порядке |
Style | Перечислимое свойство, которое определяет способ прорисовки элементов в компоненте: lbStandard – элементы рисует Windows; lbOwnerDrawFixed, lbOwnerDrawVariable – прорисовка элементов осуществляется программно. |
TopIndex: Integer | Индекс первого видимого в окне элемента |
Создание элементов (опций) списка компонента реализуется с помощью методов свойства Items (типа TStrings) – Add, Append, Insert или LoadFromFile.
Для примера рассмотрим процедуру переноса выбранных строк из одного списка в другой.

procedure TForm1.BitBtn1Click(Sender: TObject);
var i: integer;
begin
for i:=0 to ListBox1.Items. Count-1 do
If ListBox1.Selected[i] then
ListBox2.Items. Add(ListBox1.Items[i]);
end;
Комбинированный список TComboBox представляет собой комбинацию списка TListBox и редактора TEdit, и поэтому большинство его свойств и методов заимствованы у этих компонентов. Существуют пять модификаций компонента, определяемые его свойством Style: csSimple, csDropDown, csDropDownList, csOwnerDrawFixed и csOwnerDrawVariabie. В первом случае список всегда раскрыт, в остальных он раскрывается после нажатия кнопки справа от редактора. В модификации csDropDownList редактор работает в режиме отображения выбора и его нельзя использовать для ввода новой строки (в других модификациях это возможно). Модификации csOwnerDrawFixed и csOwnerDrawVariable используются для программной прорисовки элементов списка.
Собственными у компонента являются лишь свойства и события, связанные с раскрытием списка.
Таблица 19 Свойства и события TComboBox, связанные с раскрытием списка
DropDownCount | Определяет количество элементов списка, появление которых еще не приводит к необходимости прокрутки списка По умолчанию это свойство имеет значение 8: если в списке указано 9 и более элементов (т. е. больше, чем содержит DropDownCount), при его раскрытии к окну будет добавлена полоса прокрутки. |
DroppedDown | Определяет, раскрыт ли в данный момент список. Это свойство доступно также для записи, что позволяет программно управлять состоянием списка. |
Событие OnDropDown происходит при изменении состояния списка.
5.5 Меню
Визуальный компонент класса TMainMenu определяет главное меню формы, которое может быть только у формы. На форму можно поместить сколько угодно объектов этого класса, но отображаться в полосе меню в верхней части формы будет только тот из них, который указан в свойстве Menu формы. После установки компонента на форму необходимо создать его опции. Для этого следует дважды щелкнуть по компоненту левой кнопкой мыши, либо нажать на нем правую кнопку и выбрать команду Menu Designer в появившемся вспомогательном меню. Процесс создание опций меню имеет интуитивно понятный интерфейс. Перейдите в окно Инспектора объектов и введите текст опции в строке caption, после чего нажмите Enter – опция готова, и можно переходить к следующей. Каждая опция главного меню может раскрываться в список подопций или содержать конечную команду. Для создания подопций щелкните мышью по строке ниже опции и введите первую подопцию. Продолжайте ввод, пока не будет создан весь список подопций, после чего щелкните по пустому прямоугольнику справа от первой опции и введите вторую опцию. В названиях опций можно указать символ “&” перед тем символом, который определит клавишу быстрого выбора опции (в терминологии Windows такие клавиши называются акселераторами). Например, на рисунке показана опция Файл, которую можно выбрать сочетанием клавиш Alt+Ф. При создании меню эта опция в строке Сaption в Инспекторе объектов содержала текст &Файл. При желании можно вставить разделительную черту, отделяющую группы подопций. Для этого необходимо назвать очередной элемент меню именем “–”.
Для создания разветвленных меню, т. е. таких, у которых подопций вызывают новые списки подопций, щелкните по подопций и нажмите Ctrl+вправо, где вправо – клавиша смещения курсора вправо. Такого же эффекта можно добиться после щелчка правой кнопкой мыши на подопций и выборе продолжения Сreate Submenu. На рисунке показан пример разветвленной структуры меню.
Таблица 20Свойства компонента TMainMenu
AutoHotkeys | Перечислимое свойство, определяющее будет ли следить программа за уникальностью клавиш быстрого выбора для всех опций меню: maAutomatic – автоматически при создании опции; maManual – с помощью вызова специального метода; maРarent – по правилу, установленному для опции верхнего уровня |
Images | Содержит ссылку на объект – хранилище изображений, которые могут появляться около индивидуальных элементов (пунктов) в меню |
Items | Открывает индексированный доступ к опциям меню |
Каждый элемент меню является объектом класса TMenuItem. Свойства этого класса описаны в следующей таблице. Термин “родительская опция” означает опцию, выбор которой приводит к раскрытию подменю с данной опцией.
Таблица 21 Свойства TMenuItem
AutoCheck | Логическое свойство, которое определяет, будет или нет автоматически изменяться свойство Сhecked при выборе опции меню |
AutoHotkeys | Определяет, будет ли следить программа за уникальностью клавиш быстрого выбора для подопций: maAutomatic – автоматически при создании подопции; maManual – с помощью вызова специального метода; maParent – по правилу, установленному для опции верхнего уровня |
Bitmap | Содержит ссылку на связанное с опцией изображение. Это изображение (если оно есть) появляется слева от опции. Свойство игнорируется, если установлено свойство ImageIndex (см. ниже) |
Break | Перечислимое, которое позволяет создать многоколончатый список подменю (см. ниже) |
Checked | Если свойство содержит True, рядом с опцией появляется галочка |
Count | Содержит количество опций в подчиненном меню, связанном с данным элементом (только для чтения) |
ImageIndex | Содержит индекс связанного с опцией изображения из компонента TImageList. Это изображение (если оно есть) появляется слева от опции. Если свойство имеет значение -1, с опцией не связано никакого изображения из TImageList |
Items[Index: Integer] | Позволяет обратиться к любой опции подчиненного меню по ее индексу |
Shortcut | Задает клавиши-акселераторы для быстрого выбора данной опции |
В Delphi 4 (5 и 6) появилась возможность связывать с опциями меню небольшие изображения. Эти изображения можно задать либо свойством BitMap, либо свойством ImageIndex. В последнем случае предполагается, что для меню в целом определено свойство Images. Изображение показывается слева от опции. Например, на рисунке показан фрагмент главного меню Delphi с раскрытой опцией File. Как видим, опции Open, Оpen Project, Save и т. д. снабжены небольшими пиктограммами. Введение пиктограмм в меню повышает наглядность
Свойство Break по умолчанию имеет значение mbNone. Два других возможных значения этого свойства используются для создания многоколончатых списков подменю. Значение mbBarBreak заканчивает предыдущую колонку и начинает новую. Эта опция меню будет открывать новую колонку, которая отделяется от предыдущей вертикальной чертой. Значение mbBreak также создает новую колонку, но не вставляет разделительную черту. Эти значения игнорируются в опциях самого первого уровня. В окне конструктора многоколончатое меню отображается как обычное.
Для элемента меню определено единственное событие OnClick, которое возникает при щелчке на опции или при нажатии Enter, если в этот момент данная опция была выбрана (подсвечена). Обработчик события становится доступен после двойного щелчка на опции в окне конструктора меню.
Компоненты класса TPopupMenu используются для создания вспомогательных (локальных) меню, появляющихся после нажатия правой кнопки мыши. В отличие от главного меню, вспомогательное меню может быть создано для любого оконного компонента. Чтобы связать щелчок правой кнопкой мыши на компоненте с раскрытием вспомогательного меню, в свойство PоpupMеnu компонента необходимо поместить имя компонента-меню.
Вспомогательное меню создается с помощью конструктора меню и содержит элементы описанного в п. 18.1.2 класса TMenuItem, поэтому процесс создания и свойства вспомогательного меню ничем не oтличаются от процесса создания и свойств TMainMenu.
5.6 Диалоговые компоненты
Существует множество различных ситуаций, когда пользователю необходимо сделать некий выбор, например, выбрать имя файла для записи или для открытия. Для этой цели служат диалоговые компоненты, которые обеспечивают создание и показ диалоговых окон во время работы приложения. Диалоговые компоненты сосредоточены на закладке Dialogs на Палитре компонентов.
Рассмотрим компоненты TSaveDialog и TOpenDialog. Эти компоненты имеют идентичные свойства и поэтому рассматриваются вместе. Пример окна, которое реализует компонент TOpenDialog показан на рисунке.

Таблица 22 Свойства TSaveDialog и TOpenDialog
FileName | Содержит маршрут поиска и выбранный файл при успешном завершении диалога |
Filter | Используется для фильтрации (отбора) файлов, показываемых в диалоговом окне. |
InitialDir | Содержит имя начального каталога |
DefaultExt | С помощью свойства DefaultExt формируется полное имя файла, если при ручном вводе пользователь не указал расширение. В этом случае к имени файла прибавляется разделительная точка и содержимое этого свойства. |
Title | Содержит заголовок диалогового окна |
Программа может использовать это свойство FileName для доступа к файлу с целью читать из него данные (TOpenDialog) или записывать в него (TSaveDialog), при этом пользователь может ввести произвольное имя и, следовательно, указать несуществующий файл. Для записи это не имеет значения, но при чтении отсутствие файла может привести к краху программы. Чтобы избежать этого, можно проверить существование файла глобальной функцией FileExists.
Свойство Filter можно устанавливать с помощью специального редактора на этапе конструирования формы или программно. Для доступа к редактору достаточно щелкнуть по кнопке в строке Filter окна Инспектора объектов. При программном вводе фильтры задаются одной длинной строкой, в которой символы “|” служат для разделения фильтров друг от друга, а также для разделения описания фильтруемых файлов от соответствующей маски выбора. Например, оператор
OpenDialog1.Filter := 'Текстовые файлы|*.txt| Файлы Паскаля|*.раs';
задает две маски для отбора файлов с расширениями раs и TXT.
Главным методом компонентов TSaveDialog и TOpenDialog является функция Execute, которая показывает окно диалога и возвращает значение True, если диалог успешно завершен, т. е. пользователь ввел подходящее имя файла и нажал кнопку Сохранить/ Открыть. В противном случае, функция Execute возвращает значение False.
В диалоговом окне для ручного ввода имени файла предусмотрен элемент TEdit, который при желании можно заменить на TCоmbовох. Для этого необходимо свойству FileEditStyle придать значение fsComboBox вместо умалчиваемого fsEdit. Если выбран комбинированный список, с ним можно связать протокол выбора имен. Для этого используется свойство HistoryList, содержимое которого будет появляться в выпадающем списке. Этот список не пополняется автоматически, поэтому за его содержимым должна следить программа. Например:
if OpenDialog1.Execute then
begin
HistoryList. Add(OpenDialog1.FileName);
end;
Настройка диалога может варьироваться с помощью сложного свойства Options. Логические подсвойства этого свойства имеют следующий смысл.
Таблица 23 Значения свойства Options
ofReadOnly | Устанавливает переключатель Только для чтения |
ofOverwritePrompt | Требует согласия пользователя при записи в существующий файл |
ofHideReadOnly | Прячет переключатель Только для чтения |
оfNoChangeDir | Запрещает смену каталога |
ofShowHelp | Включает в окно кнопку Help |
ofNoValidate | Запрещает автоматическую проверку правильности набираемых в имени файла символов |
оfAllowMultiSelect | Разрешает множественный выбор файлов |
ofExtensionDifferent | При завершении диалога наличие этого значения в свойстве Оptions говорит о том, что пользователь ввел расширение, отличающееся от умалчиваемого |
ofPathMustExist | Разрешает указывать файлы только из существующих каталогов |
ofFileMustExist | Разрешает указывать только существующие файлы |
ofCreatePrompt | Требует подтверждения для создания несуществующего файла |
ofShareAware | Разрешает выбирать файлы, используемые другими параллельно выполняемыми программами |
оfNoReadOnlyReturn | Запрещает выбор файлов, имеющих атрибут Только для чтения |
ofNoTestFileCreate | Запрещает проверку доступности сетевого или локального диска |
оfNoNetworkButton | Запрещает вставку кнопки для создания сетевого диска |
ofNoLongNames | Запрещает использование длинных имен файлов |
ofOldStyleDialog | Создает диалог в стиле Windows 3-х |
Приведем пример обработчика нажатия пункта Open главного меню формы. При этом файл с выбранным именем (с помощью диалога TOpenDialog) загружается в многострочный редактор TMemo.
procedure TForm1.Open1Click(Sender: TObject);
begin
If OpenDialog1.Execute then
If FileExists(OpenDialog1.FileName)
then
Memo1.Lines. LoadFromFile(
OpenDialog1.FileName)
end;
5.7 Таблица строк
Компонент TStringGrid (закладка Additional) предназначен для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. Таблица делится на две части – фиксированную и рабочую. Фиксированная часть служит для показа заголовков столбцов/рядов и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и самый верхний ряд таблицы, однако с помощью свойств FixedCols и FixedRows можно задать другое количество фиксированных столбцов и рядов (если эти свойства имеют 0, таблица не содержит фиксированной зоны). Рабочая часть – это остальная часть таблицы. Она может содержать произвольное количество столбцов и рядов, более того, эти величины могут изменяться программно. Рабочая часть может не умещаться целиком в пределах окна компонента, в этом случае в него автоматически помещаются нужные полосы прокрутки. При прокрутке рабочей области фиксированная область не исчезает, но меняется ее содержимое – заголовки строк и рядов.
Центральным свойством компонента является Cells – двухмерный массив ячеек строкового типа, каждая из которых может содержать произвольный текст. Конкретная ячейка определяется парой чисел – номером столбца и номером ряда, на пересечении которых она находится (нумерация начинается с нуля). Количество ячеек по каждому измерению хранит пара свойств ColСount (количество столбцов) и RowCount (количество рядов). Значения-этих свойств и, следовательно, размеры таблицы могут меняться как на этапе разработки программы, так и в ходе ее работы, однако их значения должны быть как минимум на единицу больше соответственно значений в свойства FixedCols и FixedRows, определяющих размеры фиксированной зоны.
Таблица 24Свойства компонента TStringGrid
BorderStyle | Определяет рамку компонента: bsNone – нет рамки; bsSingle – рамка толщиной 1 пиксель |
Cells[ACol, ARow] | Определяет содержимое ячейки с табличными координатами (ACol, ARow) |
Col | Содержит номер столбца сфокусированной ячейки |
ColCount | Содержит количество столбцов таблицы |
Cols[Index: Integer] | Содержит все строки колонки с индексом Index |
ColWidths[Index: Longint] | Содержит ширину столбца с индексом Index |
EditorMode | Логическое свойство, которое разрешает/запрещает редактирование ячеек. Игнорируется, если свойство Options включает goAlwayseShowEditor или не включает goEditing |
FixedColor | Определяет цвет фиксированной зоны |
FixedCols | Определяет количество столбцов фиксированной зоны |
FixedRows | Определяет количество рядов фиксированной зоны |
GridHeight | Содержит высоту таблицы |
GridWidth | Содержит ширину таблицы |
Options | Содержит параметры таблицы |
Row | Содержит номер ряда сфокусированной ячейки |
RowCount | Содержит количество рядов таблицы |
Rows[Index: Integer] | Содержит все строки ряда с индексом Index |
ScrollBars | Определяет полосы прокрутки: ssNone – нет полос; ssHorizontal – в таблицу вставляется горизонтальная полоса; ssVertical – вставляется вертикальная полоса; ssBoth – вставляются обе полосы |
В следующем примере компонент TStringGrid используется для показа значений функции с заданным шагом и на заданном отрезке (границы вводятся с клавиатуры в компоненты TEdit). Для TStringGrid в Инспекторе объектов необходимо установит свойства:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


