使用CreateParam的Params.WndParent强制子表单?

时间:2015-05-06 20:45:16

标签: delphi

在我继承的一些遗留D7代码中,我正在迁移到XE5,我找到了下面的代码。

该评论指出,如果它是从非WinControl创建的,它会欺骗Windows认为它是一个子表单。代码库中有一个地方,其中使用AOwner作为nil调用Create。 (在电话会议时,表格 可用,所以不确定他们为什么这样做......)

有关程序员目标是什么的任何建议吗?

?XDEBUG_SESSION_START=<xxxxxxx>

1 个答案:

答案 0 :(得分:4)

此代码早于和松散地模仿在Delphi 8中添加到TCustomForm的{​​{3}}属性。假设AOwner是另一个Form,请在现代Delphi版本中使用这些属性,例如:< / p>

constructor TFormX.Create( AOwner: TComponent);
begin
  inherited Create(AOwner);
  if AOwner Is TCustomForm then
    PopupParent := TCustomForm(AOwner);
end;

此外,使用fCreateParamsHasBeenRun是错误的。每次重新创建表单窗口时都会调用CreateParams(),因此每次都需要应用WndParent,而不是有条件地应用CreateParams()。如果您需要保持AOwner逻辑(例如TCustomForm是非fCreateParamsHasBeenRun窗口控件),则需要删除 NSString *jsonString; NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error]; if (!jsonData) { NSLog(@"error: %@", error.localizedDescription); jsonString = @"{}"; } else { jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF16StringEncoding]; } return jsonString;