2

如何在运行时显示超出父窗体边界的列表框:

在此处输入图像描述

图像是在设计时单击列表框时从 IDE 获取的。我想在运行时达到这个效果。

4

1 回答 1

5

您不能真正在视觉上将控件扩展到父窗体之外。但是你可以通过为这个控件创建一个单独的无边框窗体并在第一个窗体上部分显示这个辅助窗体来实现效果:

在此处输入图像描述

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;

由于第二种形式 ( Form2) 与 (child-parent 明智的) 无关,Form1我们必须将其位置作为屏幕像素,但仍然相对于Form1. 因此我们使用Form1.ClientOrigin(`Form1 客户区顶部和左侧作为屏幕坐标)作为参考。

Form2包含的第二种形式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 回答