小编Bri*_*ost的帖子

是否可以在Delphi中平滑缩放的TBitmap?

我在具有256x256位图的TImage上使用Stretched = True.这会按比例缩小1,2,4或8.正如预期的那样,位图上的文字越多,我就越离"1".我注意到,虽然Windows 7资源管理器呈现缩小版本的位图"更柔和",更令人愉悦.是否有可能以这种方式"模糊"TBitmap?

delphi image blur tbitmap stretched

5
推荐指数
2
解决办法
5204
查看次数

使用Delphi XE从资源加载时如何保留PNGImage掩码

我正在将我的代码升级到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 png bitmap timagelist

5
推荐指数
1
解决办法
1843
查看次数

如何从Delphi XE编写的EXE文件中启动Delphi 7?

我正在做一些构建自动化,并希望从我正在使用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)

但这会产生相同的错误(这是可以预料到的,因为上面的批处理文件示例没有固定的目录,单击时运行正常).

有多个错误,但一个示例是 这个

我做错了什么?

delphi shellexecute

5
推荐指数
1
解决办法
5760
查看次数

如何最好地在基本Delphi TVirtualTreeView节点图标上呈现叠加图标

我正在从标准的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)

这是最好的解决方案吗?在没有可怕的节点级别调用的情况下,是否有更好的方法来获取基本图标的左上角?

delphi icons overlay virtualtreeview tvirtualstringtree

5
推荐指数
1
解决办法
1238
查看次数

将上下文菜单添加到TPageControl的选项卡

我希望将上下文菜单添加到TPageControl的(仅)选项卡,与选项卡区域不同(例如,像Delphi一样提供文件/页面选项)。我知道我可以使用TRzPageControl做到这一点,但是请问如何使用TPageControl做到呢?

delphi contextmenu click tpagecontrol

5
推荐指数
1
解决办法
2293
查看次数

如何使用'在文件中查找?在Delphi中执行布尔'AND'搜索?

现在我的代码变得越来越大,找到关键代码位置的策略更为重要.现在有了更快的PC,'搜索''在文件中查找'快速有效 - 如果您使用隐式单元,"搜索项目中的所有文件"通常不起作用.我一直在努力理解正则表达式,但可能他们会让我做一个搜索:

一个或两个

一个和两个

所有搜索都必须在同一行.

这对于简单的关键字搜索来说是一个很大的改进.在Delphi的搜索中这可能吗?我正在使用XE,XE2和D7(有时候).

regex delphi search

5
推荐指数
1
解决办法
207
查看次数

是否有建议的路径为Delphi XE5安装JEDI和JVCL?

我看到JCL和JVCL现在在GitHub中,我之前使用内置安装程序在XE3下安装了它们.我还使用了Embarcadero页面上发布的XE4'special' .

有人设法让JCL和JVCL与XE5合作吗?

delphi jvcl jedi-code-library delphi-xe5

5
推荐指数
1
解决办法
5790
查看次数

自上次显示以来,检测Delphi TWebBrowser网页已更改的最佳方法是什么?

我想使用Deplhi TWebBrowser在表单中显示“新闻”页面。新闻页面是一个简单的HTML页面,我们会不时将其上传到我们的网站,并且可能会通过各种工具输出。显示屏很好,但是我想在我的应用程序中知道自上次显示以来它是否已更改,因此理想情况下,我想获取其修改日期/时间或大小/校验和。精度并不重要,并且理想情况下不应依赖可能会失败的属性,因为使用了“简单”工具来编辑HTML文件,例如NotePad。在网上检查有几个文档修改过的java调用,但是我真的不知道从哪里开始。我浏览了Delphi的Winapi中的许多调用。WinInet单元,我看到我可以使用HTTP来获取文件以对其进行检查,但这似乎就像用大锤将核桃开裂一样。我也看不到任何文件日期时间功能,这使我觉得我缺少明显的东西。我正在使用Delphi XE5。我应该朝哪个方向看?感谢您的指导。

delphi tdatetime twebbrowser

5
推荐指数
1
解决办法
753
查看次数

使用MSBuild构建Delphi Android项目的问题

我一直在调用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 msbuild android

5
推荐指数
1
解决办法
356
查看次数

让Delphi接受新添加的文件作为框架并对其进行处理的最简单方法是什么?

特别是因为现在有许多新版本的Delphi,简单地选择一个"少数"Delphi版本的项目并重新创建*.dproj文件会很有用.项目dproj文件中有很多,现在无法解释的行为,尤其是移动目标,通常可以通过"重新开始"来解决.原则上这很容易 - 创建一个所需类型的新"空"项目(VCL或多设备项目),然后将旧文件添加到项目树视图中的新项目中.这适用于普通单位和表单,但似乎与帧相关,因为项目无法识别丢帧,就像在IDE中使用'New ... Delphi..Frame'一样.自从EMB推出FireMonkey以来,我一直都是这样,并且有修复.我的问题是解决这种"框架失明"的最简单方法.这些解决方案似乎有效(但很麻烦):

  1. 在新项目中,按照预期创建"新建""框架",并将其重命名为现有的"旧"文件.从磁盘中删除新的空框架并将其替换为旧文件(在必要时更改名称).凌乱 - 很容易忘记保持组件名称的轨道.
  2. 以正常方式拖放框架单元,它们将被视为表单,您将从需要这些框架的表单中获得错误.关闭项目,然后使用此处的建议手动编辑dproj文件

更改:

<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>
Run Code Online (Sandbox Code Playgroud)

有没有人有更好的解决方案?我错过了什么吗?

delphi frame

5
推荐指数
0
解决办法
178
查看次数