答案 0 :(得分:2)
我认为这不可能。
一种可能的解决方法是从头开始实现消息框。
从biSystemMenu
移除TForm.BorderIcons
(或实际将其设为空)。
procedure MyMessageBoxWithoutCloseButton;
var
Form: TSetupForm;
Button: TNewButton;
MesssageLabel: TLabel;
begin
Form := CreateCustomForm;
Form.BorderStyle := bsDialog;
Form.Position := poOwnerFormCenter;
Form.ClientWidth := ScaleX(400);
Form.ClientHeight := ScaleY(130);
Form.BorderIcons := []; { No close button }
Form.Caption := 'Caption';
MesssageLabel := TLabel.Create(Form);
MesssageLabel.Parent := Form;
MesssageLabel.Left := ScaleX(16);
MesssageLabel.Top := ScaleX(16);
MesssageLabel.Width := Form.ClientWidth - 2*ScaleX(16);
MesssageLabel.Height := ScaleY(32);
MesssageLabel.AutoSize := False;
MesssageLabel.WordWrap := True;
MesssageLabel.Caption := 'Lorem ipsum dolor sit amet, ...';
Button := TNewButton.Create(Form);
Button.Parent := Form;
Button.Width := ScaleX(80);
Button.Height := ScaleY(24);
Button.Left := Form.ClientWidth - Button.Width - ScaleX(8);
Button.Top := Form.ClientHeight - Button.Height - ScaleY(8);
Button.Caption := 'Accept';
Button.ModalResult := mrOK;
Form.ShowModal;
end;
请注意,仍然可以使用 Alt-F4 关闭消息框。
防止该句柄OnCloseQuery
。有关示例,请参阅How to Delete / Hide / Disable [OK] button on message box。