Как сделать взаимодействие программы с блокнотом delphi


Как сделать взаимодействие программы с блокнотом delphi?

Главная » Прочее »

Загрузка...

Вопрос знатокам: Даны компоненты: Форма, button1, edit1, файл «test.txt»

Как сделать так, чтобы текст, который я пропишу в программе в edit1 при нажатии на кнопку button1 сохранялся в файл test.txt?

С уважением, Евгений Стигарь

Лучшие ответы

создаешь логическую переменную, связываешь с нею свой файл, потом оператором записываешь с Edit1.text «примерно» так:

var logF:text; begin assign(log,’c:\test.txt’); append(logF); // { вот это уже сам думай писать или нет, я просто забыл уже } reset(logF); // { это тоже, в начало файла перескочить} write(logF, Edit1.text);

close(logF);

вообщем «примерно» как-то так, мне надо Delphi запускать чтобы точно ответить. если надо точно, пиши на мыло.

Видео-ответ

Это видео поможет разобраться

Ответы знатоков

в USES ShellAPI

ShellExecute(Handle, ‘open’, PChar(‘путь к файлу, который открываем’), nil, nil, SW_SHOW);

Сейвдиалог не используется для сохранения файлов.

SaveDialog здесь даже и ненужен. Просто создай текстовой файл, например test.txt и закинь в папку с проектом. Но если удалишь строчку Reset(F); тогда файл создастся сам.

procedure TForm1.Button1Click(Sender: TObject); var S:String; F:TextFile; begin S:=(Label1.Caption); AssignFile(F,’test.txt’); Reset(F); Rewrite(F); Write(F,S); CloseFile(F); end;

где переменная S считывает данные из Label свойства Caption.

dom-voprosov.ru

Создаем первое приложение в Delphi. Блокнот v1

Итак, приступим к разработке приложений в Delphi. Первый урок начнем с самого простого, но на этот раз будет не форма с надписью «Hello, World!», а простейший блокнот, способный загрузить текстовый файл, отредактировать его и сохранить. Уроков будет несколько. С каждым уроком мы будет что-то добавлять, убирать и расширять функционал нашего блокнота, пока не получим в результате что-то похожее на стандартный блокнот в системе Windows.

Первое с чего мы начнем это с проектирования интерфейса.

Построить стандартный интерфейс приложения в среде Delphi очень легко, достаточно хорошо владеть мышкой :) Создание элементов интерфейса заключается в перетягивании и расстановке визуальных объектов. Для нашего первого блокнота понадобится:

  • Компонент Button (кнопка)
  • Компонент Memo (поле для ввода и редактирования текста)

Приступим!

Запускаем среду Delphi. После запуска, у нас уже будет открыта форма, готовая к творению :). Давайте сразу сохраним наш проект. При проектировании и кодинге, не забывайте чаще нажимать кнопку «Сохранить», особенно в моменты компиляции, иначе, в случае ошибки, рискуете потерять несохраненную часть проекта.

Жмем File->Save Project As…

Создадим каталог “MyNotepad v1” и в него сохраним модуль и файл проекта под следующими именами:

Модуль PAS

Файл проекта dpr

Внимание: Имена модуля и проекта должны отличаться!

Ну все. Теперь нам необходимо построить форму. Для этого на панели компонентов, во вкладке «Standart» выберите объект «Memo»

И щелкнув по свободной области формы, удерживая ЛКМ, нарисуйте текстовое поле следующим образом:

Также добавьте объекты Button.

Приблизительно вот так:

Вот и все проектирование. Конечно это примитив, но таким образом строится большинство прикладных приложений.

Давайте зададим нашей форме имя в строке заголовка окна. Назовем ее «MyNotepad v1». Для этого выделите форму, щелкнув по ней мышкой и в окне «Object Inspector», найдите свойство Caption и вместо «Form1» введите «MyNotepad v1»:

Теперь перейдем к кнопкам. Нам необходимо им так же дать смысловые метки «Открыть» и «Сохранить», а так же задать имя, более понятное, нежели Button1 и Button2. Как задать свойство Caption вы уже знаете, имя же задается в свойстве Name:

Присвоим имена для:

  • Button1 – OpenBut
  • Button2 – SaveBut.

И последний штрих, текстовое поле Memo. В поле по умолчанию отображается его имя:

Избавиться от него можно следующим образом, находим в «Object Inspector» свойство «Lines»

Жмем по «…» и все удаляем.

Далее, задайте полю Memo имя txt вместо memo1.

В итоге форма должна выглядеть приблизительно так:

Остается только прописать код нашим кнопкам. Для того чтобы это сделать необходимо щелкнуть два раза по кнопке.

Кликаем по кнопке «Открыть», после чего откроется окно редактора кода со следующим содержимым:

procedure TForm1.OpenButClick(Sender: TObject);begin

end;

Это процедура на событие Click (нажатие кнопки). Нам необходимо между ключевыми словами begin и end  прописать следующую строчку - txt.Lines.LoadFromFile(ExtractFilePath(application.ExeName)+('\test.txt'));

procedure TForm1.OpenButClick(Sender: TObject);begin   txt.Lines.LoadFromFile(ExtractFilePath(application.ExeName)+('\test.txt'));

end;

txt – наш объект текстовое поле;Lines – свойство которое содержит текстовые строки (мы его еще чистили от Memo1);LoadFromFile – процедура загрузки строк из текстового файла;ExtractFilePath(application.ExeName) – функция возвращает путь к каталогу из которого запущено наше приложение;('\test.txt') – собственно имя открываемого файла, который должен находиться с нашей программой.

Теперь пропишем код для кнопки «Сохранить».

procedure TForm1.SaveButClick(Sender: TObject);begin  txt.Lines.SaveToFile(ExtractFilePath(application.ExeName)+('\test.txt'));

end;

В этом случае отличие в процедуре SaveToFile, которая сохраняет содержимое Lines в файл test.txt

Полный листинг модуля exNotepad выглядит так:

unit exNotepad;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;

type

  TForm1 = class(TForm)    txt: TMemo;    OpenBut: TButton;    SaveBut: TButton;

    procedure OpenButClick(Sender: TObject);

    procedure SaveButClick(Sender: TObject);  private     { Private declarations }

  public

    { Public declarations }

  end;

var   Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OpenButClick(Sender: TObject);

begin     txt.Lines.LoadFromFile(ExtractFilePath(application.ExeName)+('\test.txt'));

end;

procedure TForm1.SaveButClick(Sender: TObject);

begin    txt.Lines.SaveToFile(ExtractFilePath(application.ExeName)+('\test.txt'));

end;

end.

Вот и все.

Запускаем наше приложение, нажав на кнопку Run (F9):

Сначала введем какой-либо текст и нажмем сохранить. После чего, в папке с проектом появится файл test.txt

При следующем запуске приложения жмем «Открыть».

Продолжение следует….

Прикрепленный файл: MyNotepad v1.zip

www.programm-school.ru

Глава 7 Блокнот-шифровальщик / Delphi. Учимся на примерах

  • Постановка задачи
  • Разработка формы
  • Разработка программного кода
  • Полный исходный код модуля
  • Разработать программу, повторяющую функции стандартного блокнота с дополнительной возможностью шифрования и дешифрования данных.

    Создадим новый проект Delphi. Интерфейс программы сделаем похожим на интерфейс стандартного блокнота. Разместите на форме компонент Memo (многострочное текстовое поле) категории Standard. Для того чтобы при любых размерах окна этот компонент заполнял всю форму, измените значение свойства Memo1.Align на alClient. Для текстового поля должна отображаться только вертикальная полоса прокрутки (то есть, будет выполняться автоматический перенос слов на новую строку). Для этого следует изменить значение свойства ScrollBars на ssVertical.

    Разместите на форме компонент MainMenu категории Standard и создайте меню, представленное на рис. 7.1.

    Рис. 7.1. Меню программы Блокнот-шифровальщик

    ⇖ Разработка меню рассматривается в предыдущей главе.

    Для пункта меню Формат→Перенос по словам следует установить свойство Checked равным True, поскольку этот пункт меню будет выполнять роль переключателя.

    Для вызова диалогового окна открытия файла будем использовать компонент OpenDialog категории Dialogs, а для сохранения файла — компонент SaveDialog той же категории. Для обоих компонентов измените значение свойства Filter на Блокнот|*.txt|Все файлы|*.*. Также разместите на форме еще один компонент категории Dialogs: FontDialog. Он будет служить для изменения шрифта.

    Больше ничего добавлять на форму не нужно, и результат оформления должен соответствовать рис. 7.2.

    Рис. 7.2. Форма блокнота-шифровальщика

    Шифровать текст будем с помощью функции xor или обычного смещения. Для того чтобы зашифрованные тексты нельзя было расшифровывать по шаблону, будем предлагать пользователю самому выбирать число xor, на которое надо смещать символ.

    Прежде всего объявите глобальную переменную xr_num типа string :

    var

     Form1: TForm1;

     xr_num: string;

    Теперь займемся командами меню. Обработчик события OnClick для пункта Файл→Открыть:

    procedure TForm1.N1Click(Sender: TObject);

    begin

     //начинаем обзор с текущей папки

     OpenDialog1.InitialDir:= GetCurrentDir;

     if not OpenDialog1.Execute then ShowMessage('File not selected!')

     else //загружаем выбранный файл в Memo

      Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

    end;

    Здесь мы открываем стандартное диалоговое окно обзора и просим пользователя выбрать текстовый или любой другой файл. После того как пользователь выбрал файл, загружаем его в нашу программу.

    Обработчик события OnClick для пункта Файл→Сохранить:

    procedure TForm1.N2Click(Sender: TObject);

    begin

     SaveDialog1.InitialDir:= GetCurrentDir;

     if not SaveDialog1.Execute then ShowMessage('File not saved!')

     else //сохраняем в файл

      Memo1.Lines.SaveToFile(SaveDialog1.FileName);

    end;

    Открываем диалоговое окно сохранения файла. После того как пользователь выбрал место сохранения файла, извлекаем текст из Memo и сохраняем его в выбранной папке.

    Обработчик события OnClick для пункта Файл→Выход:

    procedure TForm1.N4Click(Sender: TObject);

    begin

     Close;//закрыть программу

    end;

    Обработчик события OnClick для пункта Правка→Число XOR:

    procedure TForm1.XoR1Click(Sender: TObject);

    begin

     if not InputQuery('XOR', 'Введите число xor:', xr_num)

     then Exit;

    end;

    Здесь мы отображает окно для выбора числа xor. Указанное пользователем число будет занесено в переменную xr_num.

    Обработчик события OnClick для пункта Правка→Зашифровать/Расшифровать:

    procedure TForm1.N5Click (Sender: TObject);

    var

     xr: string; //зашифрованный текст

     i: integer; //счетчик цикла begin

     for i:=1 to Length(Memo1.Text) do

     begin //перебираем каждый символ в тексте

      //выполняем указанное пользователем смещение

      xr:= xr + Chr(Ord(Memo1.Text[i]) xor StrToInt(xr_num));

     end;

     //заменяем оригинальный текст на зашифрованный

     Memo1.Text := xr;

    end;

    По этой команде меню выполняется шифрование текста, который сейчас находится в поле Memo. В цикле перебираются все символы, и каждый из них шифруется отдельно.

    Обработчик события OnClick для пункта Правка→Очистить:

    procedure TForm1.N8Click(Sender: TObject);

    begin

     Memo1.lines.Clear; //очистка Memo

    end;

    Очищаем поле Memo от содержащегося в нем текста.

    Обработчик события OnClick для пункта Формат→Перенос по словам:

    procedure TForm1.N9Click(Sender: TObject);

    begin

     if N9.Checked then //если флажок установлен

     begin

      N9.Checked:= False; //сбрасываем флажок

      //Отображаем горизонтальную полосу прокрутки

      Memo1.ScrollBars:= ssBoth;

     end

     else begin //если флажок не установлен

      N9.Checked:= True; //устанавливаем флажок

      //убираем горизонтальную полосу прокрутки

      Memo1.ScrollBars:= ssVertical;

      end;

    end;

    По этой команде меню мы проверяем, какое состояние сейчас у пункта Формат→Перенос по словам. Если флажок установлен, то мы сбрасываем его и отображаем горизонтальную полосу прокрутки. В противном случае, устанавливаем флажок и убираем горизонтальную полосу прокрутки.

    Обработчик события OnClick для пункта Формат→Шрифт:

    procedure TForm1.N10Click(Sender: TObject);

    begin

     //Определяем все настройки шрифта и отображаем их

     //в диалоговом окне

     FontDialog1.Font.Color:= Memo1.Font.Color; //цвет шрифта

     FontDialog1.Font.Style:= Memo1.Font.Style; //стиль

     FontDialog1.Font.Size:= Memo1.Font.Size; //размер

     FontDialog1.Font.Charset:= Memo1.Font.Charset; //кодировка

     FontDialog1.Font.Name:= Memo1.Font.Name; //название шрифта

     if FontDialog1.Execute then

     begin // применяем все выбранные настройки

      Memo1.Font.Color:= FontDialog1.Font.Color;

      Memo1.Font.Style:= FontDialog1.Font.Style;

      Memo1.Font.Size:= FontDialog1.Font.Size;

      Memo1.Font.Charset:= FontDialog1.Font.Charset;

      Memo1.Font.Name:= FontDialog1.Font.Name;

     end;

    end;

    Перед тем как открыть диалоговое окно выбора шрифта, мы определяем все текущие настройки шрифта, чтобы затем отобразить их в диалоговом окне. После того как пользователь нажал в этом окне кнопку OK, все выбранные настройки шрифта применяются к полю Memo.

    Теперь осталось только реализовать автоматическую загрузку файлов, связанных с нашим блокнотом в файл-менеджерах. Для этого создадим обработчик события OnCreate главной формы:

    procedure TForm1.FormCreate(Sender: TObject);

    var

     Str: String; //путь к параметру

     i: Integer;

    begin

     xr_num:= '2'; //по умолчанию смещение = 2

     if (ParamCount > 0) then begin

      Str:= ParamStr(1); //Формируем путь к аргументу

      for i:=2 to ParamCount do Str:= Str + ' ' + ParamStr(i);

     end;

     {Если на вход программы поступили параметры, то отображаем содержимое соответствующего файла в поле Memo}

     if Str '' then Memo1.Lines.LoadFromFile(str);

    end;

    Здесь мы задаем начальное значение для смещения и проверяем, поступили ли на вход программы какие-либо параметры. Если да, то узнаем путь к файлу и отображаем его содержимое в поле Memo. Пример шифрования со смещением 10 представлен на рис. 7.3.

    Рис. 7.3. Пример шифрования со смещением 10

    Полный исходный код модуля программы Блокнот-шифровальщик представлен в листинге 7.1.

    Листинг 7.1. Модуль программы Блокнот-шифровальщик

    unit Unit1

    interface

    uses

     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls Forms, Dialogs, StdCtrls, Menus;

    type TForm1 = class(TForm)

     Memo1: TMemo;

     menu1: TMainMenu;

     File1: TMenuItem;

     Edit1: TMenuItem;

     N1: TMenuItem;

     N2: TMenuItem;

     N3: TMenuItem;

     N4: TMenuItem;

     N5: TMenuItem;

     N7: TMenuItem;

     N8: TMenuItem;

     OpenDialog1: TOpenDialog;

     SaveDialog1: TSaveDialog;

     FontDialog1: TFontDialog;

     N6: TMenuItem;

     N9: TMenuItem;

     N10: TMenuItem;

     XoR1: TMenuItem;

     procedure N1Click(Sender: TObject);

     procedure N2Click(Sender: TObject)

     procedure N4Click(Sender: TObject)

     procedure N8Click(Sender: TObject)

     procedure N5Click(Sender: TObject)

     procedure N9Click(Sender: TObject);

     procedure N10Click(Sender: TObject);

     procedure FormCreate(Sender: TObject);

     procedure XoR1Click(Sender: TObject);

    private

     { Private declarations }

    public

     { Public declarations }

    end;

    var

     Form1: TForm1;

     xr_num: string;

    implementation

    {$R *.dfm}

    procedure TForm1.N1Click(Sender: TObject);

    begin

     //начинаем обзор с текущей папки

     OpenDialog1.InitialDir:= GetCurrentDir;

     if not OpenDialog1.Execute then ShowMessage('File not selected!')

     else //загружаем выбранный файл в Memo

      Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

    end;

    procedure TForm1.N2Click(Sender: TObject);

    begin

     SaveDialog1.InitialDir:= GetCurrentDir;

     if not SaveDialog1.Execute then ShowMessage('File not saved!')

     else //сохраняем в файл

      Memo1.Lines.SaveToFile(SaveDialog1.FileName);

    end;

    procedure TForm1.N4Click(Sender: TObject);

    begin

     Close; //выход из программы

    end;

    procedure TForm1.N8Click(Sender: TObject);

    begin

     Memo1.lines.Clear; //очистка Memo

    end;

    procedure TForm1.N5Click (Sender: TObject);

    var

     xr: string; //зашифрованный текст

     i: integer; //счетчик цикла begin

     for i:=1 to Length(Memo1.Text) do

     begin //перебираем каждый символ в тексте

      //выполняем указанное пользователем смещение

      xr:= xr + Chr(Ord(Memo1.Text[i]) xor StrToInt(xr_num));

     end;

     //заменяем оригинальный текст на зашифрованный

     Memo1.Text := xr;

    end;

    procedure TForm1.N9Click(Sender: TObject);

    begin

     if N9.Checked then //если флажок установлен

     begin

      N9.Checked:= False; //сбрасываем флажок

      //Отображаем горизонтальную полосу прокрутки

      Memo1.ScrollBars:= ssBoth;

     end

     else begin //если флажок не установлен

      N9.Checked:= True; //устанавливаем флажок

      //убираем горизонтальную полосу прокрутки

      Memo1.ScrollBars:= ssVertical;

      end;

    end;

    procedure TForm1.N10Click(Sender: TObject);

    begin

     //Определяем все настройки шрифта и отображаем их

     //в диалоговом окне

     FontDialog1.Font.Color:= Memo1.Font.Color; //цвет шрифта

     FontDialog1.Font.Style:= Memo1.Font.Style; //стиль

     FontDialog1.Font.Size:= Memo1.Font.Size; //размер

     FontDialog1.Font.Charset:= Memo1.Font.Charset; //кодировка

     FontDialog1.Font.Name:= Memo1.Font.Name; //название шрифта

     if FontDialog1.Execute then

     begin // применяем все выбранные настройки

      Memo1.Font.Color:= FontDialog1.Font.Color;

      Memo1.Font.Style:= FontDialog1.Font.Style;

      Memo1.Font.Size:= FontDialog1.Font.Size;

      Memo1.Font.Charset:= FontDialog1.Font.Charset;

      Memo1.Font.Name:= FontDialog1.Font.Name;

     end;

    end;

    procedure TForm1.FormCreate(Sender: TObject);

    var

     Str: String; //путь к параметру

     i: Integer;

    begin

     xr_num := '2'; //по умолчанию смещение = 2

     if (ParamCount > 0) then begin

      Str:= ParamStr(1); //Формируем путь к аргументу

      for i:=2 to ParamCount do Str:= Str + ' ' + ParamStr(i);

     end;

     {Если на вход программы поступили параметры, то отображаем содержимое соответствующего файла в поле Memo}

     if Str '' then Memo1.Lines.LoadFromFile(str);

    end;

    end.

    ⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter_07.

    www.uhlib.ru

    Delphi — это просто. Создаем полезные программы

    Виктор Карпинский, Владимир Молочков (В. Новгород)

    В прошлом номере журнала вы ознакомились с основами основ языка программирования, теперь же начнем осваивать его на практике. Для первого знакомства рассмотрим несколько примеров написания простых программ на Delphi, скорее забавных, чем полезных. Надеемся, что у читателя по мере работы над этими программами возникнут свои оригинальные идеи относительно того, как показанные здесь возможности Delphi и приемы визуального программирования применить для своих, более интересных программ.

    Шуточная программа «Чувствительная кнопка»

    Что значит «чувствительная»? Кнопка будет как-то реагировать на все, что мы с ней будем делать. Ну, например, если нажать на нее курсором мыши, то она будет возмущаться: «Ой! Меня нажали». А если потом отпустить, то удовлетворенно сообщит: «Уф, меня отпустили».

    На этом простеньком примере мы посмотрим, как в Delphi выполняется визуальное программирование, как компоненты помещаются на форму и как можно менять их свойства. Потом мы увидим в действии некоторые обработчики событий, которые сами без труда напишем.

    Сначала создадим и сохраним новый проект. Для этого сделайте следующее:

    1. Запустите Delphi (как ее установить на своем компьютере, мы рассказали в предыдущей статье). Запустить ее можно так, как показано на рисунке.

    2. После загрузки появится интерфейс Delphi (он описан в предыдущей статье). При этом стартовая форма Form1 и ее программный модуль Unit1 будут созданы автоматически. Для того чтобы сохранить ваш первый проект, воспользуйтесь меню Файл (File) > Сохранить проект как… (Save Project as…).

    3. Открывается окно сохранения программного модуля Unit1. С помощью кнопки «Создание новой папки» создайте папку «Пример 1».

    4. Откройте созданную папку и два раза нажмите кнопку «Сохранить». Первое нажатие кнопки сохранит файл Unit1.pas, содержащий текст программы, а второе — файл Project1.dpr, содержащий общие сведения о проекте. На самом деле сохраняется больше, чем два файла: файл Unit1.dfm содержит сведения о связанной с программным модулем Unit1 форме Form1. Файл Project1.cfg содержит параметры конфигурации проекта, а файл Project1.dof — используемые настройки системы программирования Delphi. Впрочем, начинающему программисту это знать не обязательно.

    Если вам показалось, что сохранять написанную в Delphi программу сложно, можем вас успокоить: так, как описано выше, надо сохранять только один раз, при начале работы над новым проектом. Все дальнейшие изменения сохраняются очень просто — одним нажатием кнопки «Сохранить» (Save) главного окна Delphi.

    Теперь мы готовы начать визуальное программирование. У нас уже есть один объект — сама форма Form1. Поменяем некоторые ее свойства с помощью инспектора объектов.

    5. В инспекторе объектов (Object Inspector) найдите свойство Caption (заголовок). Щелкните против него в графе значений свойств мышью, сотрите имевшееся там слово «Form1» и впишите вместо него «Чувствительная кнопка».

    Заголовок формы сразу изменится.

    6. Аналогичным способом изменим размеры формы. В инспекторе объектов найдите свойство Height (высота) и замените его значение на 200, а потом значение свойства Width (ширина) — на 300. Опять-таки вы сразу увидите изменение параметров формы. Это визуальное программирование в действии.

    7. Значения некоторых свойств не вводятся вручную, а выбираются из имеющегося списка. Найдите свойство Position (положение формы на экране). Когда вы щелкнете по его значению мышью, там появится кнопка выбора вариантов. Выберите poScreenCenter. Тогда ваша форма будет всегда появляться в центре экрана.

    На этот раз никаких видимых изменений в положении формы не произошло. Свойство Position влияет на форму при работе программы, а не в режиме редактирования. Проверки ради вы можете нажать в главном окне Delphi кнопку «Выполнить» (Run). На этой кнопке нарисована зеленая стрелка. После ее нажатия окна просмотра списка объектов Object TreeView и инспектора объектов исчезнут, а окно созданной вами программы появится в центре экрана.

    Для возвращения в режим редактирования надо закрыть программу «Чувствительная кнопка» обычным для приложений Windows способом — нажав в ее правом верхнем углу на кнопочку с крестиком. Написанная программа пока еще ничего не делает, но уже является настоящим полноценным приложением Windows. У нее появляется даже своя кнопка на панели запуска программ внизу экрана, ее можно свернуть или развернуть во весь экран.

    Постарайтесь сразу завести себе привычку: прежде чем запустить программу кнопкой Run, обязательно сохраните внесенные в нее изменения, нажав кнопку Save.

    Однако продолжим редактирование формы. Название нашей программы обещает чувствительную кнопку, а кнопки на форме пока нет. Вставим ее туда.

    8. Для этого наверху в главном окне Delphi в палитре компонентов стандартной (Standard) выберите компонент «Кнопка» (Button). Вставьте его на форму, просто щелкнув по ней мышкой.

    Теперь у нас есть два объекта: форма Form1 и кнопка Button1. Их можно выбирать для редактирования либо щелчком мыши (выделенный объект, кроме самой формы, обозначается маленькими черными квадратиками по краям). А можно выбирать их и в инспекторе объектов.

    9. Так же, как вы это делали с формой (см. пункты 5 и 6), измените заголовок (Caption) и размеры (Width и Height) кнопки. Заголовок сделайте «Здравствуйте, я — кнопка», ширину 200, высоту 40. Сохраните и запустите программу. Теперь она выглядит так:

    Убедитесь, что кнопка нажимается (хотя пока еще при этом ничего не происходит, ведь мы пока еще не написали в тексте программы ни одного программного кода). Текст в окне редактора кода уже довольно велик, но весь он написан автоматически. Вот этот текст:

    Листинг 1. Автоматически созданный программный код

    unit Unit1;

    interface

    uses

     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

     Dialogs, StdCtrls;

    type

     TForm1 = class(TForm)

       Button1: TButton;

      private

        { Private declarations }

      public

        { Public declarations }

      end;

    var

      Form1: TForm1;

    implementation

    {$R *.dfm}

    end.

    В разделе uses указаны те библиотеки, которые нужны для компиляции программы. Например, библиотека StdCtrls добавилась в момент внедрения на форму кнопки, потому что именно в этой библиотеке содержатся необходимые для работы кнопки части программного кода. Раздел кода программы type описывает форму (ее класс как программного объекта TForm1) и перечисляет все объекты, размещенные на ней. Например, в момент внедрения на форму кнопки сюда добавилась строка Button1: TButton. Далее в разделе var перечисляются все глобальные для данного модуля переменные. Пока такая переменная только одна — сама форма Form1. После слова implementation будут появляться процедуры обработки событий, но об этом — чуть ниже.

    Итак, кнопка у нас есть. Однако название программы обещает, что кнопка будет чувствительная. Как это сделать?

    У объектов программы помимо обычных свойств (например, размеров) есть и свойства, связанные с реакцией этих объектов на какие-то события. Эти свойства называются методами, или обработчиками событий, и помещаются в окне инспектора объектов на вкладке Events.

    10. Убедитесь, что на форме в режиме редактирования выбран компонент Button1. На вкладке Events окна инспектора объектов (прокрутив вписок вниз) выберите свойство OnMouseDown. Это означает «При нажатии мышью». Щелкните возле названия этого свойства мышью, чтобы место для его значения выделилось белым цветом, а потом по этому белому пустому месту сделайте двойной щелчок мышью.

    В результате появится следующий текст в окне редактирования кода:

    Листинг 2. Автоматически созданный шаблон процедуры Button1MouseDown

    procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;

         Shift: TShiftState; X, Y: Integer);

    begin

    end;

    Такой фрагмент текста называется описанием процедуры. После ключевого слова procedure находится название (имя) процедуры. В данном случае его можно расшифровать так: на форме Form1 для объекта Button1 при возникновении события Mouse Down. Далее в круглых скобках помещены описания формальных параметров процедуры. О таких параметрах речь пойдет при изучении более сложных и интересных примеров программирования. Следующее ключевое слово begin (начало) открывает тело процедуры. Все команды, написанные между begin и end, будут выполнены при наступлении указанного события (в данном случае при нажатии мышью). Описание процедуры, у которого между begin и end ничего нет, называется заглушкой процедуры. Ту часть кода, которую программист вписал вручную, можно вручную стереть или изменить. Однако автоматически появившуюся часть кода удалять или изменять не следует. Если появилась ненужная заглушка процедуры (например, случайно сделали двойной щелчок мышью по объекту), то ее не надо удалять самому. Пустые, не измененные программистом заглушки автоматически исчезают при сохранении программы.

    Щелкните мышью по тексту так, чтобы между словами begin и end появился текстовый курсор (мигающая вертикальная черточка). Принято все, что мы добавляем между begin и end писать с некоторым отступом, то есть не прямо от левого края, а немного правее. Впишите туда команду, означающую, что значение свойства Caption объекта Button1 надо заменить на «Ой! Меня нажали». Вот как это должно выглядеть:

    Листинг 3. Работающий текст процедуры Button1MouseDown для программы «Чувствительная кнопка»

    procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;

         Shift: TShiftState; X, Y: Integer);

    begin

         Button1.Caption := «Ой! Меня нажали»;

    end;

    Обратите внимание на две особенности языка Паскаль. Во-первых, название свойства и объекта пишутся в обратном порядке: мы говорим «свойство Caption объекта Button1», а пишем «Button1.Caption». Перед точкой стоит имя объекта, а после точки имя свойства. Во-вторых, вместо кавычек в языке Паскаль для текстов используются апострофы. Это то же, что кавычки, но одинарные (‘). Апострофы, как и кавычки, используются парами: один перед текстом, а второй после него. Внутри пары апострофов можно писать что угодно, в том числе и русскими буквами.

    12. Сохраните и запустите программу. Убедитесь, что на нажатие кнопка уже реагирует, а на отпускание пока нет.

    Домашнее задание

    Хоть мы и не в школе, однако, как говорили древние, «практика — учительница жизни».

    • Найдите в окне инспектора объектов обработчик события «Мышь отпущена» (OnMouseUp) и заставьте Delphi создать шаблон соответствующей процедуры.
    • Аналогично выполненному выше пункту 11 напишите между begin и end команду, меняющую заголовок кнопки на текст «Уф, меня отпустили».
    • Сохраните, запустите программу и убедитесь, что кнопка «чувствует» не только нажатия мышью, но и отпускание.

    Программа «Вычисления по формуле»

    Коль скоро компьютер изначально создавался как вычислительная машина, наиболее стандартное для него действие — что-то вычислять. Довольно часто надо много раз вычислять значение по какой-то формуле, только с разными исходными данными. Простой калькулятор в этом случае неудобен, потому что для каждого вычисления надо не только вводить новые исходные данные, но и повторять все операции над ними.

    Напишем несложную программу, автоматизирующую такие вычисления, например, для вычисления объема конуса. Из геометрии известно, что, если конус имеет высоту h и радиус основания R, то его объем вычисляется по формуле:

    Значит, наша программа должна дать пользователю возможность ввести два числа (высоту и радиус основания), а после нажатия кнопки — сообщить объем конуса. Выполним разработку этой программы в следующем порядке:

    1. Если вы продолжаете работу с Delphi, то закройте старый проект (меню Файл (File) > Закрыть все (Close all)), а потом создайте новый (меню Файл (File) > Создать новый (New) > Приложение (Applicatoin)). Сохраните новый проект в папке «Пример 2» (как это сделать — описано в начале примера 1).

    2. Внедрите на форму следующие компоненты. Три объекта типа надпись (Label), два поля ввода (Edit) и кнопку (Button). Они все имеются в палитре стандартной (Standard) главного окна Delphi. Указанные шесть компонентов разместите на форме примерно так, как показано на рисунке.

    Первые две надписи нужны для пояснения о том, что должны быть введены именно высота конуса и радиус его основания. В третьей надписи будет сообщаться результат. В поля ввода будут введены два исходных числа. Все действия по вычислению объема конуса выполнятся при нажатии кнопки.

    3. Измените размеры и заголовки формы и других объектов, а также свойство Text объектов Edit1 и Edit2 так, чтобы получился следующий интерфейс

    4. Для кнопки Button1 создайте обработчик события OnClick (если по ней щелкнули мышью). Напишите перед begin и между begin и end несколько строк так, чтобы в результате получилось следующее:

    Листинг 4. Работающий текст процедуры Button1Click для вычисления по формуле

    procedure TForm1.Button1Click(Sender: TObject);

    var   h,R,V : real;

    begin

    h := StrToFloat ( Edit1.Text );

    R := StrToFloat ( Edit2.Text );

    V := h * pi * R*R / 3;

    Label3.Caption := «Объем конуса V=» + FloatToStr ( V );

    end;

    Что мы написали? Во-первых, мы указали, что процедура будет работать с числовыми величинами, обозначенными h, R и V. Далее мы написали, что значение переменной h берется из свойства Text объекта Edit1 (помните, что обозначение Edit1.Text читается справа налево?). Аналогично мы взяли значение для переменной R из объекта Edit2.

    После этого стоит команда вычисления значения переменной V. Как вы видите, это та самая формула объема конуса, которую мы знаем из геометрии, только написанная в одну строку. В ней написано: h умножить на пи, потом умножить на квадрат R, а потом поделить на 3. Умножение обозначается звездочкой (обратите внимание: в программировании, в отличие от обычной математики, нельзя не ставить знак умножения).

    Последняя написанная строка изменяет заголовок (Caption) объекта Label3 (третьей надписи). В этот заголовок помещается пояснительный текст «Объем конуса V=», к которому сзади добавлено значение переменной V.

    В программе используется функция StrToFloat, превращающая строку текста (написанное цифрами число) в вещественное число (то есть в число, у которого может быть дробная часть). Это нужно потому, что свойство Text объектов Edit, равно как и свойство Caption любых объектов — строковое (String). А для вычисления нужны числовые значения (слова real в разделе var и Float в названии функции StrToFloat означают вещественное число). Таким образом, название функции StrToFloat означает: преобразовать значение из текстового формата (String) в числовой (Float) формат. Обратное действие — функция FloatToStr. Для целочисленных величин, описанных в разделе var как integer, есть функции StrToInt и IntToStr.

    5. Сохраните и запустите программу. Убедитесь, что после нажатия кнопки (при h=15,25 и R=8,4) получается объем конуса V=1126,82645298959. Вводите (только правильно, не используя букв и прочих невозможных в записи числа символов) новые значения h и R и, нажимая кнопку, получайте новый ответ.

    Домашнее задание

    • Напишите в Delphi программу, вычисляющую объем параллелепипеда со сторонами A, B и C (его объем есть произведение этих трех чисел).
    • Напишите в Delphi программу, вычисляющую заработную плату и подоходный налог работника, отработавшего N часов при почасовой ставке S. Его заработная плата Z=N*S, а подоходный налог (13%) составляет P=13/100*Z.

    Неизменяемый «Read Me»

    Компьютер может не только вычислять, но и работать с текстами. Самый простой пример программы, работающей с текстами, — это программа ReadMe, что значит «Прочти меня». Обычно такой файл есть на диске, с которого устанавливается на компьютер какая-нибудь новая игра или полезная программа. В файле ReadMe содержатся все необходимые пояснения, например, как именно установить программу.

    Часто сам ReadMe представляет собой обычный текстовый файл, который открывается с помощью какого-нибудь текстового редактора, например, «Блокнота» Windows. Но это не всегда удобно: текстовый редактор позволяет не только читать текст, но и редактировать, то есть изменять его. И может получиться, что кто-то нечаянно или по злому умыслу изменит содержащиеся в ReadMe сведения. Поэтому может оказаться удобной программа вроде той, которую мы сейчас напишем.

    Ну, а использовать ее вы сможете и в качестве прикола. Например, можно написать кому-нибудь в таком виде электронное письмо или оставить на рабочем столе файл с названием «Прочитать в случае аварии», а внутри содержащий текст: «Зачем же ты читаешь этот файл? Ведь аварии никакой нет! Что за невоспитанность?». Интересная особенность таких текстов в том, что только тот, кто написал программу, может изменить появляющийся текст, а тот, кто читает, — не может.

    Итак, напишем программу ReadMe, выполняя по порядку следующие шаги:

    1. Создайте новый проект Delphi (меню Файл (File)4Создать новый (New)4Приложение (Applicatoin)). Сохраните его в папке «Пример 3».

    2. Разместите на форме компонент Memo.

    3.  Измените заголовок формы и ее размеры примерно так, как показано на рисунке (не забудьте свойству Position придать значение poScreenCenter).

    4. Теперь мы сделаем так, чтобы объект Memo1 всегда охватывал собою всю форму. Для этого в инспекторе объектов измените его свойство Align (что значит «выравнивание») на alClient. Результат будет такой, как показано на следующем рисунке.

    5. Теперь в инспекторе объектов (по-прежнему для компонента Memo1) найдите свойство Lines (что значит «строки»). Оно имеет тип TStrings. Когда вы его выделите, справа от слова TStrings появится кнопочка с троеточием.

    6. Нажмите эту кнопочку, и откроется встроенный текстовый редактор. Сотрите имеющийся в нем текст «Memo1» и напишите все, что сочтете нужным. Вас не должно смущать, что текст, который вы пишете, образует длинную строчку, длиннее, чем само окно текстового редактора. Не надо искусственно делить его на более короткие строки — компьютер сделает это за вас. Клавишу Enter следует нажимать только в конце абзаца. По окончании ввода текста нажмите кнопку ОК.

    Текст показывается с автоматическим переносом слов на новую строку благодаря тому, что установлено свойство Word Wrap (перенос по словам). Если значение этого свойства true (истина), то текст будет автоматически переноситься, если false (ложь) — не будет.

    7. Сохраните проект и запустите программу. Убедитесь, что введенный вами текст появляется. Правда, его можно изменять, но если программу закрыть, а потом запустить снова, то изменения исчезают и восстанавливается первоначальный текст. Впрочем, если вы хотите, чтобы ваш ReadMe вообще нельзя было изменить, даже временно, это тоже можно сделать. Остановите программу (то есть вернитесь в режим редактирования проекта, когда видно окно инспектора объектов). Измените у объекта Memo1 свойство Read Only (только читать) на true (истина). Для этого выделите это свойство в инспекторе объектов, нажмите появившуюся справа кнопочку со стрелкой и выберите из открывшегося списка слово true. Снова сохраните и запустите программу. Убедитесь, что теперь текст редактировать не получается.

    Напомним, что результатом работы программы является файл Project1.exe, который находится в папке «Пример 3». Скопируйте или перенесите этот файл туда, куда вам нужно (на рабочий стол, на дискету и т. п.). Файл можно переименовать в ReadMe.exe или еще как-нибудь, на ваш вкус. Для этого надо найти файл в «Проводнике» Windows или с помощью какого-то другого средства работы с файлами, щелкнуть по его ярлыку правой клавишей мыши и в появившемся контекстном меню выбрать пункт «Переименовать».

    Домашнее задание

    • Напишите указанным выше способом программу, допустим,  с поздравлением кому-то из ваших друзей или родных с днем рождения (или с 23 февраля, или с 8 марта). В следующих статьях цикла мы покажем, как использовать в таких поздравлениях рисунки, звуки и видео.

    До скорой встречи!

    bigital.ru


    Смотрите также