Delphi PosEx在设计时包中不起作用

Delphi PosEx在设计时包中不起作用,delphi,debugging,package,delphi-7,design-time,Delphi,Debugging,Package,Delphi 7,Design Time,我已经为我的delphi7 IDE创建了一个设计时包。我希望表单上有一个组件,在设计时在上下文菜单中为我提供一些菜单项。当我调试包时,我可以看到我的代码被执行了,但是当涉及到使用内置函数PosEx的行时,这种行为让我感到困惑。在调试器中,我可以看到要搜索的文本包含要搜索的部分,但函数仍然返回0!而且,如果我直接执行它(而不是在项目中使用它调试IDE),一切都很好 这是我的代码: function RemoveLeftOverPlaceHolders( var PIO_sTemplate: str

我已经为我的delphi7 IDE创建了一个设计时包。我希望表单上有一个组件,在设计时在上下文菜单中为我提供一些菜单项。当我调试包时,我可以看到我的代码被执行了,但是当涉及到使用内置函数PosEx的行时,这种行为让我感到困惑。在调试器中,我可以看到要搜索的文本包含要搜索的部分,但函数仍然返回0!而且,如果我直接执行它(而不是在项目中使用它调试IDE),一切都很好

这是我的代码:

function RemoveLeftOverPlaceHolders( var PIO_sTemplate: string);
var nStartPos: integer;
const JPCG_FOREACH_START = '{%foreach ';
begin
  nStartPos := 0;

  repeat
    nStartPos := PosEx( JPCG_FOREACH_START, PIO_sTemplate, nStartPos ); // <-- nStartPos is always 0 !
    if nStartPos > 0 then begin
      ...
    end;
  until nStartPos = 0;
end;
函数removereftoverplaceholder(var PIO_sTemplate:string);
var-nStartPos:整数;
const JPCG_FOREACH_START='{%FOREACH';
开始
nStartPos:=0;
重复
nStartPos:=PosEx(JPCG_FOREACH_START,PIO_sTemplate,nStartPos);//0然后开始
...
结束;
直到nStartPos=0;
结束;
在IDE中执行期间是否可能更改字符串类型?(是否有任何ansistring unicode问题?)


编辑:我使用的是GExperts和DelphicSpeedUp

愚蠢…答案就在代码中…nStartPos初始化为0,这导致PosEx失败。奇怪的是,它在从设计包执行代码时起作用了…

是的。甚至在文档中也有。:-)“如果找不到SubStr,如果偏移量大于S的长度,或者如果偏移量小于1,PosEx将返回0。”(强调添加)但在任何情况下它都不应该起作用。