我在具有256x256位图的TImage上使用Stretched = True.这会按比例缩小1,2,4或8.正如预期的那样,位图上的文字越多,我就越离"1".我注意到,虽然Windows 7资源管理器呈现缩小版本的位图"更柔和",更令人愉悦.是否有可能以这种方式"模糊"TBitmap?
我正在将我的代码升级到Delphi XE(来自Delphi 7),并试图消除所有不必要的库.我已经使用了PNGComponents很多年了,但现在是时候继续使用原生的TImageList和TPNGImage了.
我的部分代码在运行时从链接的资源中加载图像列表.我的工作PNGComponents代码是:
function CreateAndLoadImageList( ASize : integer ) : TPngImageList;
var
PngObject : TPngObject;
I : integer;
begin
Result := TPngImageList.Create( nil );
Result.BeginUpdate;
try
Result.Width := ASize;
Result.Height := ASize;
PngObject := TPngObject.create;
try
For I := 0 to Length( ArtImageNames ) -1 do
begin
PngObject.LoadFromResourceName( hInstance, Format( 'AImg%d_%d', [ASize, I]));
Result.PngImages.Add( False).PngImage := PngObject;
end;
finally
PngObject.Free;
end;
finally
Result.EndUpdate;
end;
end;
Run Code Online (Sandbox Code Playgroud)
在这个问题中使用答案我现在正在尝试下面的代码,其中显示了图像,但是背景为黑色,大概是因为蒙版丢失了.我想我需要一个掩码位图来传递给ImageList_Add,其中'0'但是我对这个东西很差.有谁知道我怎么会这样工作?
function CreateAndLoadImageList( ASize : integer ) : TImageList;
var
PngImage : …Run Code Online (Sandbox Code Playgroud) 我正在做一些构建自动化,并希望从我正在使用Delphi XE编写的应用程序中运行Delphi 7 IDE.
我的Delphi 7 IDE位于:
'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe'
Run Code Online (Sandbox Code Playgroud)
还在做:
ShellExecute( Handle, 'Open', 'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe', '', '', sw_ShowNormal );
Run Code Online (Sandbox Code Playgroud)
最终进入Delphi 7 IDE,但只有在很多丢失的包错误之后.
这样做:
ShellExecute( Handle, 'Open', 'C:\windows\notepad.exe', '', '', sw_ShowNormal );
Run Code Online (Sandbox Code Playgroud)
工程文件打开记事本.
我还有一个名为'Delphi7IDE.bat'的批处理文件,当我点击批处理文件时打开Delphi 7,但是:
ShellExecute( Handle, 'Open', 'C:\sys\batch\Delphi7IDE.bat', '', '', sw_ShowNormal );
Run Code Online (Sandbox Code Playgroud)
产生与上述相同的错误.
我尝试使用我的Delphi 7菜单快捷方式中指定的directoy(即调用:
ShellExecute( Handle, 'Open', 'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe', '', 'C:\Program Files\Borland\Delphi7\Projects\', sw_ShowNormal );"
Run Code Online (Sandbox Code Playgroud)
但这会产生相同的错误(这是可以预料到的,因为上面的批处理文件示例没有固定的目录,单击时运行正常).
有多个错误,但一个示例是 
我做错了什么?
我正在从标准的TTreeView转换树视图以使用TVirtualStringTree.我最后的挑战是实现一个功能,我需要在已知节点图标的顶部绘制"通过/失败"状态指示器.使用TTreeView我使用:
var
R : TRect;
begin
R := Node.DisplayRect( True );
StatusIconList.Draw( TreeView1.Canvas,
R.Left - StatusIconList.Width - 14,
R.Top,
3 {MyOverlayImageIndex} );
Run Code Online (Sandbox Code Playgroud)
结果是基本图标上的红叉,如下所示:

有了TVirtualStringTree,我希望找到更好的方法,或者为所需的叠加图标位置获得更好的已知位置.我正在做:
procedure DrawFailed;
var
R : TRect;
begin
R := CellRect;
StatusIconList.Draw( TargetCanvas,
R.Left - StatusIconList.Width + 49 + Sender.GetNodeLevel( Node ) * 16,
R.Top,
siiFailed );
end;
Run Code Online (Sandbox Code Playgroud)
这是最好的解决方案吗?在没有可怕的节点级别调用的情况下,是否有更好的方法来获取基本图标的左上角?
我希望将上下文菜单添加到TPageControl的(仅)选项卡,与选项卡区域不同(例如,像Delphi一样提供文件/页面选项)。我知道我可以使用TRzPageControl做到这一点,但是请问如何使用TPageControl做到呢?
现在我的代码变得越来越大,找到关键代码位置的策略更为重要.现在有了更快的PC,'搜索''在文件中查找'快速有效 - 如果您使用隐式单元,"搜索项目中的所有文件"通常不起作用.我一直在努力理解正则表达式,但可能他们会让我做一个搜索:
一个或两个
一个和两个
所有搜索都必须在同一行.
这对于简单的关键字搜索来说是一个很大的改进.在Delphi的搜索中这可能吗?我正在使用XE,XE2和D7(有时候).
我看到JCL和JVCL现在在GitHub中,我之前使用内置安装程序在XE3下安装了它们.我还使用了Embarcadero页面上发布的XE4'special' .
有人设法让JCL和JVCL与XE5合作吗?
我想使用Deplhi TWebBrowser在表单中显示“新闻”页面。新闻页面是一个简单的HTML页面,我们会不时将其上传到我们的网站,并且可能会通过各种工具输出。显示屏很好,但是我想在我的应用程序中知道自上次显示以来它是否已更改,因此理想情况下,我想获取其修改日期/时间或大小/校验和。精度并不重要,并且理想情况下不应依赖可能会失败的属性,因为使用了“简单”工具来编辑HTML文件,例如NotePad。在网上检查有几个文档修改过的java调用,但是我真的不知道从哪里开始。我浏览了Delphi的Winapi中的许多调用。WinInet单元,我看到我可以使用HTTP来获取文件以对其进行检查,但这似乎就像用大锤将核桃开裂一样。我也看不到任何文件日期时间功能,这使我觉得我缺少明显的东西。我正在使用Delphi XE5。我应该朝哪个方向看?感谢您的指导。
我一直在调用MSBuild来构建我的VCL项目很长一段时间,并且想要添加一些android项目.我认为同样的调用对于针对Android而不是Windows的Delphi XE8项目起作用太过分了,但它似乎确实接近了.我的输出如下.正如你所看到的,它似乎在整个编译过程中得到了解决方案,但却与清单一起做了一些事情.
任何人都可以建议我可以解决的问题吗?谢谢.
09/08/2015 09:03:29 Building C:\Art_soft\Code\PRT-MS1\Delphi\Libraries\Multiplatform\Delphi projects\FMXCommonUnitTests_Android.dproj
Microsoft (R) Build Engine Version 3.5.30729.5420
[Microsoft .NET Framework, Version 2.0.50727.5485]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Build started 08/09/2015 09:03:29.
Project "C:\Art_soft\Code\PRT-MS1\Delphi\Libraries\Multiplatform\Delphi projects\FMXCommonUnitTests_Android.dproj" on node 0 (Build target(s)).
Creating directory "c:\scratch\msbuild".
BuildClassesDex:
Merged dex A (520 defs/562.4KiB) with dex B (68 defs/120.5KiB). Result is 588 defs/833.3KiB. Took 0.3s
Merged dex A (588 defs/833.3KiB) with dex B (3 defs/2.1KiB). Result is 591 defs/1078.6KiB. Took 0.1s
Merged dex A (591 defs/1078.6KiB) …Run Code Online (Sandbox Code Playgroud) 特别是因为现在有许多新版本的Delphi,简单地选择一个"少数"Delphi版本的项目并重新创建*.dproj文件会很有用.项目dproj文件中有很多,现在无法解释的行为,尤其是移动目标,通常可以通过"重新开始"来解决.原则上这很容易 - 创建一个所需类型的新"空"项目(VCL或多设备项目),然后将旧文件添加到项目树视图中的新项目中.这适用于普通单位和表单,但似乎与帧相关,因为项目无法识别丢帧,就像在IDE中使用'New ... Delphi..Frame'一样.自从EMB推出FireMonkey以来,我一直都是这样,并且有修复.我的问题是解决这种"框架失明"的最简单方法.这些解决方案似乎有效(但很麻烦):
更改:
Run Code Online (Sandbox Code Playgroud)<DCCReference Include="x\y\z\myFrame.pas"> <Form>frameMy</Form> <DesignClass>TFrame</DesignClass> </DCCReference>
至:
Run Code Online (Sandbox Code Playgroud)<DCCReference Include="x\y\z\myFrame.pas"> <Form>frameMy</Form> **<FormType>dfm</FormType>** <DesignClass>TFrame</DesignClass> </DCCReference>
有没有人有更好的解决方案?我错过了什么吗?
delphi ×10
android ×1
bitmap ×1
blur ×1
click ×1
contextmenu ×1
delphi-xe5 ×1
frame ×1
icons ×1
image ×1
jvcl ×1
msbuild ×1
overlay ×1
png ×1
regex ×1
search ×1
shellexecute ×1
stretched ×1
tbitmap ×1
tdatetime ×1
timagelist ×1
tpagecontrol ×1
twebbrowser ×1