Шупрута В.В. - Delphi 2005 - Учимся программировать (1080891), страница 35
Текст из файла (страница 35)
Граница панели инструментовможет быть тонкой ( F i x e d S i n g l e ) , «объемной» (Fixed3D) или может отсутствовать(None)Свойство определяет компонент i m a g e L i s t , который является источником картинок длякнопок панели(плоские кнопки)ImageListText A l i g nСвойство, определяющее положение поясняющего текста к кнопкам. Возможно дваварианта положения текста: справа от картинки (Right), снизу картинки (Under-neath)VisibleПризнак необходимости отображать или скрывать панель инструментов.
Если свойствоустановлено в False, то панель отображаться не будетEnabledПризнак доступности кнопок панели инструментов. Если свойство установлено в False,то кнопки на панели будут недоступныDockСвойство определяет границу окна, к которой будет прикреплена панель. Панель можетприкрепляться к верхней (Тор), нижней (Bottom), левой ( L e f t ) или правой (Right)границеВ качестве рекомендаций по использованию этого компонента можно отметить следующие. Перед использованием компонента лучше сначала добавить кформе компонент ImageList (см.
выше) и произвести его настройку. Послетого как картинки к кнопкам будут определены, можно настраивать и саму панель с кнопками. Для этого нужно в строке свойства Buttons (Кнопки) щелкнуть по кнопке с тремя точками. В появившемся окне редактора свойствКомпонент ToolBarToolBar Button Collection Editor необходимо щелкнуть по кнопке Add для добавления кнопки на панель. После того как нужное количество кнопок добавлено, можно производить настройку каждой из них. Свойства кнопки указываются в правой части упомянутого выше окна (рис.
5.18).В качестве примера использования этого компонента можно привестипрограмму, являющуюся простейшим редактором текстовых файлов. На рис. 5.19показана форма приложения, а в листинге 5.11 приведен текст программы.HeplРис. 5.18 т Добавление кнопок к панели ToolBarОткрыть файлУ| Сохранить в ЧРис. 5 . 1 9 т Форма программы, использующейкомпонент ToolBar•ГЛАВА 5 • Основные компоненты при программировании для .NETНеобходимо отметить некоторое отличие при использовании кнопок напанели ToolBar от рассмотренных нами ранее обычных кнопок Buttons. Принажатии на любую из кнопок панели инструментов возникает событие Butt o n C l i c k (не путайте с обычным событием Click, которое мы рассматривалираньше). При этом возникшее событие является общим для всех кнопок,расположенных на панели, соответственно, необходимо будет дополнительноузнавать, какая кнопка была нажата.
Для этого воспользуйтесь функцией I n dexOf, указав в качестве параметра коллекцию кнопок панели (см. ниже втексте программы). Результатом выполнения этой функции будет индекскнопки, которая была нажата (при этом необходимо помнить, что нумерацияиндексов начинается с нуля, а не с единицы).Листинг 5.11 тТекст программы «Простейший редактор текста»u n i t WinForm;interfaceusesSystem.Drawing, System.Collections, System.ComponentModel,System.Windows.Forms, System.Data, System.Resources,System.Drawing.Printing, System.10, System.Text;typeTWinForm = class(System.Windows.Forms.Form){$REGION 'Designer Managed Code'}strict privatecomponents: System.ComponentModel.IContainer;ToolBar1: Systern.Windows .Forms .ToolBar;ImageListl: System.Windows.Forms.ImageList;ToolBarButtonl: System.Windows.Forms.ToolBarButton;ToolBarButton2: System.Windows.Forms.ToolBarButton;ToolBarButton3: System.Windows.Forms.ToolBarButton;TextBoxl: System.Windows.Forms.TextBox;OpenFileDialogl: System.Windows.Forms.OpenFileDialog;SaveFileDialogl: System.Windows.Forms.SaveFileDialog;procedure InitializeComponent;procedure ToolBarl_ButtonClick(sender: System.Object;e: System.Windows.Forms.ToolBarButtonClickEventArgs) ;{$ENDREGION}strict protectedprocedure Dispose(Disposing: Boolean); override;privatefile_name : string;// Имя текстового файла.stream_read:System.10.StreamReader;// Поток для выполнения// чтения.Компонент TooIBar•stream_write:System.10.StreamWriter;// Поток для выполнения// записи.encoder:System.Text.Encoding;// Кодировщик (необходим// для правильного отображения текста).procedure Open_File;// Процедура для открытия текстового// файла.procedure Save_File;// Процедура для сохранения текстового// файла.publicconstructor Create;end ;(assembly: RuntimeRequiredAttribute(TypeOf(TWinForm))]implementation{$AUTOBOX ON}{$REGION 'Windows Form Designer generated code'}procedure TWinForm.Dispose(Disposing: Boolean);beginif Disposing thenbeginif Components <> nil then• Components.Dispose();end;inherited Dispose(Disposing);end;constructor TWinForm.Create;begininherited Create;InitializeComponent;// Устанавливаем русскую кодировку для Windows (1251).encoder:=System.Text.Encoding.GetEncoding(1251);end ;// Процедура обработки нажатия на кнопку панели инструментов.procedure TWinForm.ToolBarl_ButtonClick(sender: System.Object;e: System.Windows.Forms.ToolBarButtonClickEventArgs)begin// Определяем номер кнопки, которая была нажата.case (ToolBarl.Buttons.IndexOf(e.Button)) of0: Open_File; // Была нажата кнопка 'Открыть файл' - вызов// процедуры открытия файла Open_File// (кнопка с индексом 1 является разделителем).2: Save_File; // Была нажата кнопка 'Сохранить в файл' - вызовГЛАВА 5 • Основные компоненты при программировании для .NET// процедуры сохранения текста в файл Save_File.end;end;// Процедура открытия текстового файла// (текст отображается в поле компонента TextBoxl).procedure TWinForm.Open_File;beginOpenFileDialogl.FileName := '';// Отображаем диалоговое окно 'Открыть...
'.OpenFileDialogl.ShowDialog;if OpenFileDialogl.FileName <> NIL thenbeginfile_name := OpenFileDialogl.FileName;// Отображаем имя открытого файла в заголовке окна.Text := file_name;trystream_read := System.10.StreamReader.Create(file_name,encoder) ;TextBoxl.Text := stream_read.ReadToEnd;// Читаем весь файл.stream_read.Close;.// Закрываем поток.TextBoxl.SelectionStart:=TextBoxl.TextLength;excepton e:exception doMessageBox.Show(e.Message);end;end;end;// Процедура сохранения текста в файл.procedure TWinForm.Save_File;begin// Если имя файла не задано, то выводим// диалоговое окно 'Сохранить... '.if file_name = NIL thenbeginSaveFileDialogl.ShowDialog;file_name := SaveFileDialogl.FileName;end;// В противном случае перезаписываем открытый файл.try// Открываем поток для перезаписи.stream_write:=System.10.StreamWriter.Create(file_name,False,encoder);stream_write.Write{TextBoxl.Text); // Записываем текст в поток.Компонент ProgressBarstream_write.Close;self.Text/ / Закрываем•поток.:= file_name;excepton e : exception doMessageBox.Show(e.Message);end ;end;end.Компонент ProgressBarЭтот компонент представляет собой индикатор, обычно используемый дляотображения протекания какого-либо процесса.
Такими процессами, например, могут быть копирование файлов, загрузка данных и т.п. Чтобы не раздражать людей, использующих ваши программы, кажущимся бездействием(хотя на самом деле выполняются какие-либо трудоемкие операции), можноиспользовать именно этот компонент. Свойства компонента представлены в ,табл. 5.20.Таблица 5.20 т Основные свойства компонента ProgressBarСвойствоКомментарийNameИмя компонента, используемое в программе для доступа к компоненту и его свойствамValueЗначение, которое отображается в поле компонента в виде прямоугольников, количествокоторых пропорционально значению свойства ValueMinimumМинимальное значение, которое может принимать свойство ValueMaximumstepМаксимальное значение, которое может принимать свойство ValueСвойство, определяющее приращение свойства v a l u e .
Используется для изменениясвойства Value методом PerformStepОбратите внимание на то, что при выходе значения свойства Value заграницы диапазона, который определяется значениями Minimum и Maximum,возникнет ошибка.В качестве примера напиНажмите кнопка для начала копированияшем программу, которая копирует несколько файлов из одного каталога в другой. ФормаВыподаигъ копирование [окна программы приведена нарисунке 5.20, текст програмРис. 5 . 2 0 • Окно программы, использующейкомпонент ProgressBarмы - в листинге 5.12.ГЛАВА 5 • Основные компоненты при программировании для .NETЛистинг 5.12т Текст программы копирования файловunit WinForml;interfaceusesSystem.Drawing, System.Collections, System.ComponentModel,System.Windows.Forms, System.Data,System.10, Borland.Vcl.SysUtils;typeTWinForml = class(System.Windows.Forms.Form){$REGION 'Designer Managed Code 1 }strict privateComponents: System.ComponentModel.Container;ProgressBarl: System.Windows.Forms.ProgressBar;Buttonl: System.Windows.Forms.Button;Labell: System.Windows.Forms.Label;procedure InitializeComponent;procedure Buttonl_Click(sender: System.Object;e: System.EventArgs);{$ENDREGION}strict protectedprocedure Dispose(Disposing: Boolean); override;privatedir_infо:DirectoryInfo; // Переменная для хранения информации// о каталоге.files_infо:array of Filelnfo; // Массив для хранения информации// о файлах.s:string;// Переменная для определения текущего// каталога.publicconstructor Create;end;[assembly: RuntimeReguiredAttribute(TypeOf(TWinForml))]imp1ement at ion{$AUT0B0X ON}{$REGI0N 'Windows Form Designer generated code'}procedure TWinForml.Dispose(Disposing: Boolean);beginif Disposing thenbeginif Components <> nil thenComponents.Dispose() ;end;Компонент ProgressBarinherited Dispose(Disposing);end; constructor TWinForml.Create;begininherited Create;InitializeComponent;s:=GetCurrentDir();try// Создаем объект Directorylnfo.dir_info:=DirectoryInfo.Create(s+'\Folder_l');excepton e:Exception dobeginMessageBox.Show(e.Message);end;end;// Формируем список файлов (считываются файлы типа JPG).files_info:=dir_info.GetFiles('*.jpg1);// Определяем максимальное значение свойства Value компонента// ProgressBar.ProgressBarl.Maximum:=Length(files_info);end;procedure TWinForml.Buttonl_Click(sender: System.Object;e: System.EventArgs);var i:integer;begin// Делаем кнопку недоступной в момент копирования во избежание// ошибок.Buttonl.Enabled:=False;//Устанавливаем значение Value в 0.ProgressBarl.Value:=0;// Копируем поочередно все файлы.for i:=0 to ProgressBarl.Maximum-1 dobeginProgressbarl.Increment(1);Label1.Text:='Выполняется копирование '+files_info[i].Name;Label1.Refresh;// Выполняем копирование в режиме перезаписи (True).files_info[i].CopyTo(s+'\Folder_2\'+files_info[i].Name,True);end;// Кнопка выполнения копирования снова доступна.Buttonl.Enabled:=True;Label1.Text:='Копирование завершено1;end;end.ГЛАВА 5 • Основные компоненты при программировании для .NETПрограмма работает следующим образом.
Во время создания окна определяется текущий каталог, из которого была запущена программа. Затем в этомкаталоге создается объект типа D i r e c t o r y l n f о, который указывает на папкуFolder_l. После этого формируется список файлов этого каталога (с помощьюметода Get F i l e s ) и в зависимости от их количества определяется значениесвойства Maximum компонента P r o g r e s s B a r l .Далее после нажатия кнопки Выполнить копирование последовательнокопируются файлы с одновременным изменением значения свойства Value(положением индикатора) компонента P r o g r e s s B a r l .Среди особенностей программы нужно отметить необходимость отключения кнопки B u t t o n l на весь период копирования во избежание возможныхошибок.Компонент MainMenuЭтот компонент представляет собой главное меню программы. После добавления его к ф о р м е программы в верхней части окна появится строка, которуюпредстоит заполнить элементами меню. В начале строки находится область дляввода текста (прямоугольник с надписью Type h e r e ) .