如何显示超出TForm边界的控件(例如TListbox)

Rae*_*elB 2 delphi tform tlistbox

如何在运行时在父窗体的边框之外显示列表框:

在此输入图像描述

在设计时单击列表框时,将从IDE获取图像.我想在运行时实现这个效果.

Tom*_*erg 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;
Run Code Online (Sandbox Code Playgroud)

由于第二个form(Form2)不相关(child-parent wise),Form1我们必须将其位置作为屏幕像素,但仍相对于Form1.因此,我们使用Form1.ClientOrigin(`Form1客户区顶部和左侧作为屏幕坐标)作为参考.

第二种形式,Form2包含TListBox,具有以下属性设置

BorderStyle = bsNone
KeyPreview = True (to catch `Enter` key)
Run Code Online (Sandbox Code Playgroud)

它将OnKeyUp事件处理程序写为

procedure TForm2.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_RETURN then
    ModalResult := ListBox1.ItemIndex;
end;
Run Code Online (Sandbox Code Playgroud)