标签: delphi-xe4

Indy Tidhttp 发布 XML 文件的正确编码是什么?

我注意到我在使用 Indy Client 的应用程序中的 XML 文件有无效字符(我实际上使用了 IdHttp 的默认参数)

这是我的代码:

  ts := TStringList.Create;
  try
    ts.Add('XML=' + AXMLDoc.XML.Text));
    HTTPString := IdHTTPClient.Post('http://' + FHost + ':' + IntToStr(FPort) + FHttpRoot, ts);
  finally
    ts.Free;
  end;
Run Code Online (Sandbox Code Playgroud)

我的 XML 文件是 UTF-8 编码的。

我必须做什么才能在我的服务器上获得良好的编码(我也使用 Indy 作为服务器)?

delphi txmldocument idhttp delphi-xe2 delphi-xe4

0
推荐指数
1
解决办法
4027
查看次数

安装 Delphi XE4 时在 Delphi XE2 中丢失了 TeeChart / TChart

安装 Delphi XE4 消灭了(至少是同时发生的)我所有的 Delphi XE2 组件。从那以后我再次​​安装了软件包,大多数似乎又可以正常工作了。

但是,我对与 Delphi 捆绑在一起的 TChart /TeeChart 有一些问题。我试图添加我能找到的“teexxx”包,但显然没有一个下摆是设计时包。

然后我尝试下载“基于更新 4 的 TeeChart 标准版适用于 Delphi XE2、C++Builder XE2 和 RAD Studio XE2 注册用户”......似乎安装得很好没有错误,但组件在 Delphi 中仍然不可用集成开发环境。

无论如何,我想我一定是在尝试安装错误的 teexxx 包,所以,有谁知道我仍然尝试在 Delphi XE2 IDE 中添加哪个包?

delphi teechart delphi-xe2 delphi-xe4

0
推荐指数
1
解决办法
2737
查看次数

如何在不隐藏cxGrid的内部dbnavigator的情况下禁用它?

在此输入图像描述

我已经在上面显示了导航器TcxGrid.我想在不隐藏它的情况下禁用整个导航器.我怎样才能做到这一点?

delphi devexpress tcxgrid delphi-xe4

0
推荐指数
1
解决办法
740
查看次数

如何在没有Synchronize的情况下使用Delphi版本(Pre Delphi 2010)更新GUI控件

我有一些使用Delphi 2010和XE4构建的应用程序,它们在一个线程中使用Synchronize.我认为在Delphi 2010中将Synchronize引入了Delphi.我的线程运行得很好,所以这不是问题.

我的问题是:有没有办法在Delphi 2010之前与Delphi版本"同步"或者以不同的方式询问它,如何在没有Synchronize的情况下更新这些早期版本的Delphi中的GUI控件?

下面显示的代码是实际代码的子集,以减少此帖子的长度.

type
  { A TThread descendent for loading Images from a folder }
  TFolderLoadingThread = class(TThread)
  private
    { Private declarations }
    AspectRatio: double;
  protected
    { Protected declarations }
    procedure Execute; override;
  public
    { Public declarations }
    constructor Create(CreateSuspended: Boolean);
  end;

procedure TFolderLoadingThread.Execute;
{ Load images ImageEnView in the thread. }
begin
  inherited;
  { Free the thread onTerminate }
  FreeOnTerminate := True;
  if not Terminated then
  begin
    { Set the Progressbar.Max Value }
    **Synchronize**(
      procedure
      begin …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading vcl delphi-2010 delphi-xe4

0
推荐指数
1
解决办法
1932
查看次数

Delphi XE4 调用 DLL 函数时发生灾难性故障

我在以下场景中收到“灾难性故障”错误。

type
TGetDoubleValue = function (var ID: Integer): Double; safecall;
....
....
var
GetDoubleValue: TGetDoubleValue;
.....
.....
LibHandle := LoadLibrary('GetDoubleValue.dll');
@GetDoubleValue := GetProcAddress(LibHandle, 'getDoubleValue');
if not (@GetDoubleValue = nil) then
begin
  myDouble := GetDoubleValue(ID);
end
else
  RaiseLastOSError;
Run Code Online (Sandbox Code Playgroud)

myDouble := GetDoubleValue(ID);调用此函数时,我在“”行上收到错误。

delphi delphi-xe4

0
推荐指数
1
解决办法
847
查看次数

与Delphi XE4一起发售的Indy多大了?

我在64位XE4中发送SMTP消息遇到了一些问题,而且它似乎发生在Indy代码的深处.

这是XE4附带的标准Indy代码,但是当我查看每个文件顶部的标题时,它们似乎自2005年以来一直没有更新!显然这里有一些棘手的问题.

XE4附带的Indy版本多大了,从那时起Win64兼容性有了显着的改进?

delphi indy delphi-xe4

0
推荐指数
1
解决办法
196
查看次数

MessageDlg,带有Delphi FireMonkey中的自定义按钮标题

使用VCL,您可以使用CreateMessageDialog自定义按钮标题生成消息对话框.

随着FMX CreateMessageDialog似乎不再存在(自XE3以来).

除了从头开始重建消息对话框之外,有没有办法使用FireMonkey自定义按钮标题?

我希望能够调用这里描述的函数:

MessageDlg(
    'Really quit application ?', mtWarning,
    [ButtonInfo(mbNo, 'Do&n''t save'), 
     ButtonInfo(mbCancel, '&Cancel'),
     ButtonInfo(mbYes,'&Save')],
    mbYes
  );
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey delphi-xe4

0
推荐指数
1
解决办法
5151
查看次数

Delphi中的泛型并返回对tlist <class>的引用

我仍然使用Delphi XE4(我使用多个Delphi编译器的最新编译器),并且需要一个特定的解决方法,因为他们在此版本中完全隐藏了TBasicAction中的FClients.我在设置启用/禁用时连接/断开客户端运行时(以避免使用~100 + actions和ui元素闪烁)因此XE4的此解决方法:

这是我天真的尝试,只是简单地回到了这个领域.

  TmscBasicActionCrack = class(TBasicAction)
  end;
{$IFDEF mymsDELPHIXE4}
  TmscBasicActionHelper = class helper for TBasicAction
  public
    function Helper_Get_Private_FClients: TList<System.Classes.TBasicActionLink>;
  end;
{$ENDIF}

{$IFDEF mymsDELPHIXE4}
//------------------------------------------------------------------------------
function TmscBasicActionHelper.Helper_Get_Private_FClients: TList<System.Classes.TBasicActionLink>;
begin
  Result := Self.FClients;
end;
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误

E2003未声明的标识符:TList <>

我必须承认,自从我最初听说稳定性问题+我需要保持与Lazarus/FreePascal的兼容性时,我永远不会使用Delphi中的泛型.

我知道最近的版本Delphi再次改变了类助手,但我现在最感兴趣的是让它与Delphi XE4一起使用

delphi generics delphi-xe4

0
推荐指数
1
解决办法
404
查看次数

Manifest和GetVersionEx

我目前正在尝试在我的example.exe程序旁边添加一个example.manifest文件,因此GetVersionEx会返回正确的信息.

然而 - 它似乎没有任何差别 - 我仍然只有6.2

这是我打算用于所有32/64位Windows可执行文件的清单文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"
      />
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"
        />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!-- Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application>
  </compatibility>
</assembly>
Run Code Online (Sandbox Code Playgroud)

delphi manifest delphi-xe4 windows-10

0
推荐指数
2
解决办法
225
查看次数

使用TIdFTP进行Delphi连接测试

在我的程序中,我实际上使用此代码:

if IdFTP1.Connect = True then
 begin
  //makes some stuff
 end
else
 begin
  ShowMessage('you got the move like jagger.');
 end;
Run Code Online (Sandbox Code Playgroud)

如果我没有连接,我会看到一个错误

套接字错误#11001

主机未找到

为了避免这种情况,我认为我可以使用您在上面看到的代码,但我在使用时遇到错误IdFTP1.Connect = True.

我能做什么?

delphi indy indy10 delphi-xe4

-1
推荐指数
1
解决办法
2636
查看次数

Delphi - 查询运行缓慢

我的查询,运行大约需要7秒才能完成应该的操作.但是,由于它插入了大约30条记录,我认为它太慢了.现在,要么我运行的查询写得不好,要么实际需要这么多时间.但那会很奇怪.底层数据库是SQLite,查询如下所示:

procedure TForm1.cxButton1Click(Sender: TObject);
begin
with UNIquery2 do begin
  Close;
  SQL.Clear;
UNIQuery1.First;
while Uniquery1.EOF = false do begin
SQL.Text:= 'INSERT INTO MYTABLE (FIELD1,FIELD2,FIELD3,FIELD4) VALUES (:a1,:a2,:a3,:a4)';
         ParamByName('a1').asString := AdvOfficeStatusBar1.Panels[0].Text;
         ParamByName('a2').asString := UniTable1.FieldByName('FIELD2').asString;
         ParamByName('a3').asString := Uniquery1.FieldByName(',FIELD3').asString;
         ParamByName('a4').Value := Uniquery1.FieldByName('FIELD4').Value;//boolean field true/false
         Uniquery1.Next;
         ExecSQL;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)

那么有人可以告诉我这是否正常或我错过了什么?所有字段都是文本,除了'a4',它是布尔值(true/false).

答案,修改(基于来自LS_dev的提取):

procedure TForm1.cxButton1Click(Sender: TObject);
begin
    with UNIquery2 do begin
        Close;
        SQL.Clear;
        SQL.Add('INSERT INTO MYTABLE (FIELD1,FIELD2,FIELD3,FIELD4) VALUES (:a1,:a2,:a3,:a4)');
        SQL.Prepare;
        UniTransaction.AddConnection(UniConnection2);
        UniTransaction.StartTransaction;
try
        UNIQuery1.First;
        while Uniquery1.EOF = false do begin
            Params[0].asString := AdvOfficeStatusBar1.Panels[0].Text;
            Params[1].asString := UniTable1.FieldByName('FIELD2').asString;
            Params[2].asString …
Run Code Online (Sandbox Code Playgroud)

sql delphi sqlite unidac delphi-xe4

-1
推荐指数
1
解决办法
1921
查看次数

如何使用dupError处理StringList中的重复项

这是尝试将文件名添加到字符串列表.如果向列表中添加重复的文件名,则引发异常并从列表中删除原始文件.我从帮助文件中了解到,如果找到重复文件,将返回现有条目的索引,然后可以使用该索引删除现有条目.

此代码的问题是,当找到重复时,不执行EListError异常中的代码.

我的问题是,如果存在重复的文件名,你如何从列表中删除原始文件名?实质上,如果在添加副本时检测到重复,我想从列表中删除原始文件.不幸的是,当将重复文件添加到列表时,异常陷阱中的代码不会执行.

{ Create a list of files to delete }
iListOfImagesToDelete := TStringList.Create;
try
  { Get a ListOfFiles in each collection }
  iCollectionList := TStringList.Create;
  try
    iListOfImagesToDelete.Duplicates := dupError;
    iListOfImagesToDelete.Sorted := True;
    { Add filenames to a stringlist with Duplicates set to dupError and Sorted set to True }
    iFileCount := iCollectionList.Count;
    for j := 0 to iFileCount - 1 do
      begin
        iFilename := iCollectionList[j];
        if FileExists(iFilename) then
        begin
           try
             iFileIndex := iListOfImagesToDelete.Add(iFilename);
           except
           { file exists in …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe4

-2
推荐指数
1
解决办法
944
查看次数

Delphi从文本文件加载名称/值对

想要将名称值对加载到TStringList中.

有一个包含数据的文本文件:

a=ant
a=animal
b=bob
d=darn
Run Code Online (Sandbox Code Playgroud)

加载它的功能:

LoadData(argPath: string): TStringList;
var
  data: TStringList;
begin
  data := TStringList.Create(true);
  data.Delimiter := '=';
  try
    data.LoadFromFile(argPath);
  except on E : Exception do
  begin
    Application.MessageBox(PWideChar(E.Message), 
       'Unable to Load Data', MB_OK or MB_ICONERROR);
    Application.Terminate;
  end;
  end;
  Result := data;
end;
Run Code Online (Sandbox Code Playgroud)

结果目前是:

a=ant
a=animal
b=bob
d=darn
Run Code Online (Sandbox Code Playgroud)

希望结果的字符串是:

ant
animal
bob
darn
Run Code Online (Sandbox Code Playgroud)

和结果的TObjects

a
a
b
d
Run Code Online (Sandbox Code Playgroud)

在此之后,我希望能够在TComboBox中显示它.

delphi tstringlist delphi-xe4

-2
推荐指数
1
解决办法
1447
查看次数