标签: delphi-xe4

如何在delphi XE和XE4中初始化对象

我上课了

type
  TLoadOption = class
  private
    FAutoSearch: Boolean;
  public
    property AutoSearch: Boolean read FAutoSearch write FAutoSearch;
  end;
Run Code Online (Sandbox Code Playgroud)

在其中一个函数中,我在堆栈中创建类的对象

procedure MyView.InitializeForm(const aMsg: MyMsg);
//---------------------------------------------------------------------------
var
  Options: TLoadOption;
begin

  if aMsg.OptionalObject <> nil then
   Options := aMsg.OptionalObject as TLoadOption;

  if Assigned(Options) and Options.AutoSearch then
    DoRefresh;
end;
Run Code Online (Sandbox Code Playgroud)

我没有在aMsg中传递任何内容,所以理想情况下没有设置选项.

在Delphi XE中默认选项设置为nil,因此不会调用此DoRefresh但是当我在Delpi XE4中执行相同的代码时,选项会使用一些随机值进行初始化,并且AutoSearch始终变为true,这会导致调用此DoRefresh函数,这是不需要.

我想知道是否有任何编译器选项将默认值设置为未初始化的变量.我现在唯一的解决方案就是这样

 procedure MyView.InitializeForm(const aMsg: MyMsg);
    //---------------------------------------------------------------------------
    var
      Options: TLoadOption;
    begin
      Options := nil;

      if aMsg.OptionalObject <> nil then
       Options := aMsg.OptionalObject as TLoadOption;

      if Assigned(Options) and Options.AutoSearch then
        DoRefresh;
    end;
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

delphi delphi-xe delphi-xe4

6
推荐指数
3
解决办法
554
查看次数

Delphi XE4 iOS 无法连接到 PAServer

我的 MacBook 上运行的 PAServer 没有密码。

从我的 Windows/Delphi 然后我尝试设置连接。我输入IP地址和空密码。但是,在测试连接时,出现错误:

TDBXError:远程错误:身份验证管理器拒绝用户凭据。这可能是由于 DS 用户名和密码的组合无效

问题已得到解答(谢谢!)

作为旁注:我不确定如何将其关闭为不是“真正的问题”?:) 文档,至少我读过它,没有说明需要密码。使用密码解决了这个问题。

delphi connection ios delphi-xe4

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

Delphi XE4关闭OSX

我是Delphi XE4使用OSX API的新手.所以,我不知道如何将XCode示例转换为Delphi.

任何人都可以给我一个例子,说明如何通过调用OSX API关闭我的MacOS?

更新:我在这里收到了一篇Apple文章:http: //developer.apple.com/library/mac/#qa/qa1134/_index.html

但似乎没有声明API.我尝试使用MacAPI单元并输入函数,编译器说未找到.

delphi macos shutdown firemonkey delphi-xe4

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

使用给定的示例创建特定的自定义 TListBoxItem 以及 fontColor 属性的问题

在此输入图像描述
有人可以指导我正确的方向吗?我正在尝试使用 Delphi XE4 为 iOS 应用程序创建自定义 ListboxItem。我的目标输出将类似于上面的照片,因为我目前被困在这里(下图)。

在此输入图像描述

我已成功动态生成 ListBoxItem 并插入 TLabel 对象,但是,我无法将 TLabel 的“fontColor”属性更改为所需的颜色。我可以编码

TLabel.Fontcolor := ClaBlue;

但颜色又恢复为黑色。我希望它看起来就像我给出的示例一样。我在更改插入的 TLabel 的字体颜色以及向每个列表框项添加渐变背景时遇到问题。我不知道是否需要使用“样式编辑器”,甚至不知道如何使用。是的,我已经查看了 Delphi/RAD Studio 中包含的示例,下面是我当前的编码:

while XMLNode<>nil do begin 

HeaderText := 'Part#: ' + XMLNode.ChildNodes['PARTNUM'].Text + Chr(9) + XMLNode.ChildNodes['VENDPARTNUM'].Text;

DetailText := '$' + XMLNode.ChildNodes['MD1_SELL_PRICE'].Text + ' /' + XMLNode.ChildNodes['UM1_PRICE_NAME'].Text + sLineBreak + 'Min: ' + XMLNode.ChildNodes['md2_from.MD2_MIN_QTY'].text + Chr(9) + 'On Hand: ' + XMLNode.ChildNodes['md2_from.MD2_ON_HAND_QTY'].text + Chr(9) + Label1.text ;
Form6.ListBox1.Items.Add(DetailText); 
ListBoxItem:=Form6.ListBox1.ListItems[Form6.ListBox1.Items.Count-1]; 
ListBoxItem.StyleLookup:='listboxitembottomdetail';
ListBoxItem.WordWrap:=True; 
ListBoxItem.Font.Size:= 8;
ListBoxItem.Height := 120; 
TestLabel := TLabel.Create(self); 
TestLabel.Text …
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey tlistbox delphi-xe4

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

如何使用 IHTTPNegotiate 添加额外的 http 标头?

如何使用 IHTTPNegotiate 向请求添加额外的标头?我添加了接口,但函数BeginningTransaction & OnResponse永远不会被调用。

TNameSpaceHandler = class(TComObject, IInternetProtocol, IHttpNegotiate)  
...
    function BeginningTransaction(szURL, szHeaders: LPCWSTR; dwReserved: DWORD;
        out szAdditionalHeaders: LPWSTR): HResult; stdcall;
    function OnResponse(dwResponseCode: DWORD; szResponseHeaders, szRequestHeaders: LPCWSTR;
        out szAdditionalRequestHeaders: LPWSTR): HResult; stdcall;
...
end;
Run Code Online (Sandbox Code Playgroud)

delphi webbrowser-control urlmon twebbrowser delphi-xe4

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

如何将Unicode字符串转换为AnsiString?

试图将项目从Delphi 2007迁移到Delphi XE4.在Delphi XE4中将String转换为AnsiString的最佳方法是什么?

delphi delphi-xe4

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

虚拟模式下的 TListView 限制为 100,000,000 个项目?

将 ListView 中的 Items.Count 设置为超过 100,000,000 的任何数字与将计数设置为 0 的结果相同 - 这是底层 Windows 控件的限制,还是特定于 Delphi 的?我预计这个限制是大约 20 亿,因为 Delphi XE4 的文档说这个限制是(有符号的)DWORD 的大小(即:2^31 - 1)。

简单示例:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    procedure ListView1Data(Sender: TObject; Item: TListItem);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Assumes ListView1.OwnerData := True;
  ListView1.Items.Count := …
Run Code Online (Sandbox Code Playgroud)

windows delphi listview windows-7 delphi-xe4

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

TAdoQuery.ParseSql在xe4中不起作用

我在Delphi 7中有一个项目,我TAdoQuery.ParseSql();用来加载参数.现在我在XE4中编译它,参数类型有时是错误的.这真的是ftInteger创造了ftSmallint.我该怎么做才能解决这个问题?我的数据库是SQL Server 2008 R2.

表定义:

CREATE TABLE [dbo].[tblTest]( 
   [sysId] [int] IDENTITY(1,1) NOT NULL,  
   [Code] [nvarchar](50) NOT NULL, 
   [Name] [nvarchar](500) NOT NULL, 
CONSTRAINT [PK_tblTest] 
PRIMARY KEY CLUSTERED ( [sysId] ASC )
   WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
          ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) 
   ON [PRIMARY] )
ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

样本数据:

INSERT INTO tblTest ( Code, Name ) VALUES ( 'a1', 'name1' )
Run Code Online (Sandbox Code Playgroud)

德尔福代码:

ADOQuery.SQL.Text := 'SELECT * FROM tblTest …
Run Code Online (Sandbox Code Playgroud)

delphi ado delphi-7 delphi-xe4

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

我可以从缓冲区(pByte)和大小创建VarArray OleVariant而无需复制吗?

我可以将内存从缓冲区复制到安全数组中,如下所示

  function GetVarArrayFromBuffer(ABuffer : pByte; ASizeInBytes: Cardinal) : OleVariant;
  var
    LVarArrayPtr: Pointer;     
  begin
    Result := VarArrayCreate([0, ASizeInBytes - 1], varByte);
    LVarArrayPtr := VarArrayLock(Result);
    try
      Move(ABuffer^, LVarArrayPtr^, ASizeInBytes);
    finally
      VarArrayUnLock(Result);
    end;
  end;
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法直接将我的指针和大小传递到一个varArray类型OleVariant而不复制内存?

[编辑]

我可以看到里面的数组OleVariant是a SAFEARRAY(定义为PVarArray = ^TVarArray),所以看起来应该有一种方法可以通过填充a中的值TVarArray并设置VType和中的VArray值来实现OleVariant.

delphi safearray delphi-xe4

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

如何在泛型类中声明枚举类型的集合类型

我在Delphi XE4中遇到了一些奇怪的行为.

我不能set在泛型类中声明一个类型,其中序数类型在同一个类中声明.

例如:

TTest<T> = class(TObject)
type
  TEnumType  = (eOne, eTwo, eThree);
  TEnumTypes = set of TEnumType;
end;
Run Code Online (Sandbox Code Playgroud)

以上不编译.编译器发出错误" E2001:Ordinal type required ".

一个非泛型的类

TTest = class(TObject)
type
  TEnumType  = (eOne, eTwo, eThree);
  TEnumTypes = set of TEnumType;
end;
Run Code Online (Sandbox Code Playgroud)

编译.

要使泛型类成功编译,必须在类外声明序数类型:

TEnumType  = (eOne, eTwo, eThree);
TTest<T> = class(TObject)
type
  TEnumTypes = set of TEnumType;
end;
Run Code Online (Sandbox Code Playgroud)
  1. 这种行为是否被视为错误?如果是,是否已在更高版本中修复?
  2. 有没有人有另一种解决方法?我想在类中声明类型,因为它们仅在此类的私有部分中使用.

delphi generics delphi-xe4

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