如何在运行时显示超出父窗体边界的列表框:
图像是在设计时单击列表框时从 IDE 获取的。我想在运行时达到这个效果。
您不能真正在视觉上将控件扩展到父窗体之外。但是你可以通过为这个控件创建一个单独的无边框窗体并在第一个窗体上部分显示这个辅助窗体来实现效果:
这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;