【发布时间】:2015-05-14 14:46:11
【问题描述】:
我的应用程序会在初始化时在状态栏中显示一些信息。 我通过在状态栏上绘制图标(打开和关闭)来显示这一点。 以下代码在 Embarcadero XE3 中运行良好,但在 XE7 版本中不再运行。 该代码不会引发任何异常或错误。 我该如何解决这个问题?
procedure TFormMain.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
var
i: Integer;
begin
case Panel.Index of
3:
begin
i := ICON_DATABASE_OFF;
if HasDatabaseConnection() then
i := ICON_DATABASE;
ImageList1.Draw(StatusBar.Canvas, Rect.Left, Rect.Top, i);
end;
4:
begin
i := ICON_GLOBE_OFF;
if HasInternetConnection() then
i := ICON_GLOBE;
ImageList1.Draw(StatusBar.Canvas, Rect.Left, Rect.Top, i);
end;
end;
end;
在 XE3 中:
更新
(见 cmets)
出现该错误是因为FormMain 的OnResizeEvent。
procedure TFormMain.FormResize(Sender: TObject);
begin
//StatusBar1.Panels[0].Width := FormMain.Width - 448;
StatusBar1.Panels[0].Width := ClientWidth - 448;
end;
我调试时显示的值在两个版本中是相同的:
在 XE3 中:
FormMain.Width = 1400
客户端宽度 = 1024
在 XE7 中:
FormMain.Width = 1400
客户端宽度 = 1024
定义的尺寸是宽度 754 和高度 515。
由于某些未知原因,在 XE7 中未绘制图标。
如果我在打开表单后调整其大小,则图标显示正确!
我没有应用任何皮肤或更改应用程序的样式。我正在使用默认配置
状态栏将有 6 个面板:
0 - 显示提示(宽度灵活;表单宽度变化时变化)
1 - 将显示当前所选公司的名称(固定宽度)
2 - 将显示当前用户的名称(固定宽度)
3 - 将显示一个图标(固定宽度)
4 - 将显示一个图标(固定宽度)
5 - 将显示日期(固定宽度)
由于 1~5 号板的尺寸固定(总计 = 448),我看不出有理由重新计算板条 [0] 的宽度百分比。
同样,该问题仅出现在 XE7 中。
【问题讨论】:
-
您是否在项目中使用样式(项目 - 选项 - 应用程序 - 外观)?您的表单的运行时宽度是多少?如果小于 450,如果增加宽度使
Panel[0]宽度为正,图像会出现吗?请使用这些问题的答案编辑您的问题,并在对 Ken Whites 的回答中包含您在 cmets 中提到的事实。 -
令人沮丧的是,寻求帮助的人太冷漠,无法回答一些简单的细节,这些细节要么可以排除或确认他们问题的可能原因。
-
已编辑。请检查它。
-
那么您是否至少尝试重新计算 Panel[0] 的宽度以查看它是否改变了一些东西?或者您只是因为没有任何理由重新计算而直接拒绝它。
-
是的,我试过了。并且仍然无法正常工作。仅当我在打开窗口后调整窗口大小时。在我看来 XE7 版本有问题。
标签: delphi delphi-xe3 delphi-xe7