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

Исправление ошибки `ERangeError` при создании окна в Delphi 11: переход с `CW_USEDEFAULT`

Delphi , Синтаксис , Справочник по API-функциям

Исправление ошибки ERangeError при создании окна в Delphi 11: переход с CW_USEDEFAULT

Вопрос пользователя связан с ошибкой ERangeError, возникающей при попытке создания окна в приложении, написанном на Delphi 11. Проблема заключается в использовании константы CW_USEDEFAULT, которая в новой версии Delphi не совместима с типом параметра функции CreateWindowEx.

Описание проблемы

При работе с примером из старой книги по Windows API в Delphi 11 при нажатии на кнопку на форме пользователь получает ошибку Project Project1.exe raised exception class ERangeError with message 'Range check error'. В коде используется константа CW_USEDEFAULT для определения начальных параметров окна, что приводит к конфликту типов данных.

Решение проблемы

Шаг 1: Понимание проблемы

В новых версиях Delphi тип константы CW_USEDEFAULT изменился с DWORD на значение, превышающее MaxInt, что вызывает ошибку ERangeError при попытке преобразования в тип Integer, ожидаемый функцией CreateWindowEx.

Шаг 2: Исправление кода

Для решения проблемы необходимо изменить тип данных константы CW_USEDEFAULT или отключить проверку диапазона значений. Вот два варианта решения:

  1. Изменение типа константы

Добавьте в начало процедуры Button1Click следующий код:

pascal const CW_USEDEFAULT = -MaxInt - 1;

Это позволит корректно использовать константу в функции CreateWindowEx.

  1. Отключение проверки диапазона

Отключите проверку диапазона значений вокруг вызова функции CreateWindowEx с помощью директивы препроцессора:

pascal {$R-} // Код с вызовом CreateWindowEx {$R+}

Это временно отключит проверку диапазона, что позволит выполнить операцию.

Шаг 3: Пример кода

Вот как может выглядеть исправленный код процедуры Button1Click:

procedure TForm1.Button1Click(Sender: TObject);
var
  hWindow: HWND;
begin
  {$R-}
  const
    CW_USEDEFAULT = -MaxInt - 1;
  {$R+}
  // Создание окна
  hWindow := CreateWindowEx(0, 'TestClass', 'New Window', WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInstance, nil);
  // Показ и обновление окна
  if hWindow <> 0 then
  begin
    ShowWindow(hWindow, SW_SHOWNORMAL);
    UpdateWindow(hWindow);
  end
  else
  begin
    ShowMessage('CreateWindow failed');
    Exit;
  end;
end;

Шаг 4: Тестирование

После внесения изменений запустите приложение и проверьте, что ошибка ERangeError больше не появляется при нажатии на кнопку.

Заключение

Использование констант и функций из Windows API в Delphi требует внимательного учета изменений, внесенных в новые версии среды разработки. В данном случае, изменение типа константы или отключение проверки диапазона позволило устранить ошибку ERangeError.

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

Пользователь столкнулся с ошибкой `ERangeError` при попытке создания окна в Delphi 11, используя константу `CW_USEDEFAULT`, которая в новой версии Delphi не совместима с типом параметра функции `CreateWindowEx`, что требует исправления типа данных или от


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

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




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


:: Главная :: Справочник по API-функциям ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 14:16:43/0.0032880306243896/0