Нужно ли "создавать" / инициализировать локальные переменные, если они просто используются в качестве указателей для формирования элементов управления?
У меня есть этот простой пример синхронизации Scrollboxes, где я контролирую, какая сторона синхронизируется с помощью переключателя - Синхронизация левой или правой стороны. Когда я компилирую, я получаю сообщения компилятора:
[dcc32 Предупреждение] Unit1.pas(51): переменная W1036 'ScrlBox1', возможно, не была инициализирована
[dcc32 Предупреждение] Unit1.pas(51): переменная W1036 'ScrlBox2', возможно, не была инициализирована
Это простой пример:
procedure TForm1.Button1Click(Sender: TObject);
var
ScrlBox1, ScrlBox2: TScrollBox;
begin
if radiobtn_SyncLeftSides.Checked then // Snyc Left side
begin
ScrlBox1 := ScrollBoxLeft1;
ScrlBox2 := ScrollBoxLeft2;
end
else if radiobtn_SyncrightSides.Checked then // Snyc Right side
begin
ScrlBox2 := ScrollBoxRight1;
ScrlBox1 := ScrollBoxRight2;
end;
// Sync scroll boxes
ScrlBox2.VertScrollBar.Position := ScrlBox1.VertScrollBar.Position;
ScrlBox2.HorzScrollBar.Position := ScrlBox1.HorzScrollBar.Position;
end;
В чем здесь проблема?
Если я добавлю это в начале, сообщение исчезнет:
ScrlBox1:= TScrollBox.Create(nil);
ScrlBox2:= TScrollBox.Create(nil);
но я не думаю, что создание переменных прокрутки необходимо, верно? Это просто переменные указатели на элементы управления в форме.
1 ответ
Если оба radiobtn_SyncLeftSides
а также radiobtn_SyncrightSides
не проверены, вы не инициализируете ScrlBox1
а также ScrlBox2
переменные перед их использованием. Это то, на что жалуется компилятор.
procedure TForm1.Button1Click(Sender: TObject);
var
ScrlBox1, ScrlBox2: TScrollBox;
begin
if radiobtn_SyncLeftSides.Checked then // Snyc Left side
begin
ScrlBox1 := ScrollBoxLeft1;
ScrlBox2 := ScrollBoxLeft2;
end
else if radiobtn_SyncrightSides.Checked then // Snyc Right side
begin
ScrlBox2 := ScrollBoxRight1;
ScrlBox1 := ScrollBoxRight2;
end else
begin
// NOT INITIALIZED HERE!!!!!
end;
// Sync scroll boxes
ScrlBox2.VertScrollBar.Position := ScrlBox1.VertScrollBar.Position;
ScrlBox2.HorzScrollBar.Position := ScrlBox1.HorzScrollBar.Position;
end;
Если вы не хотите синхронизировать прокрутку, просто Exit
процедура:
procedure TForm1.Button1Click(Sender: TObject);
var
ScrlBox1, ScrlBox2: TScrollBox;
begin
if radiobtn_SyncLeftSides.Checked then // Snyc Left side
begin
ScrlBox1 := ScrollBoxLeft1;
ScrlBox2 := ScrollBoxLeft2;
end
else if radiobtn_SyncrightSides.Checked then // Snyc Right side
begin
ScrlBox2 := ScrollBoxRight1;
ScrlBox1 := ScrollBoxRight2;
end else
begin
Exit; // <-- HERE
end;
// Sync scroll boxes
ScrlBox2.VertScrollBar.Position := ScrlBox1.VertScrollBar.Position;
ScrlBox2.HorzScrollBar.Position := ScrlBox1.HorzScrollBar.Position;
end;