我注意到以下现象:
使用Delphi 7构建的可执行文件和部分名称(包括"Update")(例如"UpdateMyApp.exe")会导致UAC显示警告,例如"您是否允许程序对您的计算机进行更改".
这是通过简单的hello world应用程序实现的.在资源管理器中显示该文件会显示覆盖在应用程序图标上的屏蔽符号.
只要重命名exe,屏蔽就会消失,应用程序会在没有警告的情况下启动.
如上所述,这只发生在使用Delphi 7构建并在Windows 7上启动的程序(我假设在Vista上相同),但不是在例如WinXP上.
使用Delphi 2007快速检查表明此问题已消失.
有趣......吓人......
除了重命名文件外,我该怎么做才能防止这种情况发生?
我有各种define语句用于处理包含文件中的不同Delphi版本.这个包含文件被"包含"在一个单元中.编译器遵循包含文件中给出的定义,但不包括IDE.这导致在uses子句中添加了某些单元,这些单元可以在那里 - 包含在DEFINE编译器指令中.
因此,如果添加了一个在Delphi XE3之前不可用的单元,那么您将遇到一个大问题,因为如果您让IDE添加该单元并且无法使用没有该单元的预先Delphi XE3版本进行编译.
例如,一个单元上有TActionList的项目.
MYINCLUDE.INC
只有一个定义 {$DEFINE DELPHIXE3}
样本单位可能看起来像
unit Unit1;
{$I MYINCLUDE.INC}
uses
Winapi.Windows,
Winapi.Messages,
System.SysUtils,
System.Variants,
System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
{$IFDEF DELPHIXE3} System.Actions, {$ENDIF}
Vcl.ActnList;
...
Run Code Online (Sandbox Code Playgroud)保存后,IDE添加System.Actions
添加使用列表的结尾,这反过来导致标识符重新声明的编译器错误.如果删除它,IDE将在下次保存时再次添加它.
该错误是否有解决方法?
基督教
我想拥有自己的标题栏,因此我基本上使用一个面板(名称:pnCaption)并删除CreateParams中的原始标题栏.但是在新面板中通过MouseDown-MouseMove移动窗口的能力是个问题.
通常你会使用NCHITTEST消息.但如果鼠标位于面板上(我自己的标题),则不会发出此信号.看代码......
procedure TForm1.CreateParams(var params: TCreateParams);
begin
inherited Createparams(Params);
with Params do
Style := (Style or WS_POPUP) and (not WS_DLGFRAME);
end;
procedure TForm1.WM_NCHitTest(var Msg: TWMNcHitTest);
begin
inherited;
if PtInRect(pnCaption.BoundsRect, ScreenToClient(Point(Msg.XPos, Msg.YPos)))
then Msg.Result := HTCAPTION;
end;
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何提示如何完成这项任务.
基督教
德尔福2007:
每当我切换到新的pas文件时,结构查看器都会以展开的形式显示其类条目.这很烦人!
有没有办法让类项始终显示在压缩树视图中.
克里斯