我正在将我的代码从XE2移到Delphi XE3,但它应该在两者中编译.我注意到有些单位将'System.Actions'自动添加到USES子句中.这会在返回XE2时导致错误:
F1026找不到文件:'System.Actions.dcu'(单位范围"系统"表示仅限Win64,OSX32,Win32)
我从来没有真正理解单位范围.有没有正确的解决方案来解决这个问题而不是在编译器版本{$ IFDEF}中包装东西?
谢谢
我已经看到这个问题是另一个问题的一部分,所以知道它不能只是我......如果我打开一个新的FireMonkey2 HD应用程序,添加一个TButton和TStringGrid,然后将其添加到click事件的按钮上当我点击按钮时,网格中没有发生!
procedure TForm33.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i:= 0 to 6 do
begin
StringGrid1.Cells[0,i] := 'Row:' + IntToStr(i);
end;
stringgrid1.UpdateColumns;
stringgrid1.SetFocus;
end;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?PS我也尝试过使用TStringGrid.OnGetValue,它仍然不会在StringGrid中显示任何内容.
进一步研究TStringGrid源代码后,C为零,因此Cell永远不会被设置.
procedure TStringGrid.SetValue(Col, Row: Integer; const Value: TValue);
var
C: TColumn;
begin
C := Columns[Col];
if Assigned(C) then
begin
C.UpdateRowCount(RowCount);
C.SetCells(Row, Value);
end;
Run Code Online (Sandbox Code Playgroud)
我似乎在"处女"StringGrid中没有列,所以你如何添加它们?有一个r + w RowCount属性,但ColCount只读...
我有一个表Artist,当前包含四个记录,TSQLQuery其中包含以下语句:
SELECT name
FROM Artist
Run Code Online (Sandbox Code Playgroud)
表格Artist还包含以下记录:
id name
1 Artist 1
2 Artist 2
3 Artist 3
4 Artist 4
Run Code Online (Sandbox Code Playgroud)
目前的记录检索方法:
Query1.Open;
for i := 0 to qArtist.FieldCount -1 do
with cbArtist.ListBox.ListItems[i] do
Text := qArtist.Fields[i].AsString;
Run Code Online (Sandbox Code Playgroud)
以前的记录检索方法:
数据绑定Query1到ComboBox1.
使用"previous"方法,ComboBox1将显示Artist表中的所有预期记录.但是,当我尝试使用"当前"方法时Query1,只选择Artist表中的第一条记录,尽管还有其他三个现有值.我已尝试跨越其他查询的"当前"方法,他们也只返回表的第一个值.
我之所以采用这种新方法,是因为我觉得如果我继续使用"上一个"/数据绑定方法,我的工作非常有限,但除此之外.
那么我该如何解决这个问题呢?即查询问题只选择表中的第一条记录.
我无法找到存储注册表常量的位置.在以下示例中,KEY_WRITE未被识别,也未被识别HKEY_LOCAL_MACHINE.
XE3是否有任何不错的帮助 - "旧的"Delphi帮助更有帮助!
uses System.Win.Registry;
...
...
...
...
reg := TRegistry.Create(KEY_WRITE);
Run Code Online (Sandbox Code Playgroud) 我一直在设置计算机时出现同样的错误,因此它将运行Delphi,我已经在PLATFORM环境变量上设置了用户覆盖,将其转换为win32,但它仍然给出了相同的错误;
[错误错误] PLATFORM变量"HPD"无效.PLATFORM必须是以下之一:"Win32","Win64","Android","iOSSimulator","iOSDevice"或"OSX32".如果PLATFORM由您的系统环境定义,则必须在RAD Studio IDE中覆盖它,或者在命令行上显式传递给MSBuild; 例如,/ p:Platform = Win32.
任何人都可以解释为什么它这样做以及如何修复错误?事实上,我在大学里使用Delphi XE2并且我现在正在使用Delphi XE3,这可能会影响到这一点
这有点是我之前提出的问题的延续.本质上,我试图用一个基本的例子来测试dll /函数,但是我得到' E2010 - 不兼容的类型:AInteger/ADouble和Set '和' E1012 - 常量表达式违反了我的数组上的子范围边界 '错误.我(有点)得到它想说的,但无法弄清楚我应该修复什么.例如:
var
n: Integer;
Ap, Ai: AInteger;
Ax, b: ADouble;
begin
// Initializations
n := 5;
Ap := [0, 2, 5, 9, 10, 12]; <- E2010
Ai := [0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4]; <- E2010
Ax := [2, 3, 3, -1, 4, 4, -3, 1, 2, 2, 6, 1]; <- E2010 and E1012
b := [8, 45, -3, 3, 19]; …Run Code Online (Sandbox Code Playgroud) 我正在从这里 ( http://delphi.about.com/od/internetintranet/l/aa081503a.htm )在 delphi-xe3 中使用 windows API 实现 Ping 功能。
我在使用以下函数时遇到问题。它显示错误不兼容类型 Pansichar 和 Pwidechar。我用 PAnsichar 替换了 Pchar 现在它显示异常“从主机名获取 IP 时出错”。
我正在用本地主机测试它。
请指导什么是正确的转换。
const ADP_IP = '127.0.0.1';
procedure TranslateStringToTInAddr(AIP: string; var AInAddr);
var
phe: PHostEnt;
pac: PChar;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
try
phe := GetHostByName(PChar(AIP));
if Assigned(phe) then
begin
pac := phe^.h_addr_list^;
if Assigned(pac) then
begin
with TIPAddr(AInAddr).S_un_b do begin
s_b1 := Byte(pac[0]);
s_b2 := Byte(pac[1]);
s_b3 := Byte(pac[2]);
s_b4 := Byte(pac[3]);
end;
end
else
begin
raise Exception.Create('Error getting …Run Code Online (Sandbox Code Playgroud) Database: utf8
Collation: utf8_general_ci
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
当我执行我的查询时,所有内容都正确地写入表格,除了Chinese字符和Cyrillic字符只显示在表格字段"???????"中.

是否可以选择更改unidac组件或mysql服务器中的charset?
我正在使用Delphi作为服务器来处理许多不同的请求.所有这些简单的字符串工作正常,但我收到文件时遇到一些麻烦.
所有都是使用Webbroker服务实现的,所以我得到了一个方法
WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
Run Code Online (Sandbox Code Playgroud)
我有一个/ test方法,类型= mtPost.
在动作内部,我执行以下操作:
MimeType := Request.ContentFields.Values['MimeType'];
for i := 0 to Request.Files.Count-1 do begin
// never entered
aFile := Request.Files.Items[i];
ms := TMemoryStream.Create;
aFile.Stream.Position := 0;
ms.CopyFrom(aFile.Stream, aFile.Stream.Size);
ms.SaveToFile(path+aFile.FileName);
ms.free;
end;
Run Code Online (Sandbox Code Playgroud)
显然,我发送的任何东西都不会被识别为文件,但我不知道为什么.用于发布的HTML,如下所示:
<form id="myForm" action="http://localhost:8080/test" method="post" enctype="multipart/form-data">
<input type="file" size="60" name="myfile">
<input type="text" size="10" name="mimetype" value="image/hest">
<input type="submit" value="upload">
</form>
Run Code Online (Sandbox Code Playgroud)
我会告诉任何人告诉我什么可能是错的 - 以及如何解决它.基本上我只需要能够收到1个文件,包括mimetype(因为我需要在以后提供文件时返回它)
我正在Delphi XE3中实现REST服务.实际访问:
var metaData: TDSInvocationMetadata;
metaData.ResponseContent:= output;
Run Code Online (Sandbox Code Playgroud)
生成XML输出.在经过数小时测试各种UTF8到Unicode转换方法后,我仍然无法获得正确的UTF8输出.这是我的例子:
function TServerMethods1.UTF8TEST(Value: string): string;
var metaData: TDSInvocationMetadata;
output: String;
begin
metaData:= GetInvocationMetadata;
output:= '<element><inside name="skúška" /></element>';
metaData.ResponseCode:= 200;
metaData.ResponseContentType:= 'text/xml; charset=utf-8';
metaData.ResponseContent:= utf8encode(output);
end;
Run Code Online (Sandbox Code Playgroud)
从互联网浏览器调用后:http:// localhost:8080/datasnap/rest/TServerMethods1/UTF8TEST我收到了ENCODING ERROR报告.删除特殊字符'úš'并将名称设置为'skuska'后,evrythink似乎没问题.
任何人都可以帮助如何正确获得UTF8编码输出???
delphi ×10
delphi-xe3 ×10
delphi-xe2 ×2
datasnap ×1
firemonkey ×1
indy10 ×1
migration ×1
mysql ×1
registry ×1
rest ×1
sqlite ×1
unidac ×1
utf-8 ×1