在Delphi的对象检查器中,我在属性名称(ConnectionName*)后面看到一个星号:

它是如何实现的,最重要的是:它是什么意思?
在TMySQLConnection的源代码中,我没有看到任何特别的东西,所以我想这是一些设计时间的事情?
更新
它与TSQLConnection的内容有关.
要重现,请将下面的代码粘贴到表单上.
经过一些游戏后,我得出结论,当Params属性被编辑时,星号会出现,因此它不再具有默认值.对我来说,如何实现这一目标仍然是个谜.
object SQLConnection1: TSQLConnection
ConnectionName = 'MySQLConnection'
DriverName = 'MySQL'
LoginPrompt = False
Params.Strings = (
'DriverUnit=Data.DBXMySQL'
'DriverPackageLoader=TDBXDynalinkDriverLoader,DbxCommonDriver190.' +
'bpl'
'DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borla' +
'nd.Data.DbxCommonDriver,Version=19.0.0.0,Culture=neutral,PublicK' +
'eyToken=91d62ebb5b0d1b1b'
'MetaDataPackageLoader=TDBXMySqlMetaDataCommandFactory,DbxMySQLDr' +
'iver190.bpl'
'MetaDataAssemblyLoader=Borland.Data.TDBXMySqlMetaDataCommandFact' +
'ory,Borland.Data.DbxMySQLDriver,Version=19.0.0.0,Culture=neutral' +
',PublicKeyToken=91d62ebb5b0d1b1b'
'GetDriverFunc=getSQLDriverMYSQL'
'LibraryName=dbxmys.dll'
'LibraryNameOsx=libsqlmys.dylib'
'VendorLib=LIBMYSQL.dll'
'VendorLibWin64=libmysql.dll'
'VendorLibOsx=libmysqlclient.dylib'
'MaxBlobSize=-1'
'DriverName=MySQL'
'HostName='
'Database='
'User_Name=xxx'
'Password='
'ServerCharSet='
'BlobSize=-1'
'ErrorResourceFile='
'LocaleCode=0000'
'Compressed=True'
'Encrypted=False'
'ConnectTimeout=60')
Left = 48
Top = 24
end
Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi XE7 IDE并且它经常挂起,开始消耗许多系统资源并且在例外情况下失败:
第三个例外的原因是什么?
我该怎么做才能让它稳定下来?
在Delphi 7中,每当我控制+单击一个函数/过程时,它就会将我带到该函数/过程.但它在Delphi XE中不起作用 - 至少在所有功能上都没有.我在ExtUtils.pas中有一个名为Associate的函数.函数被正确编译,因此编译器可以找到ExtUtils.pas(当然,ExtUtils被添加到Uses子句中,它的文件夹被添加到'Library path'中).但是,当我控制+单击功能或单位名称时,它不会带我到那里.
有任何解决这个问题的方法吗?
UPDATE1:另外,Control +单击一个函数(在当前单元中声明)不会将光标移动到声明函数的INTERFACE部分.
UPDATE2:
我临时将ExtUtils单元放在项目的文件夹中,现在它可以工作了.因此,Control + Click本身可以工作,但似乎IDE在查找单元时遇到问题,即使它的文件夹存在于库路径和浏览路径中.
类似的报告:
http
:
//webcache.googleusercontent.com http://webcache.googleusercontent.com http://cc.embarcadero.com/Item/28269
这里有一份报告(见下面的答案)
新测试:
我已完全卸载Delphi(并手动删除文件和注册表剩余部分).然后重新安装.没有安装除CodeSite之外的其他工具,甚至没有安装数据库.然后我创建了一个新项目.它包含一个按钮.当我单击该按钮时,它会运行TestMe过程,该过程在名为TestUnit.Pas的外部PAS文件中定义.我在"库路径"和"浏览路径"中添加了此库的路径.但控制+点击TestMe程序仍然无法正常工作!如果我将鼠标悬停在TestMe过程上,则弹出窗口显示"在TestUnit中声明",其中"TestUnit"字是蓝色链接.如果我点击它我会听到Windows系统声音,但IDE不会把我带到那里(到设备).
TestMe程序是这样的:
procedure TestMe;
begin
Beep(800, 500);
end;
Run Code Online (Sandbox Code Playgroud)
如果我控制+单击Beep程序,它会转到Windows.pas.所以,这是有效的.如果您考虑到不同的测试,请告诉我.
更新:
现在它的工作原理!没有任何明显的原因!我只是打开和关闭并编译项目.但除了这两个之外,我对Delphi没有任何更改:AutoSave选项 - >编辑器文件和项目选项.
更新:
这不可能!
所以,现在我可以在控制+点击TestMe程序时访问TestUnit.pas文件.因此,我将原始PAS文件(ExtUtils.pas)移动到TestUnit.pas所在的同一文件夹中,该文件不想在我的初始测试(Delphi重新安装之前)中工作.猜猜看:我可以打开(通过控制+点击)TestUnit.pas,但不能打开ExtUtils.pas !!!!
德尔福行为如此奇怪和不一致!
更新:
我编辑了ExtUtils.pas,现在我无法打开AGAIN TestUnit.pas.Ken White不会让我说德尔福可能有错误.所以我不能将'bug'和'Delphi'一起使用.有人可以把这些话放在一起吗?
更新:
我完全删除了对ExtUtils.pas的任何引用 - 所以我将项目恢复到了它的工作点(使用TestUnit).但现在这个bug仍然存在.即使它在使用TestUnit之前几秒钟,它现在再也无法工作了.
更新:
现在我意识到一件重要的事情:在我的源代码中(在测试项目中)我有一行可编译的代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
TestMe;
end;
Run Code Online (Sandbox Code Playgroud)
此代码不显示蓝点 - 因为它不会被编译.在该计划有效的几分钟内,我看到了蓝点.我还排除了"AutoSave选项 - >编辑器文件和项目选项"作为此问题的可能原因.
更新:
我找到了解决问题的方法......几分钟:我将项目和库移动到另一个文件夹中(任何位置都可以).控件+单击将工作一段时间.如果我将文件放回原始文件夹,它甚至可以工作.因此,似乎Delphi保留了某些文件的某种缓存.只要缓存被破坏并且它保持缓存,控制+点击就赢了;工作.但是当我移动文件时,它必须重新创建该缓存,因此它将一直有效,直到问题重新出现并存储在缓存中.
如果修改了RC文件,Delphi将再次编译它.如果RC文件具有引用已更改文件的RCDATA或BITMAP声明,则Delphi不会再次将.RC文件重新编译为.RES,直到通过删除.RES文件或执行"触摸"(修改文件时间戳)强制它为止在顶级.RC文件.
这是TEST.RC文件的示例:
SAMPLE RCDATA "File.txt"
Run Code Online (Sandbox Code Playgroud)
当修改TEST.RC时,这将导致重新编译,当"File.txt"被修改时,但是Delphi不会在"编译"上重新编译资源.我不愿意只使用"Build",因为它将我的时间从几秒钟增加到几分钟.
有没有人让Delphi与.RC文本文件和依赖项一起正常工作?虽然有些人添加资源而从不更改它们,但我已经开始使用.RC文件来处理我可能经常更改的内容,例如.RC文件中RCDATA部分中的二进制或文本数据.
请注意,尝试在预构建或后构建中放置"删除.res"步骤似乎打破了Delphi IDE /编译器.我可以在IDE外部进行外部排序(在运行msbuild之前总是删除某些.res文件),但在IDE中,Delphi并没有给我太多选择.
有没有人有解决方案?(我在Delphi 2007中遇到了这个问题,但是任何适用于任何版本的Delphi从2007到XE3的解决方案都是受欢迎的.)
即使构建配置设置为"Debug"且优化为False,我也会因"优化"而得到"Variable ForAllUsers无法访问".所以,我无法调试我的程序.
为什么我这样做?
按"运行"按钮时会运行哪个构建?
我怎么能看到
procedure Test(ForAllUsers: boolean);
VAR
FName, Path1, Path2: string;
RootKey: HKEY;
begin
Result:= FALSE;
TRY
if ForAllUsers
then
begin
RootKey:= HKEY_CLASSES_ROOT;
Path1:= '';
Path2:= '';
end
else
begin
RootKey:= HKEY_CURRENT_USER; <----- Break point here
Path1:= '\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\';
Path2:= '\Software\Classes\';
end;
Run Code Online (Sandbox Code Playgroud)
... 结束;
更新:
自我发布此问题以来只有几分钟,它已经两次投票并且已经两次加星标.似乎这是一个非常常见的问题.接受David提供的答案.
我有一个用Delphi 2010制作的软件,它需要在两个不同的部门中使用,它们共享相同的数据和相同的UI,除了隐藏/添加按钮,表单和网格列之类的一些更改.因此,需要具有相同应用程序的两个版本.
在应用程序启动时无法提示用户选择我必须使用单独的EXE的部门.
在Delphi 2010或XE3(将在以后升级)中执行此操作的最佳方法(概念)是什么?是否可以使用不同的exe名称进行编译?
当我在 IDE 中安装一个包并在项目中使用它时,每次编译我的项目时都会重新编译它(替换 DCU)。
我无法想象这是故意的 - RTL 和 VCL 也不是每次都编译,是吗?
我对工具> 选项> 环境选项> Delphi 选项> 库中的路径进行了一些操作,但没有成功。
我发现了一种结构,它允许编译我的项目,而无需重新编译在不同路径中具有 DCU 和 PAS 的包,但在此结构中,Delphi 根本无法从代码编辑器(例如按住 SHIFT 单击)中找到源代码,因此这不是一个选择。
我的Delphi开始使CPU过热.一旦我开始使用Delphi,它就会为自己带来一个完整的核心,冷却器开始真正起作用.有什么办法可以解决这个问题吗?
我知道Stack Overflow上的一些人会开始释放热量,如果我一起使用'Delphi'和'bug'这两个词,但这是一个非常讨厌的bug,因为它会浪费很多能量(特别是在电池上时)由于过热会使计算机过早老化.
更新:
仅当活动选项卡是项目(dproj)文件时,才会出现此问题.一旦切换到另一个文件(pas),CPU就会回到0%-1%.它发生在任何dproj文件中,但仅当IDE在屏幕上可见时才会发生(非最小化到任务栏).所以这显然是一个渲染错误.
更新:
看起来Warren P找到了一种产生类似bug的方法.看他的回答.
更新:
我已经看到问题也出现在一个非常大的PAS单元但是在我让Delphi IDE窗口在后台(未使用)3-5分钟后出现最大CPU利用率.我可以通过最小化窗口到任务栏或切换到另一个IDE选项卡来解决它.
考虑以下命令行参数
"alfa" "beta" "4"
Run Code Online (Sandbox Code Playgroud)
当我为我正在工作的项目指定Run> Parameters ...时,应用程序在Process Explorer上显示为命令行:
"c:\myapp\myapp.exe" "alfa" "beta" "4"
Run Code Online (Sandbox Code Playgroud)
ParamCount显示4个参数.但是当我从启动器应用程序(执行访问控制)启动相同的可执行文件时,Process Explorer显示:
"alfa" "beta" "4"
Run Code Online (Sandbox Code Playgroud)
ParamCount显示3个参数.命令行是从启动器应用程序中提取的.理论上它可以工作,因为从启动器启动应用程序工作完美无缺.从IDE启动时,它尝试在"4"上面执行StrToInt ,但只检索"beta"参数.
来自启动器应用程序的示例代码:
var
StartupInfo: TSTARTUPINFO;
ProcessInfo: PROCESS_INFORMATION;
CurrentDirPath: String;
begin
Result := 0;
ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
StartupInfo.cb := SizeOf(StartupInfo);
DirCorrente := ExtractFilePath(sExe);
if CreateProcess(PChar(sExe), PChar(sParam), nil, nil, true,
NORMAL_PRIORITY_CLASS, nil, PChar(CurrentDirPath),
StartupInfo, ProcessInfo) then
Run Code Online (Sandbox Code Playgroud)
sParam的内容是上面的命令行参数,sExe是可执行路径.为什么会这样?
注意:我已经设计了如何将命令行参数解释更改为此边缘情况的健壮 - 这里的重点是为什么会发生这种情况.
我的 Delphi 上安装了许多第三方组件、软件包和扩展。其中一些出现在启动屏幕上,但不是全部。
前一阵子我安装了某个包和IDE扩展,但现在找不到了。所以这就是为什么我想知道是否有一个地方或一种方式可以看到我安装的所有第三方东西。
我知道如果您从 GetIt 包管理器安装某些东西,那就很简单。我可以在 GetIt 中查看所有已安装的,但如果我在 GetIt 之外安装它怎么办?
所以我的问题...我如何/在哪里可以看到我在 Delphi 上安装的所有内容?
我正在维护一个使用Delphi 5 Professional German构建的旧Delphi 5程序.
问题是所创建的可执行文件的所有对话框和错误消息都以德语显示,即使在位置设置为美国或英国的英语Windows上也是如此.
我是否需要英文版的Delphi 5 Pro或者是否有配置选项/编译器开关/选项来更改"输出语言"?
我不是在谈论IDE语言,我已经了解到我可以通过删除Delphi安装目录中的所有*.DE文件将其更改回英语.
例:



更新:根据我在源目录中查找德语消息的评论 - 我立即找到了几个文件:
Source/Rtl/Sys/comconst.pas
Source/Rtl/Sys/sysconst.pas
Source/Rtl/Sys/comconst.pas
Source/Vcl/bdeconst.pas
Source/Vcl/comstrs.pas
Source/Vcl/consts.pas
Source/Vcl/dbconsts.pas
Source/Vcl/ib.pas
Source/Vcl/oleconst.pas
Run Code Online (Sandbox Code Playgroud)
我希望有一个更简单的方法.不要以为我走这条路......
我想在运行时确定是否在IDE中特别忽略了异常类.原因是:当从IDE运行应用程序时,我可能会收到一个异常,我知道原因,但现在不想处理.所以我选中"忽略这些例外"框并单击继续.
我可能忘记稍后禁用此设置,因此我想在应用程序启动时添加代码以警告我列表中的异常Tools/Options/Debugger Options/CodeGear Debuggers/Language Exceptions被忽略.
另一种方法是可以在不触发IDE中的异常的情况下确定异常类状态(即是否忽略)的代码片段.
delphi ×13
delphi-ide ×13
delphi-xe ×3
dcc32 ×1
delphi-2007 ×1
delphi-2010 ×1
delphi-5 ×1
delphi-xe2 ×1
delphi-xe3 ×1
delphi-xe4 ×1
delphi-xe5 ×1
delphi-xe7 ×1