Если покопаться в фирменных "Дельфовых" примерах, можно найти ГОРАЗДО более удачную конструкцию (которую, кстати, я уже давно использую).
Еще раз подчеркну - это не моя придумка, а ребят из Борланда.
Эта конструкция позволяет:
Возвращать ЛЮБЫЕ значения;
ДИНАМИЧЕСКИ создавать форму;
Еще куча всяких "бонусов", просто лень описывать :-)
Итак, смотрим исходники...
В этом примере я привел два наиболее типичных случая. 1-й - InputString - просто ввод, без анализа отмены, второй - MrInputString - с анализом отмены ввода (ModalResult).
Оба случая используют начальные значения. Без них - Еще проще...
В принципе - ваша фантазия ничем не ограничивается. Я, например, храню последние вводившиеся значения в реестре и читаю их оттуда после создания формы. Удобно.
Пользователь не мается вводя по 10 раз одно и то же, а у меня не болит голова с инициализацией полей (есть специальный класс, который этим занимается, но это отдельная тема...)
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;
В статье Сергея Горбаня описана конструкция диалоговых окон Borland, позволяющая возвращать любые значения и динамически создавать форму.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.