我一直在使用C++ Builder 2010更新旧的遗留项目构建代码,以便使用C++ Builder 10 Seattle进行编译.我主要不得不改变路径,很多dupIgnore来TDuplicates::dupIgnore,重新导入像一些组件MSXML和MSMQ等.
首先是主要项目以bpl和dll的形式使用的一堆子项目,最后是主项目的代码编译.
但是......它没有链接:P
[ilink32 Error] Fatal: Unable to open file 'TYPES.OBJ'
Run Code Online (Sandbox Code Playgroud)
我试图找到有关潜在问题的信息,许多提及确保在Delphi编译器设置下的单元范围内System提供.但这已经存在于这个项目中.还有什么可能导致这个?
有关信息.现在使用"经典"bcc32编译器编译.
包含路径:
$(BDSINCLUDE)\windows\vcl;$(BDSINCLUDE)\dinkumware;
图书馆路径:
$(BDSLIB)\$(PLATFORM)\$(Config);$(BDSLIB)\$(PLATFORM)\Release\psdk;
Run Code Online (Sandbox Code Playgroud) 我不知道这三种方法中哪一种最适合我.他们都为我工作.有谁知道刷新,更新和重绘之间的区别?
将表单设置为WindowState = wsMaximized有时会使表单最大化但不会:

长期错误:这是我在2003年首次在Borland新闻组中提出的一个问题:
然后在2006年:
然后在2008年再次:
有人在2012年的Embarcadero论坛上提出这个问题:
现在是时候将18岁的bug移植到Stackoverflow了.也许某人终于想出了一个解决方法.
重现的步骤:
我的帖子包含了六种失败模式,但最简单的是:
删除表单上的a Label和Edita:

为以下内容添加OnEnter活动TEdit:
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Label1.Font.Style := Label1.Font.Style + [fsBold];
end;
Run Code Online (Sandbox Code Playgroud)并设置表格:
WindowState到wsMaximizedAutoScroll为假而bazinga,失败了.
2008年帖子的另一组步骤之一:
- 创建一个新的应用程序和一个表单.
- 在设计时将表单设置为最大化(WindowState = wsMaximized).
- 删除窗体上的ListView控件
在OnShow期间,将20个空项添加到列表视图中:
Run Code Online (Sandbox Code Playgroud)procedure TForm1.FormShow(Sender: TObject); var i: Integer; begin for i := 1 to 20 do ListView1.Items.Add; end;在设计时将表单的AutoScroll属性设置为false(AutoScroll = False)
当然,我没有追求的是"在n …
发现VCL样式的故障:当您更新表单标题时,之前在同一过程中重绘的其他控件不会重新绘制,并且您被迫调用Repaint,从而丢失了重绘的宝贵处理时间.
示例:(手动设置项目选项/ vcl样式)
unit Unit11;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm11 = class(TForm)
Button1: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form11: TForm11;
implementation
{$R *.dfm}
procedure TForm11.Button1Click(Sender: TObject);
begin
Panel1.Caption := 'test';
caption := 'glitch';
end;
end.
object Form11: TForm11
Left = 0
Top = 0
Caption = 'Form11'
ClientHeight = 89
ClientWidth = 352
Color = clBtnFace
Font.Charset …Run Code Online (Sandbox Code Playgroud) 在Delphi XE2之前,我们只使用VCL来创建GUI应用程序.Delphi XE2声明:
警告:FireMonkey(FMX)和可视组件库(VCL)不兼容,不能在同一项目或应用程序中使用.也就是说,应用程序必须只有一个或另一个,FireMonkey或VCL.不兼容性是由FireMonkey(FMX)和VCL之间的框架差异引起的.
我的应用程序是一个使用运行时包构建的纯VCL应用程序.所有VCL表单都存储在运行时包中.如果我要创建一个FireMonkey表单并存储在一个包中,我是否有机会在运行时在我的VCL应用程序中实例化这个FireMonkey表单?所以我可能会喜欢FireMonkey的3D或HD效果.
Delphi VCL组件的"Tag"属性是否有任何特定用途?我用Google搜索了几个例子,例如,使用'color'属性或者使用值作为指针地址,但使用它是"好习惯",还是因为它与UI的程序逻辑?
在Delphi应用程序中,当您将鼠标悬停在边框图标上时,例如:
它行为不正确:
与行为正确的应用程序进行比较:
怎么修?
编辑 - Delphi 7也失败了:
在Delphi 5中:
在Delphi 4中:
我假设(即害怕)它是由ThemeServices引擎引起的; 他们可能认为不尊重用户的偏好很酷.但看起来它更基本.
Skype也失败了; 也用Delphi编写:
我终于找到了为什么它在我使用的每台Windows 10机器上都失败了; 但不适合所有人.高dpi.
将dpi设置为97(101%)或更高.
我必须从XML文件加载图像.XML文件中没有关于图像是否为JPG/GIF/BMP的信息.加载图像后,我需要将其转换为Bitmap.
有没有人知道如何在不知道实际文件格式的情况下将图像转换为Bitmap?我正在使用Delphi 2007/2009
谢谢.
在XE2中有一个新功能:'styles',用于VCL(.vsf)和Firemonkey( .styles),还有一些在C:\ Program Files\Embarcadero\RAD Studio\9.0\Redist\styles目录中提供.
由于创建新样式似乎很容易,有没有"样式库"网站或博客?
当对表单类添加了对运行时DPI切换的支持时,没有考虑像菜单这样的基本UI元素.
菜单绘图从根本上被打破,因为它依赖于Screen.MenuFont,这是一个系统范围的度量,不是特定于监视器.因此,虽然表单本身可以相对简单地进行适当缩放,但是显示在其上的菜单只有在缩放恰好匹配加载到Screen对象中的任何度量标准时才能正常工作.
这是主菜单栏,弹出菜单和表单上所有弹出菜单的问题.如果将表单移动到具有与系统指标不同的DPI的监视器,则这些都不会缩放.
真正做到这一点的唯一方法是修复VCL.等待Embarcadero充实多DPI并不是一个真正的选择.
查看VCL代码,基本问题是Screen.MenuFont属性被分配给菜单画布,而不是选择适合显示菜单的监视器的字体.只需在VCL源代码中搜索Screen.MenuFont即可找到受影响的类.
在不必完全重写所涉及的类的情况下,解决此限制的正确方法是什么?
我的第一个倾向是使用绕行来跟踪菜单弹出窗口并在用于设置菜单时覆盖Screen.MenuFont属性.这似乎太过分了.
vcl ×10
delphi ×9
delphi-xe2 ×3
firemonkey ×2
bitmap ×1
c++builder ×1
delphi-5 ×1
delphi-7 ×1
delphi-xe6 ×1
dpi ×1
file-format ×1
skinning ×1
styles ×1
vcl-styles ×1
windows-10 ×1