実行時に親フォームの境界を越えてリストボックスを表示するにはどうすればよいですか:
設計時にリストボックスをクリックすると、イメージが IDE から取得されます。実行時にこの効果を達成したいと思います。
親フォームの外にコントロールを実際に視覚的に拡張することはできません。ただし、このコントロール用に別のボーダレス フォームを作成し、この 2 番目のフォームを最初のフォームの上に部分的に表示することで、効果を得ることができます。
以下は、次のハンドラをForm1
持つメイン フォームです。OnClick
Button1
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(nil);
try
Form2.Left := ClientOrigin.X + 140;
Form2.Top := ClientOrigin.Y + ClientHeight - 20;
Form2.ShowModal;
Edit1.Text := IntToStr(Form2.ModalResult);
finally
Form2.Free;
end;
end;
2 番目の形式 ( Form2
) は (子と親に関して) 関連しForm1
ていないため、その位置を画面ピクセルとして指定する必要がありますが、それでもForm1
. したがってForm1.ClientOrigin
、参照として (`Form1 クライアント領域の上部と左側を画面座標として) 使用します。
Form2
を保持する2 番目のフォームにはTListBox
、次のプロパティ設定があります。
BorderStyle = bsNone
KeyPreview = True (to catch `Enter` key)
そして、OnKeyUp
イベントハンドラーは次のように記述されています
procedure TForm2.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN then
ModalResult := ListBox1.ItemIndex;
end;