【发布时间】:2014-07-06 22:17:14
【问题描述】:
我创建了一个带有两个 TTabItem 的 TTabControl。在每个 TTabItem 上都有一个(或多个)TImageViewers 和几个 TEdits。当我点击 TImageViewer 时,会弹出一个模态屏幕,我设置了一些值,我想通过 TEdits 将这些值报告给用户。所以在从模态屏幕返回时, 我执行
editn.text := whateveritis;
然后我说
editn.repaint;
什么都没有发生。我说 TTabItem.repaint。没发生什么事。我单击另一个 TTabIem,然后返回到第一个 TabItem,瞧,Edit 控件包含正确的信息。所以我的 editn.text := 不管是什么必须工作(这是对 TEdit 的唯一写入),但我无法在不离开选项卡的情况下让闪烁控件显示结果。更改内容后如何让它重新显示?我是否需要编写一个只有一行的 OnChange 例程 self.repaint?看起来很难看,我希望有一种更全球化的方法。有什么建议吗?
鉴于最初的 cmets,让我提供更多细节。设置:在主屏幕中,放入 tabcontrol,然后在 tabcontrol 中放入 2 个 tabitems。在 tabitem1 中,放入一个 timageviewer 和 4 个 tedits(加上其他东西,可能无关紧要)。图像被放入图像查看器(并正确显示)。 onclick 事件激活以下内容(省略号删去不相关的代码):
procedure TSCKMain.ImageViewer1Click(Sender: TObject);
var
lochold, scrollhold : tpoint;
backfromwavform : tmodalresult;
begin
lochold.X := mouseloccallback.x;
lochold.Y := mouseloccallback.y;
scrollhold.X := round(imageviewer1.ViewportPosition.X);
scrollhold.Y := round(imageviewer1.ViewportPosition.Y);
…
repeat backfromwavform := Wavform.Showmodal until backfromwavform<>mrnone;
case backfromwavform of
mrOK : begin {blue end}
Specsingle.BlueEnd.X := lochold.X;
Specsingle.BlueEnd.y := lochold.y;
edit13.Text := inttostr(Specsingle.BlueEnd.X);
Edit14.Text := inttostr(Specsingle.BlueEnd.y);
PublicWindowFlag := 'RePlot';
end;
mrContinue : begin {red end}
Specsingle.RedEnd.X := lochold.X;
Specsingle.RedEnd.y := lochold.y;
edit15.Text := inttostr(Specsingle.RedEnd.X);
Edit16.Text := inttostr(Specsingle.RedEnd.y);
PublicWindowFlag := 'RePlot';
end;
…
end;
if PublicWindowFlag<>'Cancel' then
if PublicWindowFlag='RePlot' then
begin
specsingle.RegenImage;
end
else
showmessage('Single image semaphore error. Debug.');
Imageviewer1.scrollto(scrollhold.X-Imageviewer1.viewportposition.X, scrollhold.y-Imageviewer1.ViewportPosition.Y);
end;
模态屏幕正确地发回 mrContinue 或 mrOK,并执行相应的案例。但是,edit13、edit14、edit15 和 edit16 不会更改其内容。但是,如果我单击 Tabitem2 并返回 Tabitem1,它们会重新绘制并且确实包含正确的字符,而这些字符只能从上面的代码中获得。结论:不知何故,编辑并没有独立重绘,但不清楚原因。
【问题讨论】:
-
如果您设置 TEdit 的文本,它的外观将更新,无需手动重新绘制。我们将需要更多信息,尤其是调用模态屏幕并设置编辑文本的例程的完整代码。
标签: delphi firemonkey repaint