帮我看看这个Pos函数到底哪里出了问题?(100分)

  • 主题发起人 主题发起人 WebExplorer
  • 开始时间 开始时间
W

WebExplorer

Unregistered / Unconfirmed
GUEST, unregistred user!
iPos:=Pos(chr(13),'MSN'#$D'http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=5.0&ar=IStart')
iPos:=Pos(#13,'MSN'#$D'http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=5.0&ar=IStart')
iPos:=Pos(#$D,'MSN'#$D'http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=5.0&ar=IStart')
起结果都iPos都是0不知道为什么?
我需要得到的是回车符号的位置?????(#$D)
我上面写得有错吗?????

 
在'MSN'#$D'http中间加两个+试试。你这个算是个正常的字符串吗?居然可以编译通过?
 
三个都是对的,都是4!
var
iPos: Integer;
begin
iPos := Pos(chr(13), 'MSN'#$D'http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=5.0&ar=IStart');
ShowMessage(IntToStr(iPos));

iPos := Pos(#13, 'MSN'#$D'http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=5.0&ar=IStart');
ShowMessage(IntToStr(iPos));

iPos := Pos(#$D, 'MSN'#$D'http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=5.0&ar=IStart');
ShowMessage(IntToStr(iPos));

end;
 
to cozo:
不可能吧,怎么我这里全不对??????
我真搞不清楚????
我把愿代码贴出来让你们看看

procedure TfrmMain.SetLinkBarMenu(mniMenu:TMenuItem;strPath:AnsiString;
tlbLinks:TToolBar);
var
srLinkFile:TSearchRec; //搜索的变量
IniFile:TIniFile; //读取文件(特殊格式文件)
iFound:integer; //查找到文件
iCount:integer; //子文件数目
tmpMenu:TMenuItem; //临时子菜单
mniOpenAll:TMenuItem; //打开所有下面菜单的连接
mniLine:TMenuItem; //添加线菜单
mniEmpty:TMenuItem; //添加空菜单(如果文件夹下面没有文件)
strCaption:AnsiString; //读取的文件名称作为菜单名称
strCaptionURL:AnsiString; //得到LinkBar中的菜单的数据
strHint:AnsiString; //得到提示信息
strURL:AnsiString; //读取到文件中URL的地址
FileInfo:TSHFileInfo; //读取文件相关的信息
iEnterPos:integer; //回车符的位置
i:integer; //循环使用
bHave:boolean; //查询在LinkBar中是否已经有了的数据项
begin
//设置链接栏右边的下拉菜单
try
iCount:=0;
iFound:=FindFirst(strPath+'*.*',faDirectory,srLinkFile); //查找目录
while iFound=0 do
begin
if not((CompareStr(srLinkFile.Name,'.')=0) or
(CompareStr(srLinkFile.Name,'..')=0)) then
begin //不是.和..的目录
if ((srLinkFile.Attr and faDirectory)=srLinkFile.Attr) then
begin
IniFile:=TIniFile.Create(strPath+srLinkFile.Name);
strURL:=IniFile.ReadString('InternetShortcut','URL','');
strCaption:=srLinkFile.Name;
IniFile.Free;
bHave:=false; //判断加入的菜单是否在LinkBar中已经有了
for i:=0 to tlbLinks.ButtonCount-1 do
begin
iEnterPos:=Pos(#13,tlbLinks.Buttons.Hint); <red>这里就是我要的东西</red>[:(!][:(!]
if(strCaption=Copy(tlbLinks.Hint,1,iEnterPos-1)) then
bHave:=true;
end;
if(bHave=false) then //没有加进来
begin
if (Length(strCaption)>30) then
strCaption:=Copy(strCaption,1,30)+'...';
tmpMenu:=TMenuItem.Create(Self);
tmpMenu.Caption:=strCaption;
tmpMenu.Hint:=strURL;
tmpMenu.Tag:=0; //文件夹
tmpMenu.AutoHotKeys:=maManual;
ilLinkBarMenu.Handle:=ShGetFileInfo(PCHAR(strPath+srLinkFile.Name),
0,FileInfo,SizeOf(FileInfo),SHGFI_SMALLICON or SHGFI_SYSICONINDEX
or SHGFI_TYPENAME);
tmpMenu.SubMenuImages:=ilLinkBarMenu;
tmpMenu.ImageIndex:=FileInfo.iIcon;
mniOpenAll:=TMenuItem.Create(Self);
mniOpenAll.Caption:='Open all Links';
mniOpenAll.Tag:=1; //表明是打开所有菜单
mniOpenAll.AutoHotkeys:=maManual;
mniOpenAll.OnClick:=MenuItemClick;
tmpMenu.Add(mniOpenAll);
mniLine:=TMenuItem.Create(Self);
mniLine.Caption:='-';
mniLine.Tag:=2; //为0不可以打开
mniLine.AutoHotkeys:=maManual;
mniLine.OnClick:=MenuItemClick;
tmpMenu.Add(mniLine);
mniMenu.Add(tmpMenu);
Inc(iCount);
SetLinkBarMenu(tmpMenu,strPath+srLinkFile.Name+'/',tlbLinks);
end;
end;
end;
iFound:=FindNext(srLinkFile);
end;
iFound:=FindFirst(strPath+'*.*',faArchive+faReadOnly+faHidden+
faSysFile+faVolumeID,srLinkFile); //查找不是目录的文件
while iFound=0 do
begin
IniFile:=TIniFile.Create(strPath+srLinkFile.Name);
strURL:=IniFile.ReadString('InternetShortcut','URL','');
IniFile.Free;
strCaption:=Copy(srLinkFile.Name,1,Length(srLinkFile.Name)-4);
strHint:=strCaption+'#13';
strHint:=strHint+strURL;
bHave:=false; //判断加入的菜单是否在LinkBar中已经有了
for i:=0 to tlbLinks.ButtonCount-1 do
begin
iEnterPos:=Pos(#13,tlbLinks.Buttons.Hint); <red>这里就是我要的东西</red>[:(!][:(!]
if(strCaption=Copy(tlbLinks.Hint,1,iEnterPos-1)) then
bHave:=true;
end;
if(bHave=false) then //没有加进来
begin
if (Length(strCaption)>30) then
strCaption:=Copy(strCaption,1,30)+'...';
tmpMenu:=TMenuItem.Create(Self);
tmpMenu.Caption:=strCaption;
tmpMenu.Hint:=strHint;
tmpMenu.Tag:=3; //不是文件夹
tmpMenu.AutoHotKeys:=maManual;
ilLinkBarMenu.Handle:=ShGetFileInfo(PCHAR(strPath+srLinkFile.Name),
0,FileInfo,SizeOf(FileInfo),SHGFI_SMALLICON or SHGFI_SYSICONINDEX
or SHGFI_TYPENAME);
tmpMenu.SubMenuImages:=ilLinkBarMenu;
tmpMenu.ImageIndex:=FileInfo.iIcon;
tmpMenu.OnClick:=MenuItemClick;
mniMenu.Add(tmpMenu);
end;
iFound:=FindNext(srLinkFile);
inc(iCount);
end;
if(iCount=0) then
begin
mniEmpty:=TMenuItem.Create(Self);
mniEmpty.Caption:='Empty';
mniEmpty.Enabled:=false;
mniEmpty.Tag:=4;
mniEmpty.AutoHotkeys:=maManual;
mniEmpty.OnClick:=MenuItemClick;
mniMenu.Add(mniEmpty);
end;
except
IniFile.Free;
end;
end;
 
你先将我的代码(其实就是你的)完全复制过去看一下,呵呵,应该是别的地方出错了。
 
刚才怎么to 错了:(
应该为yzhshi:
我这里我已经用尽了各种方法,哎,不知道为什么?
 
呵呵,没事,幸好没吐到我,嘻嘻。
你的代码太多了,给你一个建议,在执行pos和比较以前,分别将内容使用剪贴板复制出来,或者显示在Memo中,
仔细看一下区别,应该有的,还有,注意#13#10和#13的区别。
 
yzhshi:
iPos:=Pos(chr(13),'MSN'#$D'http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=5.0&ar=IStart')
就是我在单步调试中把内容给Copy出来的('MSN'#$D'http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=5.0&ar=IStart')
 
你是单步调试的,看不见回车的。
这样
uses clipbrd;

cliboard.Astext:=tlbLinks.Buttons.Hint,然后粘贴出来看一下。
 
谢谢yzhshi:
问题我已经得到解决,刚才是我的写的出了问题
应该把
Copy(tlbLink.Hint,1,iEnterPos-1)
改为
Copy(tlbLink.Buttons.Hint,1,iEnterPos-1)
谢谢yzhshi
给100
 
上面的代码是我实现IE链接栏功能的代码
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
680
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部