如果在使用表单后调用Form.Release,它将释放所有相关内存但不将表单变量设置为nil.
if not assigned (Form1) then
begin
Application.CreateForm(Tform1, Form1);
try
// Do something
finally
Form1.Release
end;
end;
Run Code Online (Sandbox Code Playgroud)
为了能够再次调用相同的代码,Form1必须在某个时候设置为nil.从发布的描述我做不到
Form1 := nil;
Run Code Online (Sandbox Code Playgroud)
在Release之后,因为Release程序将在被调用之后和实际释放表单之前直接返回.我无法检测Form.Release何时完成将表单var设置为nil.
做这个的最好方式是什么?
我有一个Delphi应用程序,我们正在迁移到C++.在调试我的Delphi代码时,我经常做的一件事是进入VCL本身,以准确了解正在发生的事情,以跟踪一些错误.这在C++ Builder中是否可行?
假设我在C++ Builder中,我称之为"ShowMessage".我可以在调试会话中进入该调用并动态切换到Pascal吗?
我必须在Windows 7/mingw下使用g ++将一个项目从Windows XP下的Borland C++ Builder 5.0移植到Qt 4.7.1.库和命令行实用程序已经完成,现在我必须处理使用Borland VCL的GUI应用程序.
任何人都可以推荐任何工具或库来简化这项任务吗?
有没有人有这方面的经验?
编辑补充说:好吧,我采取了牛角,并从头开始实施GUI.我不得不说,评论员是对的:我看不出任何使用现有Borland GUI来简化流程的方法.
VCL似乎提供了两种隐藏表单设计者控件的机制:TControlState.csDesignerHide和TControlStyle.csNoDesignVisible.
就IDE而言,它们之间有什么区别?你应该在什么时候使用?
我的表单上总共有4个单选按钮,我想在一组中设置前两个按钮,在另一组中设置第二个按钮,这样我就可以从第一组中检查一个,从第二组中检查一个.
现在,如果我从第一组中检查一个,则第二组中的一个将被取消选中.
我一直想知道如何做到这一点,我相信现在是时候弄明白了.:)
我注意到TPageControl中TTabSheet的Left属性始终为4.因此,TPageControl边框与TTabSheet中的控件之间始终至少有4像素的边距.我想将此边距设置为0(至少对于左边框),但我不能将TTabSheet.Left设置为0; 它总是自动恢复为4像素.
我试图在OnResize for TTabSheet和TTabControl中设置Left属性,但它没有帮助.
如何将此边距减少到0(至少对于左边框)?我正在使用C++ Builder 6.
该Ctrl+Backspace键盘快捷键正常删除的话,从插入符左侧.但它不工作在任何标准的德尔福控制你所期望的(TEdit,TMemo,TComboBox等.).有趣的是,Ctrl+Delete工作得很好.
有人知道如何轻松纠正这种行为吗?
我知道重写KeyDown程序会做到这一点,但这是一个相当复杂的事情,因为KeyDown必须为每个组件重写.
在启用了主题的Delphi 2010应用程序中,我在一个带有clMoneyGreen背景的表单中有两个TPageControl(一个在另一个内):

外部页面控件正确地使用父组件的颜色绘制其背景,然而内部页面控件使用clBtnFace(图像中的红色省略号)而不是其父控件(TTabSheet)的白色绘制其背景.有没有办法解决这个问题,而无需将页面控件返回到其Windows经典外观(丢失Windows主题)?
我在Google和Stack Overflow中找到的所有修复都涉及OwnerDraw,这使得页面控件失去了主题.
我尝试使用一种方法来创建从TPageControl继承的新页面控件组件来处理WM_ERASEBKGND窗口消息:
procedure TMyPageControl.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
begin
if Parent is TCustomPageControl then
begin
Brush.Color := clWhite;
Windows.FillRect(Msg.dc, ClientRect, Brush.Handle);
Msg.Result := 1;
end
else
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
它描绘了背景白色,但在WM_ERASEBKGND(我猜测TWinControl的WM_PAINT方法)之后调用的其他一些方法在白色背景上重新绘制灰色.
注意:我正在研究这个,因为我正在从Delphi 7移植的大型应用程序上实现主题,这就是我试图通过派生组件解决这个问题的原因:我可以轻松搜索和替换所有207 TPageControl事件与我的新课程,但在其中一些面板后面放置需要更多时间.
我有这个问题.当我隐藏我的主窗体时,我的应用程序的任务栏图标也被隐藏.我也看到了一个关于这个问题的新问题,答案并没有真正帮助.他们建议尽量减少它,但我不想最小化应用程序.
应用程序运行时是否可以更改主窗体?
例如.我有两种形式.当我想隐藏一个表单并显示另一个表单时,任务栏图标应保留在任务栏上,主表单应切换到另一个表单.
我使用的是Delphi XE6,它是一个VCL Forms应用程序.
我还看到了一个关于在运行时更改主窗体的一个不同的老问题,但它很老,仍然基于Delphi 6.
出于审美原因,我想在另一个表单的顶部显示一个表单,就好像它是一个组件,就像TPanel一样.它应该与父级一起调整大小,随着标题栏的标记栏等对其进行移动.
-----------------------------
| main form component 1 |
-----------------------------
| main | the 'embedded' |
| form | form goes here |
|comp 2| |
-----------------------------
Run Code Online (Sandbox Code Playgroud)
我能这样做吗?如果是这样的话?
我现在倾向于MDI ......
vcl ×10
delphi ×9
c++builder ×4
c++builder-6 ×1
debugging ×1
delphi-2010 ×1
delphi-xe6 ×1
forms ×1
porting ×1
qt ×1
taskbar ×1
winapi ×1