我有这个代码,插入一些没有拉丁字符,然后从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) 在Pascal中给出以下函数,这GetChar是另一个函数.GetChar函数以:=运算符返回后如何执行?
function GetNum: char;
begin
GetNum := Look;
GetChar;
end;
Run Code Online (Sandbox Code Playgroud) 我正在使用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相同?
谢谢
我正在尝试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)
整个项目仍未完成。现在看来这可行,但是我对这些东西如何在核心工作一无所知,如果两个线程在同一时间启动,是否会有问题?
我正在尝试编写一个单独的单元供我的主窗体调用,除了使用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) 我这次来自服务器:1475245457452这个日期和时间是:30.9.2016,16:24:17
我怎么能把Delphi中的这个1475245457452转换成一个正确的日期和时间?
使用dbgrid,我们可以将一些Column设置为只读
DBGrid1.Columns[C].ReadOnly := True;
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我需要将一些单元格(而不是此列中的所有单元格)设置为只读.
您可以在我的图片中看到,如果我有" No"值,field1我们应该在字段上启用编辑Tx.但如果我有" Yes"值,我们应该将Tx字段设置为ReadOnly.
有可能吗?
我试图从 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)
我已经为此奋斗了几个小时但没有成功。谁能指出我做错了什么?
我试图upx使用--lzma压缩方法减少我的应用程序大小.
但是,每当我upx在压缩后使用和扫描我的应用程序时,它都会显示此应用程序有病毒.这是出现的病毒结果
创:Adware.Heur.RmTfWDj6fzli
如果我在使用前扫描应用程序upx,应用程序是完全干净的,没有检测到病毒.
我该如何避免这个问题?
我在这里使用upx 391 http://upx.sourceforge.net/
delphi ×8
delphi-xe7 ×2
firemonkey ×2
compression ×1
dbgrid ×1
delphi-xe3 ×1
delphi-xe8 ×1
indy10 ×1
pascal ×1
string ×1
timer ×1
timertask ×1
tstream ×1
upx ×1