我上课了
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)
这是正确的方法吗?
我的 MacBook 上运行的 PAServer 没有密码。
从我的 Windows/Delphi 然后我尝试设置连接。我输入IP地址和空密码。但是,在测试连接时,出现错误:
TDBXError:远程错误:身份验证管理器拒绝用户凭据。这可能是由于 DS 用户名和密码的组合无效
问题已得到解答(谢谢!)
作为旁注:我不确定如何将其关闭为不是“真正的问题”?:) 文档,至少我读过它,没有说明需要密码。使用密码解决了这个问题。
我是Delphi XE4使用OSX API的新手.所以,我不知道如何将XCode示例转换为Delphi.
任何人都可以给我一个例子,说明如何通过调用OSX API关闭我的MacOS?
更新:我在这里收到了一篇Apple文章:http: //developer.apple.com/library/mac/#qa/qa1134/_index.html
但似乎没有声明API.我尝试使用MacAPI单元并输入函数,编译器说未找到.

有人可以指导我正确的方向吗?我正在尝试使用 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) 如何使用 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 2007迁移到Delphi XE4.在Delphi XE4中将String转换为AnsiString的最佳方法是什么?
将 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) 我在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) 我可以将内存从缓冲区复制到安全数组中,如下所示
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 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)
delphi ×10
delphi-xe4 ×10
firemonkey ×2
ado ×1
connection ×1
delphi-7 ×1
delphi-xe ×1
generics ×1
ios ×1
listview ×1
macos ×1
safearray ×1
shutdown ×1
tlistbox ×1
twebbrowser ×1
urlmon ×1
windows ×1
windows-7 ×1