Правильные диалоги от Борланда

Материал из DRKB

Правильные диалоги от Борланда[править | править код]

Если покопаться в фирменных "Дельфовых" примерах, можно найти ГОРАЗДО более удачную конструкцию (которую, кстати, я уже давно использую). Еще раз подчеркну - это не моя придумка, а ребят из Борланда.

Эта конструкция позволяет:

  • Возвращать ЛЮБЫЕ значения;
  • ДИНАМИЧЕСКИ создавать форму;
  • Еще куча всяких "бонусов", просто лень описывать :-)

Итак, смотрим исходники...В этом примере я привел два наиболее типичных случая. 1-й - InputString - просто ввод, без анализа отмены, второй - MrInputString - с анализом отмены ввода (ModalResult). Оба случая используют начальные значения. Без них - Еще проще... В принципе - ваша фантазия ничем не ограничивается. Я, например, храню последние вводившиеся значения в реестре и читаю их оттуда после создания формы. Удобно. Пользователь не мается вводя по 10 раз одно и то же, а у меня не болит голова с инициализацией полей (есть специальный класс, который этим занимается, но это отдельная тема...)


ИСХОДНИКИ:


//**************************************************************
// Основной модуль Обратите Внимание!  "uses Dialog;"

implementation

{$R *.dfm}
uses
  Dialog;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ShowMessage('Вы ввели '+InputString('Начальное значение'));
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
  Str: String;
begin
  Str := 'Начальное значение';
  If MrInputString(Str) = mrOk Then
    ShowMessage('Вы ввели ' + Str)
  Else
    ShowMessage('Вы отменили ввод');
end;

//********************************************************
//Модуль диалога
unit Dialog;

interface

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

type
  TOptionsDlg = class(TForm)
    Bevel1: TBevel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Edit1: TEdit;
    Label1: TLabel;
    Bevel2: TBevel;
    Label3: TLabel;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  OptionsDlg: TOptionsDlg;

function InputString(BeginVal: String): String;
function MrInputString(var Str: String): TModalResult;

implementation

{$R *.dfm}

function InputString(BeginVal: String): String;
begin
  with TOptionsDlg.Create(Application.MainForm) do
    try
      Edit1.Text := BeginVal;
      if ShowModal = mrOk then
        Result := Edit1.Text
      else
        Result := '"Отмена"';
    finally
      Free;
    end;
end;

function MrInputString(var Str: String): TModalResult;
begin
  with TOptionsDlg.Create(Application.MainForm) do
    try
      Edit1.Text := Str;
      Result := ShowModal;
      Str := Edit1.Text;
    finally
      Free;
    end;
end;

procedure TOptionsDlg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of
    27: ModalResult := mrCancel;
    13: ModalResult := mrOk;
  end;
end;

end.


Author: Сергей Горбань
Source: http://www.delphikingdom.com
ID: 01224