小编sMa*_*Mah的帖子

将C结构迁移到Delphi记录

我想知道如何将C struct转换为Delphi记录

以下代码在C中.我想转换为Delphi.

typedef struct
  {
  Uint16        value1[32];
  Uint16        value2[22];
  Uint16        value3[8];    
  }MY_STRUCT_1;
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c delphi struct record data-structures

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

带有资源文件的错误 EXE 应用程序图标

我正在探索 (.Res) 资源文件,并在 delphi.about.com 站点上找到了一个有用的教程。

教程链接:http : //delphi.about.com/od/objectpascalide/l/aa113099a.htm

下载测试项目:http : //delphi.about.com/library/aboutres.zip

我发现 Windows 资源管理器中的应用程序图标不同。申请表上的图标正确显示(参见图 2)。Windows 任务栏上的图标正确显示(参见图 3)。

但是当我浏览它时,Windows 资源管理器中的图标是错误的(请参阅图 1)。它不是来自 Res 文件的 MAINICON。

知道它有什么问题吗?我需要配置什么才能使用 .EXE 文件获得正确的应用程序图标?

  • Delphi XE3 环境
  • Windows 7 环境
  • 您可以从上面的链接下载示例项目

图片编号 (1)

Windows 资源管理器中的 EXE 应用程序图标错误

图片编号 (2)

应用程序图标正确显示在任务栏上

图片编号 (3)

应用程序图标正确显示在表单上

提前致谢

delphi resources icons

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

Delphi内存拷贝与记录到另一个记录

我遇到逻辑问题.我不知道如何将记录复制到Delphi中的另一条记录.

TypeA = record
  value1 : word;
  value2 : word;
  value3 : word;
  end;

TypeB = record
  b1 : byte;
  b2 : byte;    
  end;
Run Code Online (Sandbox Code Playgroud)

我有两个记录TypeA和TypeB.例如,我发现TypeA记录中的数据属于TypeB记录.注意:TypeA具有更长的数据长度.

问题:如何复制TypeA内存并将其放在TypeB记录中?

CopyMemory(@TypeA, @TypeB, Length(TypeB))
Run Code Online (Sandbox Code Playgroud)

当我尝试CopyMemory并得到一个错误(无法比较的类型).

PS:我不想像下面那样复制或分配它.

TypeB.b1:= TypeA.value1 && $ FF;

TypeA和TypeB只是示例记录.大多数情况下,记录TypeA和TypeB可能包含多个记录,并且分配表单TypeA并分配给TypeB记录将更加困难.

提前致谢

----加法问题:

有没有办法将Delphi记录复制到Byte数组以及如何?如果有,

  • TypeA记录到字节数组
  • 字节数组到B类

这个逻辑会起作用吗?

memory delphi copy record

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

Delphi中的TCPclient.connected问题-Indy

我在Delphi中使用Indy的IdTCPclient.connected函数遇到问题。我正在使用Indy10和Delphi2010环境。我的问题是每次我检查与IdTCPclient.connected的TCP连接时,它都会引发这些错误EidSocketErrorEidReadTimeOut的异常。有什么办法可以断开并重新连接?(如重置连接)。

注意:我设置了TCPClient.ReTimeout:= 30000;

重置连接的实现代码如下。

if IdTCPclient.connected then
  begin
  IdTCPclient.IOHandler.InputBuffer.Clear;
  IdTCPclient.Disconnect;
  end;
sleep(1000);
try
  IdTCPclient.connect;
  except
    on E: Exception do 
      MessageDlg('Connecting Error: '+E.Message, mtError, [mbOk], 0);
  end;
Run Code Online (Sandbox Code Playgroud)

但有一点,我遇到了异常,它根本无法连接。我不确定自己在做什么错。

我应该这样做吗?

  • 首先断开连接
  • 清除输入缓冲区
  • 销毁TCPclient
  • 重新创建新的TCPclient
  • 然后重新连接

如果是这样,有人可以为我提供一种正确执行方法的方法吗?

另外,在我的编码中还有另一个功能可以重新连接TCP。这也给了我例外。我向TCP发送消息之前先检查连接。如果没有连接,我将重新连接五次。

result := IdTCPclient.connected
if not result then
  begin
  for k:=0 to 4 do
    beign
    sleep(1000);
    try
      TCPclient.connect;
      except
        on E: Exception do 
          MessageDlg('Connecting Error: '+E.Message, mtError, [mbOk], 0);
      end
    result := TCPclient.connected;
    if result then break;
    end; …
Run Code Online (Sandbox Code Playgroud)

delphi indy tcpclient delphi-2010 indy10

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

处理版本号-版本控制

我正在研究程序与一些记录的数据文件之间的接口。我的程序将加载数据文件并将其存储到数据库中。在记录的数据文件中,其格式结构包含其他程序(生成该文件)的不同版本号

处理版本号的最佳方法是什么?

Major_Minor_Build_Revision

12.03.04.142

我将在程序中使用它稍后加载指定版本(例如2.03.04.142)的所有数据

程式设计

在Delphi中,我们可以创建一条记录并处理版本号:

TVersion = Record
   Major : integer;
   Minor : integer;
   Build : integer;
   Revision : integer;
end;
Run Code Online (Sandbox Code Playgroud)

还是将其转换为Integer并将其存储会更好?如果是进行转换的最佳方法是什么?

数据库

在SQL数据库中,同样的事情,我们可以为[Major],[Minor],[Build],[Revision]创建每列作为整数来存储。

或者,如果使用版本转换,则只能在SQL [Version]中使用一列。

哪一种是最佳使用方式?还是有更好的方法来处理它?

提前致谢。

sql sql-server versioning delphi

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