テストに代わるものはありません。コードでフォームを作成し、関心のあるプロパティを設定し、サイズ変更イベントが呼び出されたときに記録するのはどうですか。
コードの醜さを許すなら、BorderStyle と Position のすべての組み合わせを、それぞれを明示的にコーディングせずにテストする大まかな概念実証を次に示します。さらにプロパティを追加して、好きなだけ取得できます。CodeSite のようなツールを使用すると、ロギングもよりクリーンで簡単になります。
2 つのフォームでアプリケーションを作成します。2 番目のものが自動作成されていないことを確認してください。
2 番目のフォームでは、プロパティを追加し、フォームの Resize イベントに小さなログ コードを追加します。
private
FOnResizeFired: TNotifyEvent;
public
property OnResizeFired: TNotifyEvent read FOnResizeFired write FOnResizeFired;
end;
...
procedure TForm2.FormResize(Sender: TObject);
begin
if Assigned(FOnResizeFired) then
FOnResizeFired(self);
end;
メインフォームの uses 句に TypInfo を追加し、ボタンとメモをフォームにドロップします。
簡単な手順を追加します。
procedure TForm1.ResizeDetected(Sender: TObject);
begin
Memo1.Lines.Add(' *** Resize detected');
end;
次に、ButtonClick イベントに次を追加します。
procedure TForm1.Button1Click(Sender: TObject);
var
lBorderStyle: TFormBorderStyle;
lBorderStyleName: string;
lPosition: TPosition;
lPositionName: string;
lForm: TForm2;
begin
Memo1.Clear;
for lBorderStyle in [low(TFormBorderStyle) .. high(TFormBorderStyle)] do
begin
for lPosition in [low(TPosition) .. high(TPosition)] do
begin
lBorderStyleName := GetEnumName(TypeInfo(TFormBorderStyle), Integer(lBorderStyle));
lPositionName := GetEnumName(TypeInfo(TPosition), Integer(lPosition));
Memo1.Lines.Add(Format('Border: %s Position: %s', [lBorderStyleName, lPositionName]));
Memo1.Lines.Add(' Creating form');
lForm := TForm2.Create(self);
try
Memo1.Lines.Add(' Form Created');
lForm.OnResizeFired := ResizeDetected;
Memo1.Lines.Add(' Setting border style');
lForm.BorderStyle := lBorderStyle;
Memo1.Lines.Add(' Setting Position');
lForm.Position := lPosition;
Memo1.Lines.Add(' Showing form');
lForm.Show;
Memo1.Lines.Add(' Form Shown');
lForm.Close;
Memo1.Lines.Add(' Form Closed');
finally
FreeAndNil(lForm);
Memo1.Lines.Add(' Form Freed');
end;
end;
end;
end;
フォームが表示される前にいくつかのプロパティが設定されていると resize が起動することに気付くでしょう。いくつかの組み合わせでは、フォームが表示されるときに resize が 2 回起動するように見えます。面白い。