2

実行時に親フォームの境界を越えてリストボックスを表示するにはどうすればよいですか:

ここに画像の説明を入力

設計時にリストボックスをクリックすると、イメージが IDE から取得されます。実行時にこの効果を達成したいと思います。

4

1 に答える 1

5

親フォームの外にコントロールを実際に視覚的に拡張することはできません。ただし、このコントロール用に別のボーダレス フォームを作成し、この 2 番目のフォームを最初のフォームの上に部分的に表示することで、効果を得ることができます。

ここに画像の説明を入力

以下は、次のハンドラをForm1持つメイン フォームです。OnClickButton1

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;
于 2018-07-02T16:10:25.037 に答える