2013-04-06 23 views
0

我爲我的delphi7 IDE創建了一個設計時包。我希望表單上的組件在設計時在上下文菜單中提供一些菜單項。當我調試軟件包時,我可以看到我的代碼得到執行,但是當涉及到使用內置函數PosEx的行時,行爲會讓我感到困惑。在調試器中,我可以看到要搜索的文本包含要搜索的部分,但函數返回0!而且,如果我直接執行此操作(而不是在項目中使用它進行調試),它一切正常。PosEx在設計時包中不起作用

這是我的代碼:

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; 

是否有可能在IDE執行過程中的字符串類型的改變? (任何AnsiString類型Unicode的問題?)

編輯:我使用GExperts和DelphiSpeedUp

回答

1

愚蠢...答案代表權代碼..​​. nStartPos被初始化爲0,偉馳導致失敗PosEx。奇怪的是,它在執行設計包的代碼時工作...

+0

是的。甚至在文檔中。 :-)「**如果沒有找到SubStr,如果Offset大於S的長度,或者** Offset小於1,則PosEx返回0 ** **(強調增加)它不應該工作無論如何,儘管如此。 – 2013-04-09 20:03:20