【发布时间】:2014-04-01 22:01:38
【问题描述】:
这个把我逼上墙了。从 Delphi 6 到 XE5 的大部分转换都在顺利进行,但我有各种例程来动态构建各种 TForm 后代(没有 DFM),将其弹出并通常返回一个值。我有一些在 D6 中运行良好。一般来说,我会选择一个我想弹出的地方(比如在面板上),以及我想弹出的内容(编辑框、备忘录、列表框...)。我创建表单,设置初始值并调用 showmodal 并返回一些结果。
在 XE5 中编译的相同代码有执行(故障)。一种是创建的表单接受left,top等,但不会在那里显示。这些值在属性中是正确的,但表单在错误的位置。第二个可能相关(故障)是当我创建一个 TMemo 或 TListbox 并在其中存储一些文本时,“ShowModal”正确显示数据,但“Show”没有。
我花了几个小时将问题消化为最简单的形式,删除了我所有的个人代码。如此处所示,它运行良好
如果我注释掉这一行,它就不起作用 - 表单显示在错误的位置
XX.ClientToScreen(Point(0,0)); // EXTREMELY WEIRD PATCH
这一行是一个函数调用,不应该影响其他任何东西,我不使用返回值。
注释掉的“显示”行说明了另一个问题(数据未显示)。
我在各种地方都尝试过Application.ProcessMessages,但它从来没有让事情变得更好,而且有时会让事情变得更糟。
让我感到“困惑”。
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
type TMemoForm = class(TForm)
private
public
XMemo : TMemo;
end;
Function PopUpMemoStr(txt : AnsiString; x : integer = 200; y : integer = 200; w : integer = 400 ; h : integer = 400 ) : AnsiString; // more or less a dummy for testing on XE5 2/28/14
var XX : TMemoForm;
begin
XX := TMemoForm.CreateNew(Application);
XX.ClientToScreen(Point(0,0)); // *** EXTREMELY WEIRD FIX ***
XX.Left := X; XX.Top := Y; XX.Width := w; XX.height := h;
XX.caption := 'Dummy PopUpMemo';
XX.XMemo := TMemo.create(XX);
XX.XMemo.parent := XX;
XX.XMemo.align := alClient;
XX.XMemo.text := txt;
//logit('PopUpMemoStr R='+TRectToStr(MyGetScreenRect(XX)));
XX.showmodal;
//XX.show; delay(3.00); // other "no data" problem
XX.free;
end;
//exercise code -- Panel2 is just a visible spot to see if positioning works correctly
var s : AnsiString;
var R : TRect;
begin
//R := MyGetScreenRect(Panel2);
R := Rect(414,514,678,642); // just a useful screen location for testing
s := 'One'+CRLF+'Two'+CRLF+'Three'+CRLF+'Four'; // "CRLF is #13#10
PopUpMemoStr(s,R.Left,R.Top,R.Right-R.Left,R.Bottom-R.Top);
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
【问题讨论】:
标签: delphi delphi-xe5