Компонент TToolBar- инструментальная панель
Компонент TImageList
УПРАВЛЕНИЕ ПРОГРАММОЙ С ПОМОЩЬЮ ПАНЕЛИ ИНСТРУМЕНТОВ
Цель: Научиться подключать инструментальную панель, изучить основные свойства и типы кнопок, использование их для управления вычислительным процессом.
Постановка задачи:Разработать программу, содержащую инструментальную панель со всеми возможными кнопками.
Компонент TImageList представляет собой набор изображений одинаковых размеров, на которые можно ссылаться по индексам, начинающимся с 0. Этот компонент позволяет организовать эффективное и экономное использование пиктограмм и битовых матриц другими компонентами, например TToolBar.
Изображения в компонент TImageList могут быть загружены в процессе проектирования с помощью редактора списка изображений. Окно редактора вызывается двойным щелчком на компоненте TImageList.
В окне редактора можно добавить в списки изображений нужное изображение, используя команду Add, удалить изображение командой Delete, очистить весь список командой Clear. При добавлении изображений в список открывается обычное окно открытия файла изображений. Необходимо иметь ввиду, что размеры всех изображений должны быть одинаковыми. Как правило это размер, используемый в меню, списках, кнопках.
Каждое загруженное в список изображение получает индекс. Именно на эти индексы впоследствии вы можете ссылаться, когда необходимо загрузить нужное графическое изображение.
TToolBar |
Компонент TToolBar – это специальный контейнер для создания инструментальных панелей. В компонент TToolBar можно поместить любые другие компоненты. Как правило, он используется для расположения в ней кнопок, с помощью которых можно оперативно выполнить нужную команду. Кнопки можно группировать и располагать в несколько рядов.
Главная отличительная черта TToolBar - его способность гибкого управления дочерними элементами, которые он может группировать, выравнивать по размерам, располагать в несколько рядов. Компонент может манипулировать любыми вставленными в него дочерними элементами, но все его возможности в полной мере проявляются только при использовании специально для него разработанного компонента TToolButton (инструментальная кнопка). Этот компонент похож на кнопку TSpeedButton, но в палитре компонентов его нет.
Для того, чтобы вставить TToolButton в инструментальную панель TToolBar, необходимо правой кнопкой щелкнуть на компоненте TToolBar и в открывшемся окне выбрать NewButton или NewSeparator (новый сепаратор). Сепараторы предназначены для функционального выделения на инструментальной панели групп элементов и представляют собой разновидности кнопок TToolButton.
Хотя компонент TToolButton не имеет свойства, предназначенного для хранения картинки, однако он умеет использовать контейнер TImageList, чтобы извлечь из него нужную картинку и поместить ее на инструментальную кнопку.
Методику использования TToolBar совместно с TToolButton рассмотрим на примере создания текстового редактора. Пусть требуемый дизайн программы имеет вид, показанный на фиг.1.
Фиг.1. Пример TToolBar с кнопками TToolButton
Методика использования TToolBar состоит в следующем.
1. Поместите на пустую форму компонент TImageList, щелкните по нему правой кнопкой мыши и выберите продолжение TImageList Editor.
2. Для заполнения контейнера TImageList1 подойдут любые небольшие по размеру изображения. К сожалению, растры из каталога images | buttons (полный путь: c:\Program Files\Common Files\Borland Shared\Images\Buttons), рассчитанные на использование в кнопках .
prope ger; propeTImag prope |
TSpeedButton содержат по два изображения каждый - обычное и для запрещенной кнопки.
При добавлении изображений для кнопки TToolButton следует иметь ввиду, что использование заготовок из каталога images | buttons в кнопках TToolButton приведет к появлению для каждой кнопки по два изображения одновременно. При попытке добавить сдвоенное изображение командой Add редактора в контейнер TImageList DELPHI задаст вопрос: Размерность изображения больше размерности списка. Разделить на отдельные битовые матрицы? На данный вопрос надо отвечать положительно. Тогда загружаемая битовая матрица автоматически разделится на отдельные изображения и потом вы можете удалить те из них, которые Вам не нужны кнопкой Delete редактора.
3. Поместите на форму компонент TToolBar, в окне Инспектора объектов разыщите свойство Images, раскройте список в правой колонке строки Images и выберите ImageList1. Мы указали компоненту на источник изображений и можем теперь вставлять в него кнопки.
4. Щелкните по TToolBar правой кнопкой мыши и выберите New Button.
5. Вставьте еще две кнопки, после чего вставьте разделитель New Separator.
6. Разместите на ToolBar остальные кнопки и сепараторы (см. фиг.1).
7. Если вы захотите, чтобы кнопки имели модный «плоский» вид, установите в свойство Flat компонента ToolBar1 значение True.
Свойство Buttons компонента TToolBar позволяет обратиться к каждому его дочернему компоненту как к объекту класса TToolButton.
Вид изображения на кнопке определяется свойством ImageIndex компонента TToolButton. Оно определяет индекс изображения, хранящегося во внешнем компоненте ImageList. Указание на этот компонент задается свойствами Images и Disable Images компонента TToolBar. У кнопки есть и другие особенности: находиться в нажатом или отжатом состояниях и т.п.
Для компонента TToolBar определено событие OnResize, возникающее при изменении размеров компонента.
Листинг Unit DemoToolBar приводится ниже.
Unit DemoToolBar;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, ComCtrls, ImgList,
ToolWin;
type
TForm2 = class(TForm)
Memo1: TMemo;
OpenDialog1: TOpenDialog;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ImageList1: TImageList;
SaveDialog1: TSaveDialog;
procedure FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
procedure sbtExitClick(Sender: TObject);
procedure sbtNewClick(Sender: TObject);
procedure sbtOpenClick(Sender: TObject);
procedure sbtSaveClick(Sender: TObject);
procedure sbtCutClick(Sender: TObject);
procedure sbtCopyClick(Sender: TObject);
procedure sbtPasteClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
Memo1.Top := 25;
Memo1.Height := Form2.ClientHeight - 25;
end;
procedure TForm2.sbtExitClick(Sender: TObject);
begin
Close;
end;
procedure TForm2.sbtNewClick(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
procedure TForm2.sbtOpenClick(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
procedure TForm2.sbtSaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TForm2.sbtCutClick(Sender: TObject);
begin
Memo1.CutToClipboard;
end;
procedure TForm2.sbtCopyClick(Sender: TObject);
begin
Memo1.CopyToClipboard;
end;
procedure TForm2.sbtPasteClick(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;
end.