Программирование на Delphi и Lazarus




Содержание:
  • Кнопки. Свойства и события. Функции диалогов сообщений.
  • Объекты панели и переключатели. Приложение блокнот.


  • Кнопки. Свойства и события. Функции диалогов сообщений.

    В системе Windows, а равно и в Delphi, существует множество кнопок, характеризующихся различными свойствами и назначением. На этом уроке рассмотрим наиболее часто используемые кнопки. Первая - самая распространенная - находится на закладке Standard палитры компонентов - кнопка Button. Для установки кнопки на форму щелкните мышью на этом компоненте, а затем на форме в том месте где должна располагаться кнопка. Инспектор объектов, по умолчанию, присвоит кнопке имя "Button1". Заголовок кнопки тоже будет Button1. Измените заголовок кнопки (свойство caption) на строку: "Кнопка 1". Переключитесь на закладку свойств и найдите свойство onClick. Создайте процедуру - обработчик события клика мыши на этой кнопке.
    Известно, что выполнение любой программы сопровождается различными сообщениями, это могут быть сообщения об ошибках, предупреждения, информация и т.д. Для вывода сообщений на экран существует несколько функций. Используем в нашем событии на нажатие кнопки самое простое сообщение (функция ShowMessage) - на экране появится панель с надписью "Нажата кнопка 1":
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        ShowMessage ('Нажата кнопка 1');
    end;



    Запустите программу и удостоверьтесь, что сообщение при нажатии на кнопку 1 выдается.
    Следующей кнопкой для исследований, будет кнопка - BitButton которая располагается на закладке Additional в палитре компонентов. Эта кнопка отличается от обычной тем, что она может содержать небольшую картинку, поясняющую назначение кнопки. Установите кнопку на форму. Измените надпись (свойство Caption) на кнопке на строку: Кнопка 2. Картинку, которая будет отображаться на кнопке можно нарисовать в стандартном редакторе Paint, с размером 20х20 пикселей (можно больше иле меньше, например такую ) или подобрать подходящую картинку (значёк). Выберите свойство Glyph, рядом со словом [None] появится маленькая кнопка - нажмите ее. На появившейся панели Picture Editor следует нажать кнопку Load: В появившемся файл менеджере найдите каталог и сохранённый вами рисунок значка. Нажмите в файлменеджере ОК, а затем и в Picture Editor тоже кнопку ОК. Наша кнопка приобрела картинку. Свойство Margin изменяет расстояние от края кнопки до картинки. Свойство Font позволяет подобрать параметры шрифта для вывода надписи на кнопку.
    Изготовленную кнопку используем для вывода более сложного сообщения на экран. Сначала рассмотрим параметры, передаваемые функции:
    Function MessageDLG(Msg, DlgType, Buttons,0): ModalResult;
    • Msg - Строка которая будет отображаться в сообщении; DlgType - Тип диалога - заголовок окна сообщения. Он может быть следующих предопределенных типов: mtWarning, mtError, mtInformation и mtConfirmation.
    • Buttons - массив кнопок которые будут отображаться в окне сообщения. Они могут быть такими: mbYes, mbNo, mbOk, mbHelp, mbCancel.
      Так как MessageDlg это функция, то она возвращает значения. В нашем случае это результат нажатия кнопок на панели сообщения. Результат называется "Модальным результатом" и имеет следующие значения (число типа Integer): mrOk, mrCancel, mrYes, mrNo, mrHelp.
      Создайте событие OnClick для кнопки BitButton1. Допишите соответствующие строки как показано ниже. Обратите внимание, что в Delphi комментарии к коду программы можно записывать в фигурных скобках, как это делается в стандартном Pascal(е), а можно записывать после двух наклонных слешей, как это принято в языке С++:
      procedure TForm1.BitBtn1Click(Sender: TObject);
      var z: integer;
      begin
      z:= MessageDLG('Закрыть приложение? ', mtInformation, [mbOk,mbCancel],0);
        case z of
        mrOk: Form1.close; {Если нажата кнопка ОК то закрыть приложение}
        mrCancel: exit; //Если нажата кнопка Cancel то выходим из процедуры
        end;
      end;
      Запустите программу на исполнение. Нажмите кнопку "Кнопка 2".

    • Объекты панели и переключатели. Приложение блокнот.


      Начнём урок с создания в отдельной папке на диске нового проекта. Присвойте проекту имя, например Project2.dpr. На этом уроке мы рассмотрим такие объекты (компоненты), как панель, кнопки - переключатели и редактор текста.
      Найдите на закладке Standard, компонент Panel. Установите компонент Panel в любое место нашей формы. В инспекторе объектов найдите свойство Align и установите его в alTop (Align означает - выравнивание). Панель должна переместиться вверх окна. Удалите слово Panel1 из свойства Caption. Присвойте свойству Color значение clSilver. Переключитесь на форму и присвойте свойству формы Color значение clWhite. Запустите проект на исполнение. У вас должно получиться нечто похожее на изображение показанное на рисунке.

      Попробуйте изменять размер формы. Обратите внимание, что ширина панели изменяется вместе с изменением ширины окна.
      Панель является как элементом оформления приложений, так и контейнером для других объектов (визуальных компонентов) установленных на панель. Закройте программу. Переключитесь на закладку Additional инструментальной панели Delphi.
      Найдите компонент SpeedButton - этот компонент называется быстрая кнопка. Поставьте на панель 6 таких кнопок. Выделите крайнюю левую кнопку и в инспекторе объектов измените ее свойство Name на NewBtn. Далее, слева - направо аналогичным образом измените названия остальных кнопок (свойства Name): OpenBtn, SaveBtn, NBtn, BBtn, IBtn. Вы наверно уже догадались, что мы строим программу "Записная книжка". Назначение наших кнопок в будущем приложении будет таким: NewBtn - создать новый файл, OpenBtn - открыть текстовый файл, SaveBtn - сохранить созданный файл на диске. Кнопки NBtn, BBtn, Ibtn - будут изменять вид символов отображаемых в блокноте на нормальный, жирный или курсив соответственно.
      На 4-й кнопке используя свойство Caption напишите символ "Н", на 5 кнопке напишите символ "Ж", и на 6 кнопке напишите символ "К". Быстрые кнопки, так же имеют свойства Glyph. Используя это свойство, на первых трёх кнопках можно поставить поясняющие картинки, например такие, как показано на рисунке.


      Найдите на закладке Standard (палитры компонентов Delphi) компонент Memo. Выделите его и установите в наше окно ниже панели. В инспекторе объектов найдите свойство Align и присвойте ему значение alClient. Объект Memo занял всю свободную площадь окна. Объект Memo как раз и есть многострочный текстовый редактор. Запустите полученное приложение. Его вид должен быть таким, как показано на рисунке.



      Попробуйте изменять размер окна. Объект Memo1 изменяет свои размеры вместе с изменением размера формы, т.е. занимает всю клиентскую область окна. Попробуйте, и убедитесь, что в редакторе Memo1 можно писать текст, но сохранить мы его пока не можем, а так же не можем изменить стиль отображаемых в редакторе символов или загрузить готовый текст из файла. Это связано с тем, что мы пока не создали события (процедуры) реакции нажатия на какую либо из кнопок. В дальнейшем процедуры описывающие реакции на события (не только нажатия на кнопку) будем называть обработчиками событий или просто обработчики. Закройте приложение и начнем писать код обработки событий.
      Сначала создадим обработчик события на создание нового файла - кнопка NewBtn. Двойным щелчком мыши создадим процедуру обработчика события нажатия на эту кнопку. В редакторе кода Delphi появится следующий текст процедуры:
      procedure TForm1.NewBtnClick(Sender: TObject);
      begin
          Memo1.Clear;
      end;
      Добавьте в процедуру строку выделенную жирным шрифтом. Memo1.clear означает очистить объект Memo1 от содержащегося в нем текста, т.е. фактически мы создаем новый файл. Запустите приложение и удостоверьтесь, что кнопка создания нового файла действительно работает.
      При запуске приложения в блокноте содержится надпись "Memo1". Согласитесь, что это некрасиво. Придадим нашей программе "товарный" вид. Создадим обработчик события на создание формы при запуске приложения.
      Этим мы уже занимались на предыдущем занятии, но повторим еще раз. В инспекторе объектов выберите объект Form1. Свойству Caption присвойте значение "Записная книжка". Переключитесь на закладку событий (Events) и выберите событие onCreate. Двойным щелчком мыши создайте для него обработчик в редакторе кода. В процедуре мы можем написать Memo1.clear, но лучше вызвать уже готовую процедуру для создания нового файла.
      Код обработчика создания формы будет выглядеть так:
      procedure TForm1.FormCreate(Sender: TObject);
      begin
          NewBtnClick(Sender); //Вызываем созданную нами процедуру очистки листа
      end;
      Запустите приложение и убедитесь что при появлении нашей программы на экране, лист редактора чист.
      Продолжим создавать обработчики событий на наши кнопки. Сначала займемся изменением шрифта текста блокнота. Создайте событие на кнопку изменения шрифта на жирный шрифт (кнопка BBtn). В полученную процедуру допишите строку: Memo1.font.style := [fsBold]; Этой строкой мы изменяем текущий стиль шрифта блокнота на жирный. Текст обработчика события показан ниже:
      procedure TForm1.BBtnClick(Sender: TObject);
      begin
          Memo1.font.style := [fsBold];
      end;
      Создайте аналогичный обработчик на кнопку изменения шрифта на курсив (кнопка IBtn), записав в него строку Memo1.font.style:= [fsItalic];, а создав обработчик на кнопку нормального шрифта допишите строку Memo1.font.style := [];.
      Подробно о свойствах объекта Font, мы поговорим в разделе изучения графики, а пока, созданные нами обработчики изменения стиля шрифта должны работать. Удостоверьтесь в этом, запустив приложение, написав небольшой текст и нажимая по очереди кнопки изменения стиля шрифта.
      Наверняка, что было бы лучше, если наши кнопки изменения стиля шрифта залипали в нажатом положении, т.е. чтобы мы имели постоянную информацию о том, какой стиль шрифта, в данный момент, является текущим. Такие кнопки называются "кнопками с зависимой фиксацией".
      Сделаем это. Выберите для кнопки NBtn, в инспекторе объектов свойство GroupIndex и присвойте ему значение 1. Аналогичные действия произведите и с кнопками BBtn и IBtn. Вернитесь к кнопке NBtn и присвойте свойству Down значение True.
      Свойство Down - True означает что кнопка, по умолчанию, вдавлена. Запустите приложение. Если все сделано правильно то ваше приложение будет иметь вид показанный на рисунке. Естественно, что текст в блокноте вы можете написать любой.



      Итак, нам осталось научиться открывать готовые текстовые файлы и сохранять текст, написанный в редакторе, в файле. Для этого нам потребуются еще два компонента, это OpenDialog и SaveDialog .
      Компоненты эти находятся на закладке Dialogs палитры компонентов. Установите эти компоненты на форму в любом месте. Эти компоненты не отображаются при запуске приложения, а вызываются только из программы во время исполнения.
      OpenDialog - предназначен для доступа к файлам на дисках для открытия, а SaveDialog - наоборот для сохранения файлов на диске. Диалоги, перед использованием следует настроить, т.е. нужно задать расширение к имени файла для поиска при открытии и для автоматического дописывания к имени файла при сохранении. Выберите сначала OpenDialog, и в свойстве Filter нажмите маленькую кнопку. На экране появится окно "File Editor"



      В первой строке левого столбика "Filter Name" введите строку "Текстовые файлы, а в первой строке правого столбика "Filter" введите строку *.txt. Таким образом мы создали маску для поиска в файл- менеджере только текстовых файлов. Нажмите кнопку "ОК". Аналогичные действия нужно произвести и с компонентом SaveDialog. Так-же, нужно в свойстве DefaultExt дописать txt - расширение имени файла при сохранении, тогда файл-менеджер будет автоматически дописывать его к имени файла.
      Теперь следует создать обработчики событий. Создайте обработчик на кнопку OpenButton:
      procedure TForm1.OpenBtnClick(Sender: TObject);
      begin
         if opendialog1.execute then //Показываем диалог открытия файлов и если он выполнен (нажата кнопка "ОК"), то :
          memo1.lines.loadfromfile(opendialog1.filename); // Загружаем строки из файла в созданный нами блокнот
      end;
      И не забудьте создать обработчик на кнопку SaveBtn:
      procedure TForm1.SaveBtnClick(Sender: TObject);
      begin
          if SaveDialog1.execute then // Показываем диалог сохранения файлов и если он выполнен то :
          memo1.lines.savetofile(savedialog1.filename); //Сохраняем строки блокнота в файле
      end;
      Запустите приложение и удостоверьтесь, что теперь мы можем сохранять создаваемые нами текстовые файлы, а так же загружать с диска имеющиеся текстовые файлы. Фактически у нас получился, довольно примитивный, но все-таки блокнот.





       ©Гуков Константин Михайлович 2006 - 2011     Почта: [email protected]