InputQuery — Функция Delphi


InputQuery — Функция Delphi

Данная функция демонстрирует 3 очень мощных и полезных процедуры, интегрированных в Delphi.

Диалоговые окна InputBox и InputQuery позволяют пользователю вводить данные.

Функция InputBox используется в том случае, когда не имеет значения что пользователь выбирает для закрытия диалогового окна — кнопку OK или кнопку Cancel (или нажатие клавиши Esc). Если вам необходимо знать какую кнопку нажал пользователь (OK или Cancel (или нажал клавишу Esc)), используйте функцию InputQuery.

ShowMessage — другой простой путь отображения сообщения для пользователя.

InputQuery — Функция Delphi

Есть стандартная функция:
function InputQuery(const ACaption, APrompt: string;
var Value: string): Boolean;
в её код мне надо добавить единственную строчку:
PasswordChar:=»*»;

Как мне добавить эту строчку в функцию, не переписывая её полностью? Может существует метод унаследования функций с добавлением новых возможностей без переписывания полностью всей функции?

Вот сама функция:

function InputQuery(const ACaption, APrompt: string;
var Value: string): Boolean;
var
Form: TForm;
Prompt: TLabel;
Edit: TEdit;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
Result := False;
Form := TForm.Create(Application);
with Form do
try
Canvas.Font := Font;
DialogUnits := GetAveCharSize(Canvas);
BorderStyle := bsDialog;
Caption := ACaption;
ClientW > Position := poScreenCenter;
Prompt := TLabel.Create(Form);
with Prompt do
begin
Parent := Form;
Caption := APrompt;
Left := MulDiv(8, DialogUnits.X, 4);
Top := MulDiv(8, DialogUnits.Y, 8);
Constraints.MaxW > WordWrap := True;
end;
Edit := TEdit.Create(Form);
with Edit do
begin
Parent := Form;
Left := Prompt.Left;
Top := Prompt.Top + Prompt.Height + 5;
W > PasswordChar:=»*»; //Я внёс эту строчку
MaxLength := 255;
Text := Value;
SelectAll;
end;
ButtonTop := Edit.Top + Edit.Height + 15;
ButtonW > ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
with TButton.Create(Form) do
begin
Parent := Form;
Caption := «OK»;
ModalResult := mrOk;
Default := True;
SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
ButtonHeight);
end;
with TButton.Create(Form) do
begin
Parent := Form;
Caption := «Cancel»;
ModalResult := mrCancel;
Cancel := True;
SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,
ButtonWidth, ButtonHeight);
Form.ClientHeight := Top + Height + 13;
end;
if ShowModal = mrOk then
begin
Value := Edit.Text;
Result := True;
end;
finally
Form.Free;
end;
end;
/CODE>

> Может существует метод унаследования функций с добавлением
> новых возможностей без

Нет.

А что мешает сделать свою функцию, скажем InputPasswordQuery с приведенным тобой телом?

Так и сделал :)
Создал новый юнит, туда поместил эти две функции, добавил нужную строчку, подключил к своей программе — и всё заробатало!

> [3] Volf_555 (22.02.06 21:22)
> Так и сделал :)
> Создал новый юнит, туда поместил эти две функции,

А зачем две? :)


> Джо © (22.02.06 21:33) [4]
>
> > [3] Volf_555 (22.02.06 21:22)
> > Так и сделал :)
> > Создал новый юнит, туда поместил эти две функции,
>
> А зачем две? :)

На всякий пожарный. © Бриллиатовая рука. :)))


> Джо © (22.02.06 21:33) [4]
> > [3] Volf_555 (22.02.06 21:22)
> > Так и сделал :)
> > Создал новый юнит, туда поместил эти две функции,
>
> А зачем две? :)

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

Илон Маск рекомендует:  Программная выписка счета в системе webmoney

Можно добавить блок условной компиляции, в котором и задавать PasswordChar. Но все-таки, лучше не править VCL и написать свой вариант где-нибудь в отдельном месте.

А что за блок условной компиляции? Расскажи подробней

Диалоговые окна в Дельфи (процедуры и функции, реализующие диалоговые окна)

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

Процедура ShowMessage, функции MessageDlg и MessageDlgPos отображают окно (панель) вывода сообщений, а функции InputBox и InputQuery — окно (панель) для ввода информации.

Процедура ShowMessage

Процедура ShowMessage (const Msg: String) отображает окно сообщения с кнопко ОК. Заголовок содержит название исполняемого файла приложения, а строка Msg выводится как текст сообщения.

Функция MessageDlg

Функция MessageDlg(const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; Helpctx: Longint) : word отображает окно сообщения в центре экрана и позволяет получить ответ пользователя. Параметр Msg содержит отображаемое сообщение.

Окно сообщения может относиться к различным типам и наряду с сообщением содержать картинки. Тип окна сообщения определяется параметром АТуре, который может принимать следующие значения:

  • mtWarning (окно содержит черный восклицательный знак в желтом треугольнике и заголовок Warning);
  • mtError (окно содержит белый косой крест в красном круге и заголовок Error);
  • mtInformation (окно содержит синюю букву «i» в белом круге и заголовок Information);
  • mtConfirmation (окно содержит синий знак «?» в белом круге и заголовок Confirmation);
  • mtCustom (окно не содержит картинки, в заголовке выводится название исполняемого файла приложения).

Параметр AButtons задает набор кнопок окна и может принимать любые комбинации следующих значений:

  • mbYes (кнопка Yes);
  • mbAbort (кнопка Abort);
  • mbNo (кнопка No);
  • mbRetry (кнопка Retry);
  • mbOk (кнопка OK);
  • mbIgnore (кнопка Ignore);
  • mbCancel (кнопка Cancel);
  • mbAll (кнопка All);
  • mbHelp (кнопка Help);

Для значения параметра AButtons имеются две константы — mbYesNoCancel и mbOKCancel, задающие предопределенные наборы кнопок:

  • mbYesNoCancel = [mbYes, mbNo, mbCancel];
  • mbOKCancel = [mbOK, mbCancel]

При нажатии любой из указанных кнопок (кроме кнопки Help) диалоговое окно закрывается, а результат (свойство ModalResult) возвращается функцией MessageDlg.

Параметр HelpCtx определяет контекст (тему) справки, которая появляется во время отображения диалогового окна при нажатии пользователем клавиши . Обычно! значение этого параметра равно нулю.

Пример использования функции MessageDlg:

При нажатии кнопки Button1 производится простейшая проверка даты. Код даты вводится в поле редактирования DateEdit1, размещенное в форме. Если длина даты меньше допустимой, выдается предупреждение с запросом на автоматическую коррекцию (см. скриншот). При утвердительном ответе пользователя в поле даты записывается текущая дата, при отрицательном — фокус передается полю ввода даты.

Функция MessageDlgPos

Функция MessageDlgPos(const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer) : Word отличается от функции MessageDlg наличием параметров Х и Y, управляющих положением окна на экране.

Функция InputBox


Функция InputBox(const ACaption, APrompt, ADefault: String): String отображает диалоговое окно для ввода строки текста. Окно выводится в центре экрана и содержит поле ввода с надписью, а также кнопки ОК и Cancel.

Параметр ACaption задает заголовок окна, а параметр APrompt содержит поясняющий текст к полю ввода. Параметр ADefault определяет строку, возвращаемую функцией при отказе пользователя от ввода информации (нажатие кнопки Cancel или клавиши ).

Пример использования функции InputBox:

Приведенная процедура отображает окно запроса на ввод фамилии пользователя (см. скриншот).

По умолчанию предлагается Иванов.

Функция InputQuery

Функция InputQuery (const ACaption, APrompt: String; var Value: String): Boolean отличается от функции InputBox тем, что вместо третьего параметра— строки по умолчанию— используется параметр Value, который в случае подтверждения ввода содержит введенную пользователем строку.

Илон Маск рекомендует:  Direct draw термины и концепции интерфейсы directdraw и directdraw2

В качестве результата функция возвращает логическое значение, позволяющее определить, каким образом завершен диалог. Если нажата кнопка ОК, то функция возвращает значение True, если нажата кнопка Cancel или клавиша — значение False.

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

Кроме рассмотренных диалоговых окон, в Delphi имеется ряд других специализированных диалоговых окон, например диалоговое окно выбора каталога, вызываемое функцией Select Directory модуля FileCtrl.

Использование InputBox и InputQuery

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Использование InputBox и InputQuery

Решил Вовочка сексуальный ник себе завести. Думал-думал, как поприличнее выразиться. и придумал: put_in

Данная функция демонстрирует 3 очень мощных и полезных процедуры, интегрированных в Delphi.

Диалоговые окна InputBox и InputQuery позволяют пользователю вводить данные.

Функция InputBox используется в том случае, когда не имеет значения что пользователь выбирает для закрытия диалогового окна — кнопку OK или кнопку Cancel (или нажатие клавиши Esc). Если вам необходимо знать какую кнопку нажал пользователь (OK или Cancel (или нажал клавишу Esc)), используйте функцию InputQuery.

ShowMessage — другой простой путь отображения сообщения для пользователя.

Статья Использование InputBox и InputQuery раздела Программа и Интерфейс Диалоги и Фреймы может быть полезна для разработчиков на Delphi и FreePascal.

Комментарии и вопросы

Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.

Работа с InputQuery

Можно ли, используя функцию InputQuery, сделать защиту, чтобы вводить только числовые значение?

Description Displays an input dialog box that lets the user enter a string, ******, or integer. Call InputQuery to bring up an input dialog box ready for the user to enter a string, ******, or integer in its edit box. ACaption is the caption of the dialog box. APrompt is the text that prompts the user to enter input in the edit box. Value is the value that appears in the edit box when the dialog box first appears and which returns the value that the user enters. InputQuery returns true if the user chooses OK, and false if the user chooses Cancel or presses the Esc key. If a default value should be used when the user cancels out of the dialog, use InputBox instead.

Delphi XE2: InputQuery ширина дисплея коробка слишком большой

При попытке использования многострочного APrompt: т.е.

Функция InputQuery принимает строку как массив строки, он вычисляет MaxWidth для формы в соответствии с самой длинной строки в массиве.

В приведенном выше примере форма InputQuery рассчитывается по длине строки, которая составляет около 50 символов. Хотя самая длинная строка представляет собой часть этого.

Результат является очень широким InputQuery окна отображается с большим количеством пустого пространства. Не выглядит очень профессионально.

Когда я пытаюсь создать массив строки для хранения каждой строки:

Я не могу скомпилировать из-за перегрузки Нет функции не существует, чтобы принять эти параметры функции InputQuery. Я посмотрел на функции перегрузки InputQuery в блоке Vcl.Dialogs, но не могу заставить его работать.

Кто-нибудь знает правильный синтаксис для использования функции InputQuery с многострочным подскажете?

Я использую Embarcadero RAD Studio XE2 — Delphi

Delphi XE2: InputQuery display box w > Ask Question

When trying to using a multi-line APrompt: i.e.

Илон Маск рекомендует:  Событие onkeydown в HTML

The InputQuery function takes the string as an array of string, it calculates the MaxWidth for the Form according to the longest string in the array.

In the above example the InputQuery form is calculated by the length of the string, which is about 50 characters. Though the longest line is a fraction of that.

The result is a very wide InputQuery box being displayed with lots of empty space. Does not look very professional.

When I try to create an array of string to hold each line:

I can not compile due to No Overload function exists to take these parameters of the InputQuery function. I have looked at the Overload InputQuery functions in the Vcl.Dialogs Unit but can not get it to work.

Does anyone know the correct syntax to use the InputQuery Function with a multi-line prompt?

I am using Embarcadero RAD Studio XE2 — Delphi


Thanks in advance for any ‘helpful’ response.

Cancel в InputQuery

Вопрос

Rusland 416

Rusland 416

  • Продвинутый пользователь
  • Пользователи
  • 416
  • 1 204 сообщения

Если нажимаю Отмена в InputQuery,

то получаю Segmentation Fault в FMX.Dialogs.Android (которого в Seattle не существовало)

Где у меня ошибка?

PS. Delphi 10.1 Berlin

PPS. в справке сказано Warning: InputQuery is deprecated. Please use Platform.IFMXDialogServiceAsync.MessageDialogAsync. InputQuery вышел из моды? )

Изменено 26 апреля, 2020 пользователем Rusland

Поделиться сообщением

Ссылка на сообщение
Поделиться на другие сайты

5 ответов на этот вопрос

Рекомендуемые сообщения

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Похожий контент

Мультиплатформенное приложение. Delphi Tokyo.
указываю 2 параметра для VAL и передаю это в TDialogService.InputQuery

procedure TfmMain.Send( ], Val, InputDialogHandlerGetShotName); end;
В итоге, в недрах TDialogService.InputQuery получаю исключение:

На андроиде ошибки нет.

Мне нужно вводить числа.
В Edit можно указать тип клавиатуры KeyboardType = PhonePad.

Как сделать появляющуюся при InputQuery клавиатуру типа PhonePad?
procedure TForm1.Label1Tap(Sender: TObject; const [Ref] Point: TPointF); begin InputQuery(‘Введите число’, [»], [»], procedure(const AResult: TModalResult; const AValues: array of string) begin if (AResult=mrOk) and (AValues[0].Trim<>») then Label1.Text:=AValues[0].Trim; end ); end;

Последние посетители 0 пользователей онлайн

Ни одного зарегистрированного пользователя не просматривает данную страницу

Delphi XE2: Ширина экрана дисплея InputQuery превышает размер

При попытке использования многострочного APrompt: ie

Функция InputQuery берет строку как массив строки, она вычисляет MaxWidth для формы в соответствии с самой длинной строкой в массиве.

В приведенном выше примере форма InputQuery вычисляется по длине строки, которая составляет около 50 символов. Хотя самая длинная линия — это часть этого.

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

Когда я пытаюсь создать массив строк для каждой строки:

Я не могу скомпилировать из-за отсутствия функции перегрузки для выполнения этих параметров функции InputQuery. Я просмотрел функции Overload InputQuery в модуле Vcl.Dialogs, но не могу заставить его работать.

Кто-нибудь знает правильный синтаксис для использования функции InputQuery с многострочным приглашением?

Я использую Embarcadero RAD Studio XE2 — Delphi

Заранее благодарим за любой «полезный» ответ.

InputQuery — Функция Delphi

Данная функция демонстрирует 3 очень мощных и полезных процедуры, интегрированных в Delphi.

Диалоговые окна InputBox и InputQuery позволяют пользователю вводить данные.

Функция InputBox используется в том случае, когда не имеет значения что пользователь выбирает для закрытия диалогового окна — кнопку OK или кнопку Cancel (или нажатие клавиши Esc). Если вам необходимо знать какую кнопку нажал пользователь (OK или Cancel (или нажал клавишу Esc)), используйте функцию InputQuery.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL