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

Инициализация локальных переменных-указателей на элементы управления в Delphi

Delphi , Компоненты и Классы , TScrollBox

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

Рассмотрим простой пример синхронизации ScrollBox'ов, где мы управляем, какую сторону синхронизировать с помощью RadioButton'ов - левую или правую сторону. При компиляции мы получаем предупреждения компилятора:

[dcc32 Warning] Unit1.pas(51): W1036 Variable 'ScrlBox1' might not have been initialized

[dcc32 Warning] Unit1.pas(51): W1036 Variable 'ScrlBox2' might not have been initialized

Вот сам пример кода:

procedure TForm1.Button1Click(Sender: TObject);
var
  ScrlBox1, ScrlBox2: TScrollBox;
begin
  if radiobtn_SyncLeftSides.Checked then // Синхронизация левой стороны
  begin
    ScrlBox1 := ScrollBoxLeft1;
    ScrlBox2 := ScrollBoxLeft2;
  end
  else if radiobtn_SyncrightSides.Checked then  // Синхронизация правой стороны
  begin
    ScrlBox2 := ScrollBoxRight1;
    ScrlBox1 := ScrollBoxRight2;
  end;

  // Синхронизация ScrollBox'ов
  ScrlBox2.VertScrollBar.Position := ScrlBox1.VertScrollBar.Position;
  ScrlBox2.HorzScrollBar.Position := ScrlBox1.HorzScrollBar.Position;
end;

Что здесь не так? Если мы добавим в начало процедуры создание ScrollBox'ов:

ScrlBox1:= TScrollBox.Create(nil);
ScrlBox2:= TScrollBox.Create(nil);

то предупреждения компилятора пропадут. Но создавать ScrollBox'ы на самом деле не нужно, так как мы просто используем указатели на уже существующие элементы управления на форме.

Итак, в чем же проблема? Дело в том, что если ни один из RadioButton'ов не выбран, то переменные ScrlBox1 и ScrlBox2 не инициализируются перед использованием. Именно об этом и предупреждает компилятор. Чтобы исправить это, можно добавить еще одно условие, проверяющее, выбран ли хотя бы один RadioButton:

procedure TForm1.Button1Click(Sender: TObject);
var
  ScrlBox1, ScrlBox2: TScrollBox;
begin
  if radiobtn_SyncLeftSides.Checked then // Синхронизация левой стороны
  begin
    ScrlBox1 := ScrollBoxLeft1;
    ScrlBox2 := ScrollBoxLeft2;
  end
  else if radiobtn_SyncrightSides.Checked then  // Синхронизация правой стороны
  begin
    ScrlBox2 := ScrollBoxRight1;
    ScrlBox1 := ScrollBoxRight2;
  end
  else
  begin
    // Переменные не инициализированы здесь!!!!
  end;

  // Синхронизация ScrollBox'ов
  ScrlBox2.VertScrollBar.Position := ScrlBox1.VertScrollBar.Position;
  ScrlBox2.HorzScrollBar.Position := ScrlBox1.HorzScrollBar.Position;
end;

Если ни один из RadioButton'ов не выбран, то мы просто выходим из процедуры с помощью команды Exit:

procedure TForm1.Button1Click(Sender: TObject);
var
  ScrlBox1, ScrlBox2: TScrollBox;
begin
  if radiobtn_SyncLeftSides.Checked then // Синхронизация левой стороны
  begin
    ScrlBox1 := ScrollBoxLeft1;
    ScrlBox2 := ScrollBoxLeft2;
  end
  else if radiobtn_SyncrightSides.Checked then  // Синхронизация правой стороны
  begin
    ScrlBox2 := ScrollBoxRight1;
    ScrlBox1 := ScrollBoxRight2;
  end
  else
  begin
    Exit; // <--- Здесь
  end;

  // Синхронизация ScrollBox'ов
  ScrlBox2.VertScrollBar.Position := ScrlBox1.VertScrollBar.Position;
  ScrlBox2.HorzScrollBar.Position := ScrlBox1.HorzScrollBar.Position;
end;

В данном примере использование Exit sembra

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

Статья рассматривает вопрос инициализации локальных переменных-указателей на элементы управления в Delphi при работе с компонентами на форме. В примере рассматривается синхронизация ScrollBox'ов, где указатели на ScrollBox'ы не инициализированы, если ни о


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

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




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


:: Главная :: TScrollBox ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:21:46/0.0031230449676514/0