Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление расположения области ввода в компоненте InputQuery/InputBox в Delphi XE2

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

Вопрос пользователя связан с проблемами использования встроенных функций InputQuery и InputBox в среде разработки Delphi XE2. Пользователь столкнулся с тем, что область ввода располагается не в том месте, и хотел бы узнать, возможно ли как-то переустановить её до создания собственной формы ввода.

Анализ проблемы

Компонент InputQuery в Delphi XE2 предназначен для отображения короткого текста-метки слева от поля ввода, аналогично компоненту TLabeledEdit. Однако, пользователь пытается использовать его для отображения инструкций над меткой, что не предусмотрено функциональностью данного компонента.

Подтвержденный ответ

InputQuery() не предназначен для использования в таком контексте, и лучше создать собственную форму с нужным расположением элементов. Тем не менее, если необходимо использовать именно InputQuery, существует техническая возможность переупорядочить элементы управления на форме, используемой InputQuery.

Пример кода

Для изменения расположения элементов можно использовать событие OnActiveFormChange класса TScreen. Ниже приведен пример кода, который позволяет переместить поле ввода под меткой:

procedure TMyForm.ActiveFormChanged(Sender: TObject);
var
  Form: TCustomForm;
  Prompt, Edit, Ctrl: TControl;
  I, J, ButtonTop: Integer;
begin
  Form := Screen.ActiveCustomForm;
  if (Form = nil) or (Form.ClassName <> 'TInputQueryForm') then Exit;

  for I := 0 to Form.ControlCount-1 do
  begin
    Ctrl := Form.Controls[I];
    if Ctrl is TLabel then
    begin
      Prompt := TLabel(Ctrl);
    end
    else if Ctrl is TEdit then
    begin
      Edit := TEdit(Ctrl);
    end;
  end;

  Edit.SetBounds(Prompt.Left, Prompt.Top + Prompt.Height + 5, Prompt.Width, Edit.Height);
  Form.ClientWidth := (Edit.Left * 2) + Edit.Width;
  ButtonTop := Edit.Top + Edit.Height + 15;

  J := 0;
  for I := 0 to Form.ControlCount-1 do
  begin
    Ctrl := Form.Controls[I];
    if Ctrl is TButton then
    begin
      Ctrl.SetBounds(Form.ClientWidth - ((Ctrl.Width + 15) * (2-J)), ButtonTop, Ctrl.Width, Ctrl.Height);
      Form.ClientHeight := Ctrl.Top + Ctrl.Height + 13;
      Inc(J);
    end;
  end;
end;

procedure TMyForm.DoSomething;
var
  value: string;
begin
  Screen.OnActiveFormChange := ActiveFormChanged;
  try
    InputQuery('Enter New Schedule', 'Format: <Second> <Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week> <Year>.'#10'Use * for repeating cycles. ex: 0 0 7 * * * * (trigger at 7AM everyday)', value);
  finally
    Screen.OnActiveFormChange := nil;
  end;
end;

Также предоставлен альтернативный код, который добавляет метку с инструкциями выше поля ввода:

class procedure TScreenEvents.ActiveFormChanged(Sender: TObject);
// ... код аналогичен предыдущему примеру, но включает добавление метки с инструкциями
end;

procedure TMyForm.DoSomething;
// ... код аналогичен предыдущему примеру, но включает вызов InputQuery без дополнительного сообщения
end;

Заключение

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

Создано по материалам из источника по ссылке.

Пользователь сталкивается с проблемой неправильного расположения области ввода в компоненте `InputQuery/InputBox` в Delphi XE2 и ищет способ корректировки этого расположения.


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

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Формы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 21:05:04/0.0031850337982178/0