小编DiG*_*iGi的帖子

将Interface的方法作为参数传递

是否可以将接口的方法作为参数传递?

我正在尝试这样的事情:

interface

type
  TMoveProc = procedure of object;
  // also tested with TMoveProc = procedure;
  // procedure of interface is not working ;)

  ISomeInterface = interface
    procedure Pred;
    procedure Next;
  end;

  TSomeObject = class(TObject)
  public
    procedure Move(MoveProc: TMoveProc);
  end;

implementation

procedure TSomeObject.Move(MoveProc: TMoveProc);
begin
  while True do
  begin
    // Some common code that works for both procedures
    MoveProc;
    // More code...
  end;
end;

procedure Usage;
var
  o: TSomeObject;
  i: ISomeInterface;
begin
  o := TSomeObject.Create;
  i := GetSomeInterface;
  o.Move(i.Next);
  // …
Run Code Online (Sandbox Code Playgroud)

delphi oop interface callback

11
推荐指数
2
解决办法
3901
查看次数

错误的Unicode转换,如何在Delphi 2010源代码中存储重音字符并处理字符集?

我们正在将项目从Delphi 2006升级到Delphi 2010.旧代码是:

InputText: string;
InputText := SomeTEditComponent.Text;
...
for i := 1 to length(InputText) do
if InputText[i] in ['0'..'9', 'a'..'z', '?' { and more special characters } ] then ...
Run Code Online (Sandbox Code Playgroud)

问题是重音字母 - 比较会失败.

我尝试将源代码从ANSI切换到UTF8和LE UCS-2,但没有运气.仅作为AnsiChar投射:

if CharInSet(AnsiChar(InputText[i]), ['0'..'9', 'a'..'z', '?']) then
Run Code Online (Sandbox Code Playgroud)

有趣的是Delphi如何处理这些字母 - 在调试期间在Evaluate中尝试这个:

Ord('?') = Ord('Ø')
Run Code Online (Sandbox Code Playgroud)

(是的,Delphi说True,在Windows 7上捷克语)


问题是:如何在不强制它们作为AnsiStrings的情况下存储和比较简单字符串?因为如果这不起作用我们为什么要使用Unicode?

谢谢大家的回复

现在我们在一些部分使用简单的CharInSet(AnsiChar(...

delphi unicode character-encoding

7
推荐指数
2
解决办法
4343
查看次数

标签 统计

delphi ×2

callback ×1

character-encoding ×1

interface ×1

oop ×1

unicode ×1