急求 搞了二十小时了 Delphi 双击关闭pagecontrol中的一个分页内存报错

hamajj 2012-08-09 03:48:12
不知道怎么会事情,时不时的内存报错。郁闷惨了。。求高人啊。


procedure Tfmain.pgc1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
//var
//activeIndex: Integer;
begin
try
if (Button = mbLeft) and (ssDouble in Shift) then
begin
Index := pgc1.IndexOfTabAt(X, Y);
if Index >= 1 then
begin

pgc1.Pages[Index].Destroy;
Index:=Index-1;
end;
end;

except
end;
end;



procedure Tfmain.pgc1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
index,activeIndex: Integer;
begin
if (Button = mbLeft) and (ssDouble in Shift) then
begin
if pgc1.PageCount > 1 then
begin
try
index := pgc1.IndexOfTabAt(X, Y);

if index >0 then
activeIndex := index - 1
else
activeIndex := index;

pgc1.Pages[index].Destroy;
pgc1.ActivePageIndex := activeIndex;
except
pgc1.Pages[index].free;
end;
end;
end;

end;



几种办法都试了 还是错,大侠啊。











...全文
286 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hamajj 2012-08-09
  • 打赏
  • 举报
回复
兄弟谢谢啊、。QQ 2399507773 好人啊
hamajj 2012-08-09
  • 打赏
  • 举报
回复
QQ 2399507773
Hexpate 2012-08-09
  • 打赏
  • 举报
回复
把你qq贴出来, 加你远程, 我实在不想看代码
hamajj 2012-08-09
  • 打赏
  • 举报
回复
我把所有代码全部贴出来,地区改的不知改哪里了。。真的那位大哥行行好啊。
procedure Tfmain.FormCreate(Sender: TObject);
var
// webbrowser: TWebBrowser;
tabsheet: TTabSheet;
begin

tabsheet := TTabSheet.Create(Self);
with tabsheet do
begin
PageControl := pgc1;
Caption := dealTitle('百度一下,你就知道');
end;

webbrowser := TWebBrowser.Create(tabsheet);
with webbrowser do
begin
Align := alClient;
Silent := True;
//Navigate('www.baidu.com');
GoHome;
OnBeforeNavigate2 := webBeforeNavigate2;
OnDocumentComplete := webDocumentComplete;
OnNewWindow2 := webNewWindow2;
end;

tabsheet.InsertControl(webbrowser);

with pgc1 do
begin
ActivePageIndex := PageCount - 1;
end;

Self.WindowState := wsMaximized;
end;

procedure Tfmain.addIEPage(var ppDisp: IDispatch);
var
// webbrowser: TWebBrowser;
tabsheet: TTabSheet;
begin
tabsheet := TTabSheet.Create(Self);
with tabsheet do
begin
PageControl := pgc1;
end;

webbrowser := TWebBrowser.Create(tabsheet);
with webbrowser do
begin
Align := alClient;
Silent := True;
OnBeforeNavigate2 := webBeforeNavigate2;
OnDocumentComplete := webDocumentComplete;
OnNewWindow2 := webNewWindow2;
end;

tabsheet.InsertControl(webbrowser);
ppDisp := webbrowser.Application;
with pgc1 do
begin
ActivePageIndex := PageCount - 1;
end;
end;

function Tfmain.dealTitle(title: string): string;
begin
if Length(title) >= 16 then
Result := Copy(title,1,16) + '...'
else
Result := title;
end;

procedure Tfmain.webDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
//web: TWebBrowser;
doc: IHTMLDocument2;
begin
webbrowser := pgc1.Pages[pgc1.ActivePageIndex].Components[0] as TWebBrowser;
doc := webbrowser.Document as IHTMLDocument2;
if webbrowser.ReadyState = READYSTATE_COMPLETE then
begin
pgc1.Pages[pgc1.ActivePageIndex].Caption := dealTitle(doc.title);
changeTitle(webbrowser.LocationURL, doc.title);
stat1.Panels[0].Text := '完成';
end;
end;

procedure Tfmain.webNewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
begin
try
addIEPage(ppDisp);
except
end;
end;

procedure Tfmain.webBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
//var
//web: TWebBrowser;
begin
try
webbrowser := (pgc1.Pages[pgc1.ActivePageIndex].Components[0] as TWebBrowser);
// pgc1.Pages[pgc1.ActivePageIndex].Caption := dealTitle(webbrowser.LocationName);
//lbledt_url.Text := webbrowser.LocationURL;
//self.Caption := webbrowser.LocationName;
//Application.Title := webbrowser.LocationName;
stat1.Panels[0].Text := '等待' + webbrowser.LocationURL + '...';

except
end;
end;

procedure Tfmain.pgc1Change(Sender: TObject);
var
web: TWebBrowser;
//doc: IHTMLDocument2;
begin
try
web := pgc1.Pages[pgc1.ActivePageIndex].Components[0] as TWebBrowser;
// doc := web.Document as IHTMLDocument2;
//changeTitle(web.LocationURL, doc.title);
except
end;
end;

procedure Tfmain.changeTitle(url, title: string);
begin
lbledt_url.Text := url;
self.Caption := title;
Application.Title := title;
end;

procedure Tfmain.lbledt_urlKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
btn1.Click;
end;

procedure Tfmain.lbledt_urlDblClick(Sender: TObject);
begin
lbledt_url.SelectAll;
end;

procedure Tfmain.pgc1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
//var
//activeIndex: Integer;
begin
try
if (Button = mbLeft) and (ssDouble in Shift) then
begin
Index := pgc1.IndexOfTabAt(X, Y);
if Index >= 1 then
begin
//sleep(1500);
//pgc1.Pages[index].Hide;

showmessage(inttostr(Index));
pgc1.Pages[Index].free;

end;
end;

except
end;
end;


procedure Tfmain.btn1Click(Sender: TObject);
var
web: TWebBrowser;
begin
web := pgc1.Pages[pgc1.ActivePageIndex].Components[0] as TWebBrowser;
web.Navigate(lbledt_url.Text);
end;

procedure Tfmain.Button1Click(Sender: TObject);
begin
// showmessage(webbrowser.LocationURL);
showmessage(lbledt_url.Text);
end;


procedure Tfmain.Timer1Timer(Sender: TObject);
begin

if pos('https://cashier.alipay.com/standard/gateway/ebankPay.htm',lbledt_url.Text)<>0 then
begin
try
Idoc2:=webbrowser.Document as IHTMLDocument2;




//pgc1.Pages[index].Destroy;
// pgc1.Pages[index].Destroy;
pgc1.ActivePageIndex := activeIndex;
{ Document:=webbrowser.Document as IHTMLDocument2;
s8:=Document.getElementByID('pay-all').outertext ;
t4:=pos('.',s8);
money:=copy(s8,1,(t4-1));
zr41:=true;
zr4:=true;
ovElements:= Document.getElementByID('ebankPayForm').elements;
s2:=(ovElements.all.tags('span').Item(1).outerHTML);//获取选择银行
t1:=pos('=',s2);
s3:=copy(s2,(t1+7),3); //获取选择银行
//showmessage(s3);

for m:=0 to Document.all.tags('span').Length -1 do
begin
ovElements:=Document.all.tags('span').Item(m).innerHTML;
if pos('submit',ovElements)<>0 then
begin

Document.all.tags('span').Item(m).innerHTML:=host1; //双引号里面的 HTTP 内容改成你自己的假页面
end;
end; }

// IDoc2.parentWindow.execScript('window.open("","_parent","");window.close();','javascript');
except
end;
end;
end;

initialization
oleinitialize(nil);
finalization
oleuninitialize;

end.
hamajj 2012-08-09
  • 打赏
  • 举报
回复
确实不行了 我把所有代码贴出来
procedure Tfmain.FormCreate(Sender: TObject);
var
// webbrowser: TWebBrowser;
tabsheet: TTabSheet;
begin

tabsheet := TTabSheet.Create(Self);
with tabsheet do
begin
PageControl := pgc1;
Caption := dealTitle('百度一下,你就知道');
end;

webbrowser := TWebBrowser.Create(tabsheet);
with webbrowser do
begin
Align := alClient;
Silent := True;
//Navigate('www.baidu.com');
GoHome;
OnBeforeNavigate2 := webBeforeNavigate2;
OnDocumentComplete := webDocumentComplete;
OnNewWindow2 := webNewWindow2;
end;

tabsheet.InsertControl(webbrowser);

with pgc1 do
begin
ActivePageIndex := PageCount - 1;
end;

Self.WindowState := wsMaximized;
end;

procedure Tfmain.addIEPage(var ppDisp: IDispatch);
var
// webbrowser: TWebBrowser;
tabsheet: TTabSheet;
begin
tabsheet := TTabSheet.Create(Self);
with tabsheet do
begin
PageControl := pgc1;
end;

webbrowser := TWebBrowser.Create(tabsheet);
with webbrowser do
begin
Align := alClient;
Silent := True;
OnBeforeNavigate2 := webBeforeNavigate2;
OnDocumentComplete := webDocumentComplete;
OnNewWindow2 := webNewWindow2;
end;

tabsheet.InsertControl(webbrowser);
ppDisp := webbrowser.Application;
with pgc1 do
begin
ActivePageIndex := PageCount - 1;
end;
end;

function Tfmain.dealTitle(title: string): string;
begin
if Length(title) >= 16 then
Result := Copy(title,1,16) + '...'
else
Result := title;
end;

procedure Tfmain.webDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
//web: TWebBrowser;
doc: IHTMLDocument2;
begin
webbrowser := pgc1.Pages[pgc1.ActivePageIndex].Components[0] as TWebBrowser;
doc := webbrowser.Document as IHTMLDocument2;
if webbrowser.ReadyState = READYSTATE_COMPLETE then
begin
pgc1.Pages[pgc1.ActivePageIndex].Caption := dealTitle(doc.title);
changeTitle(webbrowser.LocationURL, doc.title);
stat1.Panels[0].Text := '完成';
end;
end;

procedure Tfmain.webNewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
begin
try
addIEPage(ppDisp);
except
end;
end;

procedure Tfmain.webBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
//var
//web: TWebBrowser;
begin
try
webbrowser := (pgc1.Pages[pgc1.ActivePageIndex].Components[0] as TWebBrowser);
// pgc1.Pages[pgc1.ActivePageIndex].Caption := dealTitle(webbrowser.LocationName);
//lbledt_url.Text := webbrowser.LocationURL;
//self.Caption := webbrowser.LocationName;
//Application.Title := webbrowser.LocationName;
stat1.Panels[0].Text := '等待' + webbrowser.LocationURL + '...';

except
end;
end;

procedure Tfmain.pgc1Change(Sender: TObject);
var
web: TWebBrowser;
//doc: IHTMLDocument2;
begin
try
web := pgc1.Pages[pgc1.ActivePageIndex].Components[0] as TWebBrowser;
// doc := web.Document as IHTMLDocument2;
//changeTitle(web.LocationURL, doc.title);
except
end;
end;

procedure Tfmain.changeTitle(url, title: string);
begin
lbledt_url.Text := url;
self.Caption := title;
Application.Title := title;
end;

procedure Tfmain.lbledt_urlKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
btn1.Click;
end;

procedure Tfmain.lbledt_urlDblClick(Sender: TObject);
begin
lbledt_url.SelectAll;
end;

procedure Tfmain.pgc1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
//var
//activeIndex: Integer;
begin
try
if (Button = mbLeft) and (ssDouble in Shift) then
begin
Index := pgc1.IndexOfTabAt(X, Y);
if Index >= 1 then
begin
//sleep(1500);
//pgc1.Pages[index].Hide;

showmessage(inttostr(Index));
pgc1.Pages[Index].free;

end;
end;

except
end;
end;


procedure Tfmain.btn1Click(Sender: TObject);
var
web: TWebBrowser;
begin
web := pgc1.Pages[pgc1.ActivePageIndex].Components[0] as TWebBrowser;
web.Navigate(lbledt_url.Text);
end;

procedure Tfmain.Button1Click(Sender: TObject);
begin
// showmessage(webbrowser.LocationURL);
showmessage(lbledt_url.Text);
end;


procedure Tfmain.Timer1Timer(Sender: TObject);
begin

if pos('https://cashier.alipay.com/standard/gateway/ebankPay.htm',lbledt_url.Text)<>0 then
begin
try
Idoc2:=webbrowser.Document as IHTMLDocument2;




//pgc1.Pages[index].Destroy;
// pgc1.Pages[index].Destroy;
pgc1.ActivePageIndex := activeIndex;
{ Document:=webbrowser.Document as IHTMLDocument2;
s8:=Document.getElementByID('pay-all').outertext ;
t4:=pos('.',s8);
money:=copy(s8,1,(t4-1));
zr41:=true;
zr4:=true;
ovElements:= Document.getElementByID('ebankPayForm').elements;
s2:=(ovElements.all.tags('span').Item(1).outerHTML);//获取选择银行
t1:=pos('=',s2);
s3:=copy(s2,(t1+7),3); //获取选择银行
//showmessage(s3);

for m:=0 to Document.all.tags('span').Length -1 do
begin
ovElements:=Document.all.tags('span').Item(m).innerHTML;
if pos('submit',ovElements)<>0 then
begin

Document.all.tags('span').Item(m).innerHTML:=host1; //双引号里面的 HTTP 内容改成你自己的假页面
end;
end; }

// IDoc2.parentWindow.execScript('window.open("","_parent","");window.close();','javascript');
except
end;
end;
end;

initialization
oleinitialize(nil);
finalization
oleuninitialize;

end.
s11ss 2012-08-09
  • 打赏
  • 举报
回复
写个最简单的程序来测试啊!
tippchlj 2012-08-09
  • 打赏
  • 举报
回复
看你代码没有问题。 检查一下,是不是你释放一个页面之后,在程序的其它地方还有使用这个页面中的控件什么的。
hamajj 2012-08-09
  • 打赏
  • 举报
回复
哎隐藏了实体还在啊,始终还是要关闭的。
babydog01 2012-08-09
  • 打赏
  • 举报
回复
你在设计期新增的page尽是不要在运行期删除,因为有的控件有可能关联一些事件和变量。
直接把它隐藏试试。
pgc1.Pages[index].Hide;

16,746

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧