标签: delphi-xe4

如何在当前单位的使用子句中添加单位

我刚开始探索实时模板的功能(使用Delphi XE4),并遇到了一个问题.我创建的一些模板创建的代码需要将某些单元添加到我的uses子句才能运行.

如果尚未包含使用子句,如何让我的模板自动将所需单位添加到uses子句中?我最初的猜测是,为了做到这一点,我需要制作一个自定义脚本引擎,并且我发现了一些似乎包含足够信息的文章,我可以毫不费力地创建脚本引擎.但是,我不知道如何让脚本引擎实际执行我想要的任务.我假设我需要使用Open Tools Api,但我不知道该怎么做.

如果我走在正确的轨道上,有人可以分享一些有助于我继续下去的信息吗?否则,有人能指出我正确的方向吗?

delphi delphi-xe4

7
推荐指数
1
解决办法
444
查看次数

Delphi XE4"找不到类"但编译得很好

我公司主要产品的GUI是在90年代后期用Delphi编写的,并且已经更新到Delphi 2007.我正在与一个小组合作将Delphi 2007更新为XE4.

我们仍然使用ADL VCL中的许多组件(类似于DevExpress,但现在已经不存在),但还没有安装整个软件包.相反,我们需要的文件位于与我们的项目文件夹分开的文件夹中,并且具有指定这些文件的路径:工具 - 选项 - 库 - 浏览路径和项目 - 选项 - 搜索路径

当我打开main时,我收到错误:"找不到TADLAboutBox.忽略错误并继续?"

定义"ADLAboutBox"的单元"ADLAbout"在main的uses子句中声明.而且,我们的项目编译得很好.

我怎样才能摆脱这些消息?可能有什么问题?

非常感谢您的建议.

ide delphi delphi-xe4

7
推荐指数
2
解决办法
2727
查看次数

如何在没有白色背景的TCanvas上绘制文本?

我正在为我的项目编写简单的图像编辑器.

在那里你可以看到编辑器中的图像:

在此输入图像描述

在TImage之上,我放置了几个TLabel.

在预览中,您可以看到在图像上绘制TLabels的结果:

在此输入图像描述

为了绘制TLabels,我写了这段代码:

procedure TPrintForm.BuildPreview(aSsignTo: TImage);
    var
      Img: TBitmap;
      i: Integer;
    begin
      Img := TBitmap.Create;
      try
        Img.Assign(fSrcBitmap);
        for i := 0 to Count - 1 do
        begin
          Img.Canvas.Font := Items[i].Text.Font;
          Img.Canvas.TextOut(Items[i].Text.BoundsRect.TopLeft.X - Items[i].Text.Font.Size,
            Items[i].Text.BoundsRect.TopLeft.Y - Items[i].Text.Height -
            Items[i].Text.Font.Size, Items[i].Text.Caption);
        end;
        aSsignTo.Picture.Assign(Img);
      finally
        FreeAndNil(Img);
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

结果我得到了图像,其中绘制的TLabel在文本下具有白色背景.没有它如何绘制TLabel?

delphi delphi-xe4

7
推荐指数
2
解决办法
7568
查看次数

Delphi XE4和Xamarin Monotouch如何区分iOS?

我很好奇地发现Delphi XE4现在以iOS为目标.Monotouch和Delphi XE-4以iOS平台为目标的主要区别是什么?

如果我理解正确,Xamarin Monotouch通过为iPhone Cocoa Touch库提供C#包装来瞄准iOS开发.您仍然使用XCode Interface Builder来生成用户界面,因此您需要了解iOS概念,例如UIViews或Outlets和Actions,它们与使用C#开发WinForms或WPF完全不同.

Delphi-XE4方法的工作方式是否相同?它是否为iPhone库提供Delphi包装器?

此外,从界面构建的角度来看,它的界面构建器是否与XCode界面生成器类似,以及相同的本机控件和概念?Delphi开发人员针对iOS而不是Windows的目标有何不同?

delphi xamarin.ios ios delphi-xe4

7
推荐指数
1
解决办法
1201
查看次数

为什么TIdMailBox.UnseenMsgs属性返回0值?

我试图通过使用TIdIMAP4Indy 10.6.0.4975 来获取我的IMAP邮箱的未读邮件数.

问题是,UnseenMsgs即使访问的邮箱中有一些未读邮件,该属性也会返回0.这是我使用的代码:

procedure TForm1.FormClick(Sender: TObject);
var
  TotalMsgs: Integer;
  UnseenMsgs: Integer;
begin
  IdIMAP41.Connect(True);
  IdIMAP41.SelectMailBox('Inbox');

  TotalMsgs := IdIMAP41.MailBox.TotalMsgs; // returns correct value
  UnseenMsgs := IdIMAP41.MailBox.UnseenMsgs; // <- returns always 0

  IdIMAP41.Disconnect(False);
end;
Run Code Online (Sandbox Code Playgroud)

为什么TIdMailBox.UnseenMsgs属性返回0而不是正确的数字?

delphi indy delphi-xe4

7
推荐指数
1
解决办法
444
查看次数

异步TADOQuery的OnFetchComplete未与主线程同步

当使用TADOQuerywith [eoAsyncFetchNonBlocking]和附加到OnFetchComplete事件时,我发现它OnFetchComplete没有在主线程中执行(在XE4和XE8中测试).我认为这是一个错误*,因为我们大多数人都会在这些类型的事件中在UI中工作.我认为这是大型项目中一些问题的根源,我需要一个解决方法.

[编辑]*在阅读ADO文档后,我知道承认这可能不是一个错误,但多线程问题仍然存在.

是否有一种优雅的方法来强制在此处理程序中使用代码在主线程上执行?我不想使用计时器(但如果这是我将采取的唯一解决方案).或者,是否存在ADO同步对象,我可以在此等待或向ADO提供商发送其他形式的信令?

这是一个简化的示例,显示了问题.我的项目更复杂,工厂创建和填充这些数据集,但这里类似于将数据集附加到网格内部ADOQuery1FetchComplete.

unit Unit4;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.StdCtrls;

type
  TForm4 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ADOQuery1: TADOQuery;
    ADOConnection1: TADOConnection;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ADOQuery1FetchComplete(DataSet: TCustomADODataSet;
      const Error: Error; var EventStatus: TEventStatus);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    FMainThreadID : DWORD;
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm} …
Run Code Online (Sandbox Code Playgroud)

delphi asynchronous tadoquery delphi-xe4 delphi-xe8

7
推荐指数
1
解决办法
1348
查看次数

XE4 iOS应用程序:无法安装软件包.(e8008015)

我参与了XE4测试版,尽管存在无法生成.ipa的问题(Delphi中的错误信息"Invalid ipa选项"),该应用程序总是实际部署到设备上,但从未在Mac中创建过-dir.

如果我将paclient命令复制并粘贴到命令提示符中,它就可以了.我的质量控制问题已经解决,但事实并非如此.

现在使用XE4,使用与测试版相同的设置,我在部署到设备时遇到此错误:

Unable to launch process on '10.0.0.60' using the parameters from the 'Delphi_XE4' profile.
The following error was returned: 'Unable to install package. (e8008015)'
Run Code Online (Sandbox Code Playgroud)

该应用程序部署到XCode模拟器确定,因此连接详细信息是正确的.在部署期间,我可以看到PAServer接受Mac上的命令,但无论我使用Debug还是Ad-hoc构建类型,我都会收到此错误.

我检查了XCode中的设备日志,发现以下内容:

Apr 29 08:48:37 Js-iPhone-4S installd[54] <Error>: 0x2ffed000 handle_install: Install of "/var/mobile/Media/PublicStaging/iOS_Location.app" requested by mobile_installation_proxy
Apr 29 08:48:37 Js-iPhone-4S installd[54] <Error>: 0x2ffed000 MobileInstallationInstall_Server: Installing app iOS_Location
Apr 29 08:48:37 Js-iPhone-4S installd[54] <Error>: Apr 29 08:48:37 SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Apr 29 08:48:38 Js-iPhone-4S installd[54] <Error>: 0x2ffed000 verify_signer_identity: MISValidateSignatureAndCopyInfo failed for /var/tmp/install_staging.XRYC1t/iOS_Location.app/iOS_Location: 0xe8008015 …
Run Code Online (Sandbox Code Playgroud)

delphi ios firemonkey delphi-xe4

6
推荐指数
1
解决办法
7159
查看次数

如何使用VCL.Styles获取表单背景颜色

即使使用vcl样式,某些组件也会使用Color属性设置绘制其颜色.因此,当使用Metro深色样式(接近黑色)并将组件颜色设置为clWindow时,组件颜色与样式不匹配.有没有办法在使用vcl.style时获取表单背景颜色,以便可以将组件的颜色属性设置为匹配表单样式的背景颜色?

可以通过在样式设计器中加载样式来获取颜色,但我想在运行时获取颜色值.

delphi vcl-styles delphi-xe4

6
推荐指数
1
解决办法
3353
查看次数

德尔福最大的错误或限制.常数整数值?

const
  minDriveFreeSpace: Int64 = 1024*1024*1024*99;
Run Code Online (Sandbox Code Playgroud)

var
  minDriveFreeSpace: Int64;
begin
  minDriveFreeSpace := 1024*1024*1024*99;
Run Code Online (Sandbox Code Playgroud)

会发出:

[dcc32 Error] DataStoreLocator.pas(92): E2099 Overflow in conversion or arithmetic operation
Run Code Online (Sandbox Code Playgroud)

这是Delphi最大的错误还是限制.常数整数值?

delphi delphi-xe4

6
推荐指数
1
解决办法
964
查看次数

获取Delphi IDE中对象的引用

以下是我对此问题的回答:

我可以更改监视列表中字符串的显示格式吗?

事实证明,在D7和XE3之间的某个时刻,IDE的Watch Window的实现从使用TListView变为TVirtualStringTree.

虽然我发布了一个更新我的答案,通过忽略VST并从剪贴板获取监视值来使用XE4,我仍然希望能够从VST获得监视值,如果可以的话.一旦我引用了VST,我想我知道怎么做,但问题是我尝试获取VST失败了.

以下是我在自定义包中使用的代码的MCVE.希望它的作用是不言自明的.问题是块中的代码

  if WatchWindow.Components[i] is TVirtualStringTree then begin
    [...]
  end;
Run Code Online (Sandbox Code Playgroud)

从不执行,DESOPITE出现在Memo1中的类名"TVirtualStringTree".显然,具有该类名的组件未通过"是"测试.我猜测的原因是编译到IDE中的TVirtualTreeView是一个与我正在使用的版本不同的版本,v.5.3.0,这是我能找到的最接近XE4的前身.

所以,我的问题是,这是可能的解释,我能做些什么吗?我怀疑是否有人可以通过帽子来繁荣用于XE4的TVirtualStringTree版本,这可能会解决我的问题.

type
  TOtaMenuForm = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    WatchWindow : TForm;
    VST : TVirtualStringTree;
  end;

procedure TOtaMenuForm.FormCreate(Sender: TObject);
var
  i : Integer;
  S : String;
begin

  WatchWindow := Nil;
  VST := Nil;

  // Iterate the IDE's forms to find the Watch Window
  for i := 0 to Screen.FormCount - 1 do begin
    S := Screen.Forms[i].Name;
    if CompareText(S, 'WatchWindow') = 0 then begin …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe4

6
推荐指数
1
解决办法
184
查看次数