小编asd*_*-tm的帖子

无法传递类型化的char数组来打开char数组?

在Delphi 7或Delphi XE下编译时,下面的代码会抱怨

[DCC Error] Project1.dpr(25): E2010 Incompatible types: 'array of Char' and 'TAChar'
Run Code Online (Sandbox Code Playgroud)

根据Rudy的文章,应该允许将类型数组传递给open数组?

此外,为什么它不抱怨'布尔'数组和'TABoolean'?

非常感谢您的帮助!

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TAChar = array of Char;
  TABoolean = array of Boolean;

procedure Test1(const CharArr: array of Char);
begin
end;

procedure Test2(const BoolArr: array of Boolean);
begin
end;

var
  Arr1: TAChar;
  Arr2: TABoolean;
begin
  try
    Test1(Arr1);  //  <------- Does not compile in Delphi 7 & XE
    Test2(Arr2);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7 delphi-xe open-array-parameters

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

如何调整为WINx86编译的代码为WINx64编译

我正在使用Component Tag(NativeInt)值的赋值将其添加到字节集中.该程序在为WIN32编译时工作正常,但不为WINx64编译.(错误2001所需的序数类型)这是一个MCVE:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes;
  var 
  S:set of byte;
  C:TComponent;

begin
   C:=TComponent.Create(nil);
   C.Tag:=1;
   s:=[C.Tag];
   C.Free;
 end.
Run Code Online (Sandbox Code Playgroud)

如何调整代码使其适合WINx64编译?

delphi win64 delphi-xe5

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

如何避免TDateTime数据舍入

我写FMX柱和小区类别TGrid将包含TCalendarEditTTimeEdit在每个细胞中的情况.一切正常,除了正确处理这些子控件中所做的更改.

type
  TFMTValue<T> = record
    FieldValue: T;
    Modified: boolean;
    Appended: boolean;
    Deleted: boolean;
  end;

  TDateTimeCell = class(TStyledControl)
    private
      FDate_Time: TFMTValue<TDateTime>;
      procedure SetDateTime(const Value: TFMTValue<TDateTime>);
      function GetDateTime: TFMTValue<TDateTime>;
    protected
      procedure SetData(const Value: TValue); override;
    public
      property Date_Time: TFMTValue<TDateTime> read GetDateTime write SetDateTime;
    ...   
   end;
...     
  function TDateTimeCell.GetDateTime: TFMTValue<TDateTime>;
    begin
      FDate_Time.Modified := (FDate_Time.Modified) or
        (FDate_Time.FieldValue <> FCalendarEdit.Date +
         + FTimeEdit.Time);
      FDate_Time.FieldValue := FCalendarEdit.Date + FTimeEdit.Time;
      Result := FDate_Time;
    end;

    procedure TDateTimeCell.SetData(const Value: TValue);
    begin
      Date_Time := …
Run Code Online (Sandbox Code Playgroud)

delphi datetime firemonkey

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

ggplot - 在折线图的 x 轴上有组

我有一个基本数据框,显示每组的 RMSE。

data <- data.frame(
  RMSE = c(9.77, 9.6, 9.42, 7.98, 7.78, 7.63, 7.66, 7.65, 7.61, 6.63, 6.58, 6.43),
  Model = c("LR - LHS", "LR - LHS", "LR - LHS", "XGB - Reg", "XGB - Reg", "XGB - Reg",
            "RF - LHS", "RF - LHS", "RF - LHS", "XGB - LHS", "XGB - LHS", "XGB - LHS")
)
Run Code Online (Sandbox Code Playgroud)

我想创建 RMSE 线图,但在 x 轴上需要模型 1、2 和 3 以及其下方的组。像这样的东西:

纸上图表

我得到的是 4 x 值,3 个点,一个在下一个,而不是彼此相邻(有 12 个值)。我尝试的另一个图给出了很好的结果,但它是 4 条不同的断开线。

r graph ggplot2

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

为什么循环变量的值不存储在动态创建的AnonymousThread中

我对如何在动态创建中存储唯一标识符有一些学术兴趣TThread.

我创建这样的东西:

procedure TForm1.Button1Click(Sender: TObject);
var thrn:word;
begin
for thrn := 0 to 5 do//<--- this is a loop variable that should give the unique numbers
  TThread.CreateAnonymousThread(
    procedure()
    var
      i: longint;
      r: double;
      thrns:string;
    begin
      thrns:=inttostr(thrn);//in this thread? variable I try to store the ID as string
      repeat
        for i := 0 to 100000000 do
        begin
          r := random(high(i));//this loop gives some dummy job 
          r := sqr(r);         //to the thread to slow it down
        end;
        TThread.Synchronize(nil,
          procedure()
          begin …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading tthread

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

动态数组的BlockRead和BlockWrite

我正在尝试组织保存和加载大小不一的数据.因此,保存文件需要存储多个(未知且每次不同数量)的动态数组.

这个MCVE中出现错误:

procedure TAnnMainF.Button6Click(Sender: TObject);
var
  f: file;
  ari, aro: array of double;
  i, Count: word;
begin
  SetLength(aro, random(5) + 1);
  for i := 0 to High(aro) do
    aro[i] := random(2001) / 2000 - 1;

  AssignFile(f, 'c:\delme\1.txt');
  ReWrite(f);
  Count := Length(aro);
  BlockWrite(f, Count, SizeOf(word));
  BlockWrite(f, aro[0], SizeOf(double) * Count);
  CloseFile(f);

  Reset(f);
  BlockRead(f, Count, SizeOf(word));
  BlockRead(f, ari[0], SizeOf(double) * Count);
  CloseFile(f);
end;
Run Code Online (Sandbox Code Playgroud)

此代码导致I/O错误998.我试图声明类型 TDoubleArray = array of Double;ari在BlockRead中作为参数传递.SetLength(ari, Count)在我调用BlockRead之前我也尝试过没有任何成功.

这个问题答案对我没有帮助.代码读取Count正确,但在数组加载时引发异常.我究竟做错了什么?

delphi file-io dynamic

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