小编Rob*_*edy的帖子

如何为相互依赖的记录定义隐式转换运算符?

我在Delphi 2006中使用运算符重载记录.(请不要告诉我不要回答这个问题.)

我有两个记录类型,隐式运算符重载.它们都只是在模块的实现中,而不是通过接口公开.

我的问题是,既然它们是相互依赖的,我不知道如何将第二种类型转发给编译器.我知道如何使用函数,过程和类来执行此操作,但不知道如何使用记录.

这是我想要做的简化示例:

implementation

type
  TMyRec1 = record
    Field1 : Integer;
    class operator Implicit(a: TMyRec2): TMyRec1;  // <---- Undeclared Identifier here.
  end;

  TMyRec2 = record
    Field2: Integer;
    class operator Implicit(a: TMyRec1): TMyRec2;
  end;

class operator TMyRec1.Implicit(a:TMyRec2): TMyRec1;
begin
  Result.Field1 := a.Field2;
end;

class operator TMyRec2.Implicit(a:TMyRec2): TMyRec2;
begin
  Result.Field2 := a.Field1;
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2006

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

写入文件后,为什么os.path.getsize仍然返回以前的大小?

我试图将一个大的xml文件拆分成更小的块.我写入输出文件然后检查它的大小,看它是否通过了一个阈值,但我不认为getsize()方法按预期工作.

什么是获取大小变化的文件的文件大小的好方法.

我做过这样的事......

import string
import os

f1 = open('VSERVICE.xml', 'r')
f2 = open('split.xml', 'w')

for line in f1:
  if str(line) == '</Service>\n':
    break
  else:
    f2.write(line)
    size = os.path.getsize('split.xml')
    print('size = ' + str(size))
Run Code Online (Sandbox Code Playgroud)

运行此命令将打印0作为文件大小进行约80次迭代,然后打印4176.在实际输出之前,Python是否将输出存储在缓冲区中?

python filesize

13
推荐指数
3
解决办法
3万
查看次数

Delphi可以用来创建和处理自定义协议处理程序吗?

我们需要在我们的一个Web应用程序和在Delphi中创建的Win32应用程序之间进行互操作.

一位同事建议使用自定义协议处理程序,例如ourcompany://something将信息传递给应用程序.

这可能与Delphi(5 Enterprise)有关吗?如果它在更高版本中可用,我们将寻求为此获取许可证.

干杯!

delphi protocol-handler

13
推荐指数
3
解决办法
1877
查看次数

是否可以更改虚拟字符串树中行的颜色?

我想更改虚拟字符串树的特定行中的文本颜色.可能吗?

delphi virtualtreeview

13
推荐指数
2
解决办法
5602
查看次数

如何从给定的基色生成多个阴影?

我想设计一个图表并设置一个样本的颜色.与Excel中的相同:

替代文字

是否有某种公式或算法可以从给定的阴影或颜色生成下一个颜色?

delphi colors

13
推荐指数
2
解决办法
2504
查看次数

如何在没有TWebBrowser的情况下在我的Delphi程序中执行Javascript?

我正在使用一个使用Javascript接口发出请求的Web API,响应是通过回调Javascript函数.有没有办法从Delphi调用Javascript代码而不使用TWebBrowser组件?

javascript delphi

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

为什么std :: bitset的位按相反的顺序排列?

为什么bitset以相反的顺序存储这些位?经过多次打击后,我终于写了这个binary_to_dec.可以简化吗?

int binary_to_dec(std::string bin)
{
    std::bitset<8> bit;

    int c = bin.size();

    for (size_t i = 0; i < bin.size(); i++,c--)
    {
        bit.set(c-1, (bin[i]-'0' ? true : false));
    }

    return bit.to_ulong();
}
Run Code Online (Sandbox Code Playgroud)

c++ bitset

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

Delphi是否可作为EM64和IA64使用?

我见过很多64位应用程序有两个64位版本.一个是x86-64,另一个是IA64.德尔福的64位版本也会有这个吗?

delphi 64-bit

13
推荐指数
2
解决办法
650
查看次数

如何检查多个变量是否等于相同的值?

如何比较多个项目?例如,我想检查所有变量A,B和C是否等于char'X'或者所有三个都等于'O'.(如果其中两个是X而一个是O则应该返回false.)

我试过了:

if (A, B, C == 'X' || A, B, C == 'O') 
  {
    //Do whatever
  }
Run Code Online (Sandbox Code Playgroud)

但它不起作用.做这个的最好方式是什么?

c++

13
推荐指数
2
解决办法
3万
查看次数

为什么TStringList有BeginUpdate和EndUpdate?

我知道在TLI控件(如TListBox)上使用BeginUpdate和EndUpdate会加快使用Items填充控件的过程,因为它会阻止控件重新绘制,直到调用EndUpdate.

例:

procedure TForm1.AddItems;
var
  i: Integer;
begin
  Screen.Cursor := crHourGlass;
  try
    for i := 0 to 5000 do
    begin
      ListBox1.Items.Add('Item' + IntToStr(i));
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

上面会有延迟,因为允许重新绘制列表框,但是可以通过防止重新绘制来缩短延迟:

procedure TForm1.AddItems;
var
  i: Integer;
begin
  Screen.Cursor := crHourGlass;
  try
    ListBox1.Items.BeginUpdate;
    try
      for i := 0 to 5000 do
      begin
        ListBox1.Items.Add('Item' + IntToStr(i));
      end;
    finally
      ListBox1.Items.EndUpdate;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

现在我使用TStringList测试了这个:

procedure TForm1.AddItems;
var
  SL: TStringList;
  i: Integer;
begin
  SL := TStringList.Create;
  try
    Screen.Cursor := crHourGlass; …
Run Code Online (Sandbox Code Playgroud)

delphi library-design

13
推荐指数
2
解决办法
3548
查看次数