小编Tom*_*erg的帖子

如何读取从iDTCPServer发送的内存流中的非拉丁字符?

我有这个代码,插入一些没有拉丁字符,然后从IDTCPserverTo 发送它idTcpclient

LVU := TStringList.Create;
LVU.Add('?????');
try

  if (LVU.Count > 0) then
  begin
    memorylist := TMemoryStream.Create;
    try
      LVU.SaveToStream(memorylist);
      memorylist.Position := 0;
      AContext.Connection.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
      AContext.Connection.IOHandler.LargeStream := true;
      AContext.Connection.IOHandler.Write(memorylist, 0, true);
    finally
      memorylist.Free;
    end;
  end;
finally
  LVU.Free;
end;
Run Code Online (Sandbox Code Playgroud)

但是当客户收到它时,它会将ms里面的文字记为'???????' 可能是什么问题 ?我已经将连接编码设置为utf8

我在Ubuntu上运行这个服务器.当我在Windows上尝试服务器时,我得到了正常的文本.

这就是我在客户端读取流的方式

FMSFROMCALL := TMemoryStream.Create;
FTCP.Socket.LargeStream := True;
FTCP.Socket.ReadStream(FMSFROMCALL, -1, false);
FMSFROMCALL.Position := 0;
Run Code Online (Sandbox Code Playgroud)

delphi indy10 delphi-xe8

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

从Pascal中的函数返回

在Pascal中给出以下函数,这GetChar是另一个函数.GetChar函数以:=运算符返回后如何执行?

function GetNum: char;
begin
   GetNum := Look;
   GetChar;
end;
Run Code Online (Sandbox Code Playgroud)

pascal

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

TObjectList以两个单位出现

我正在使用Delphi XE3.当搜索帮助TObjectList时,我发现它出现在两个单元中:

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Contnrs.TObjectList

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Generics.Collections.TObjectList

在这种情况下,我应该包括使用哪个单元?还有什么是TObjectList和TList之间的区别,我只是在第一个文档中看到TObjectList = class(TList),所以TObjectList与TList相同?

谢谢

delphi delphi-xe3

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

多线程时如何安全地访问和修改数组?

我正在尝试array of record通过多个线程来操纵类型为type的变量,并且不确定执行的方法是否正确,或者是否有更好更好的方法?

我声明了一个boolean变量作为锁,当某个线程想要访问该数组时,它将等待直到锁关闭,然后激活该锁,完成后,将其解锁并让其他人可以访问。

在实现部分中声明了此代码

...
implementation

var Data : array of TData;
var Data_Lock:Boolean=false;

procedure Lock_Data();
begin
   while Data_Lock = True do
       sleep(1);
   Data_Lock := True;
end;

procedure UnLock_Data();
begin
    Data_Lock := False;
end;

procedure ClearAll();
begin
    Lock_Data();
    SetLength( Data, 0 );
    UnLock_Data();
end;
....
Run Code Online (Sandbox Code Playgroud)

整个项目仍未完成。现在看来这可行,但是我对这些东西如何在核心工作一无所知,如果两个线程在同一时间启动,是否会有问题?

delphi multithreading firemonkey

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

带定时器的单独单元的调用过程

我正在尝试编写一个单独的单元供我的主窗体调用,除了使用TTimer.

基本上,该函数应该做的就是主窗体uDataReceived调用BlinkRect(Gateway)rRectControl单元形式处理,并且相应的矩形将在主窗体中闪烁。

以下是代码:

unit uRectControl;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes,
  System.Variants, System.IOUtils, FMX.Graphics, FMX.Types, FMX.Objects;

var
  Blinks: array [0 .. 2] of record Rectangle: TRectangle;
  Timer: TTimer;
end;

type
  TMyClass = Class(TObject)
  private
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  public
    procedure BlinkRect(Gateway: integer);
  end;

procedure AssignRectangles;

implementation

uses uDataReceived;
// Error shows "Cannot resolve unit name 'uDataReceived'

{ TMyClass }

procedure AssignRectangles;
var
  i: integer;
begin
  Blinks[0].Rectangle := TC_Theft_Detection.rect1;
  // Error shows …
Run Code Online (Sandbox Code Playgroud)

delphi timer timertask firemonkey delphi-xe7

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

如何将毫秒日期转换为DateTime?

我这次来自服务器:1475245457452这个日期和时间是:30.9.2016,16:24:17

我怎么能把Delphi中的这个1475245457452转换成一个正确的日期和时间?

delphi delphi-10.1-berlin

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

DBGrid将某个单元格设置为只读

使用dbgrid,我们可以将一些Column设置为只读

DBGrid1.Columns[C].ReadOnly := True;
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我需要将一些单元格(而不是此列中的所有单元格)设置为只读.

DBGrid中

您可以在我的图片中看到,如果我有" No"值,field1我们应该在字段上启用编辑Tx.但如果我有" Yes"值,我们应该将Tx字段设置为ReadOnly.

有可能吗?

delphi dbgrid

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

Delphi 中重用 TMemoryStream 的意外行为

我试图从 TMemoryStream 读取两个不同长度的字符串,但两个流最终长度相同。因此,例如,如果第一个字符串是“abcdefghijkl”,第二个字符串是“wxyz”,那么我获得的第二个字符串的值是“wxyzefghijkl”(新字符串的前四个字符(“wxyz”)紧随其后)由第一个字符串中未被 'wxyz' 替换的剩余字符

我的代码是:-

var
  L : LongInt
  S : string;

...
  msRecInfo.Position := 0;
  msRecInfo.Read(L, SizeOf(L)); // read size of following string ...

  SubStream.Clear;
  SubStream.CopyFrom(msRecInfo, L); // copy next block of data to a second TMemoryStream

  if (L > 0) then S := StreamToString(SubStream);  //convert the stream into a string

  msRecInfo.Read(L, SizeOf(L)); // get size of following string ...
  SubStream.CopyFrom(msRecInfo, L);
  if (L > 0) then S := StreamToString(SubStream);
Run Code Online (Sandbox Code Playgroud)

我已经为此奋斗了几个小时但没有成功。谁能指出我做错了什么?

delphi string tstream

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

我如何安全地使用UPX?

我试图upx使用--lzma压缩方法减少我的应用程序大小.

但是,每当我upx在压缩后使用和扫描我的应用程序时,它都会显示此应用程序有病毒.这是出现的病毒结果

创:Adware.Heur.RmTfWDj6fzli

如果我在使用前扫描应用程序upx,应用程序是完全干净的,没有检测到病毒.

我该如何避免这个问题?

我在这里使用upx 391 http://upx.sourceforge.net/

compression delphi upx delphi-xe7

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