【請問可以將htm包在exe裡嗎???】 |
答題得分者是:pceyes
|
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
------
努力會更接近成功 |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
TWebBrowser怎么直接显示html语法文档(不经过文件)?
http://delphi.ktop.com.tw/board.php?cid=30&fid=67&tid=35671 ...load HTML code directly into a TWebbrowser? http://www.swissdelphicenter.ch/torry/showcode.php?id=1096 pas [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, MSHTML,ActiveX, SHDocVw; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; WebBrowser1: TWebBrowser; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TextToWebBrowser(ASrc: string; AWebBrowser: TWebBrowser); var vv: Variant; HTMLDocument: IHTMLDocument2; begin vv := VarArrayCreate([0,0],varVariant); vv[0] := ASrc; HTMLDocument := AWebBrowser.Document as IHTMLDocument2; HTML(pSafearray(TVarData(vv).VArray)); HTMLDocument.close; end; procedure TForm1.Button1Click(Sender: TObject); begin TextToWebBrowser(memo1.Lines.text,WebBrowser1); end; procedure TForm1.FormCreate(Sender: TObject); begin webbrowser1.Navigate('about:blank'); end; end. [/code] dfm [code delphi] object Form1: TForm1 Left = 209 Top = 71 Width = 544 Height = 391 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 192 Top = 312 Width = 161 Height = 41 Caption = 'Exetue' TabOrder = 0 OnClick = Button1Click end object Memo1: TMemo Left = 48 Top = 248 Width = 465 Height = 57 Lines.Strings = ( 'Memo1') TabOrder = 1 end object WebBrowser1: TWebBrowser Left = 48 Top = 16 Width = 465 Height = 217 TabOrder = 2 ControlData = { 4C0000000F3000006D1600000000000000000000000000000000000000000000 000000004C000000000000000000000001000000E0D057007335CF11AE690800 2B2E126208000000000000004C0000000114020000000000C000000000000046 8000000000000000000000000000000000000000000000000000000000000000 00000000000000000100000000000000000000000000000000000000} end end [/code]
------
努力會更接近成功 |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
===================引 用 andyto202 文 章=================== 可是好像看不出來那裡可以將網址放進去的啊 你要網址,那就不用問了呀?webbrowser1.navegate('你要放的網址'); 最近比較忙 有空我再試試看喔 看來我比你有空。 不知道 pceyes兄有沒有試過一個網頁包在exe裡 不知你有沒真的試過我po的程式嗎,在memo內置入完整的html code 按下執行,即會在webbrowser內顯示網頁。
------
努力會更接近成功 |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
您的程式我試了
因為我找不到 SHDocVw_TLB 後來我上網查 用SHDocVw_EWB可以代替 不過當我下了 EWB.inc、EwbAcc.pas、IEConst.pas、SHDocVw_EWB.pas後 要執行時還是出現上列那點 請問要如何解決 我是用delphi 6試的 [Error] SHDocVw_EWB.pas(56): Invalid compiler directive: 'VARPROPSETTER' [Fatal Error] EwbAcc.pas(43): Could not compile used unit 'IEConst.pas' 如果我將uses中的 SHDocVw_TLB拿掉可以執行 但是貼上html code都沒反應 |
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, shdocvw測也是可以的, 我是用d7測的,用你給的分析程式(WebAutoLogin,ephrain在本站也有註冊,是女士,應是用BCB寫的),將取得的html放在memo中確實可以使用。 如果真的不行,回家我再裝d6測看看。
------
努力會更接近成功 |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
===================引 用 pceyes 文 章=================== uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, shdocvw測也是可以的, 我是用d7測的,用你給的分析程式(WebAutoLogin,ephrain在本站也有註冊,是女士,應是用BCB寫的),將取得的html放在memo中確實可以使用。 如果真的不行,回家我再裝d6測看看。 我是用emeditor打開那個htm檔 再把它貼進去memo吧 (請問馬上貼馬上有畫面嗎 我等了三十秒也沒有畫面耶) 奇怪 怎麼不行 抱歉 我剛才又重試了一下 我只有貼pas dfm好像沒差 結果成功了耶 雖然不是res產生的 不過確實是成功了 感謝您喔 不過這樣的寫法有辦法寫死在程式中嗎 萬一程式中有很多htm呢 難道要好幾個memo嗎
編輯記錄
andyto202 重新編輯於 2008-12-15 18:37:56, 註解 無‧
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
如果僅是測試的話,將之前的程式碼,加上以下的碼即可達到你的需求,進一步,你應該將它改成TStringlist的容器,來承載,以取代用memo(設為隠藏)的方式來當作容器。
最正規的做法是用之前建議的Res另外編譯成Dll,也可以將一個Dll內含一個html的方式,以便管理替換。 pas [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; ListBox1: TListBox; procedure FormCreate(Sender: TObject); procedure ListBox1Click(Sender: TObject); private { Private declarations } myarr : array of string; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin setlength(myarr,3); // 範例是三個html code // 注意 動態陣列 由 0 開始 // #13 #10 是以Memo來表示 // 如果你要改成Stringlist只要用 #13即可 myarr[0] := '<html>' #13 #10 '<head>' #13 #10 '<!-- This file is generated by WebAutoLogin 1.1 -->' #13 #10 '</head>' #13 #10 '<body ="document.formLogin.submit();">' #13 #10 '<input type="hidden" name="Email" value="MyEmail02">' #13 #10 '<input type="hidden" name="Passwd" value="MyPassword02">' #13 #10 '</form>' #13 #10 '</body>' #13 #10 '</html>'; myarr[2] := '<html>' #13 #10 '<head>' #13 #10 '<!-- 如果你需要的話,就把memo及ListBox都改成Stringlist -->' #13 #10 '</head>' #13 #10 '<body >' #13 #10 '<input type="hidden" name="Email" value="MyEmail03">' #13 #10 '<input type="hidden" name="Passwd" value="MyPassword03">' #13 #10 '</form>' #13 #10 '</body>' #13 #10 '</html>'; end; // 選按一個 item , memo就會出現對照的html code procedure TForm1.ListBox1Click(Sender: TObject); begin memo1.lines.Text := myarr[listbox1.ItemIndex]; end; end. [/code] dfm [code delphi] object Form1: TForm1 Left = 192 Top = 107 Width = 544 Height = 375 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Memo1: TMemo Left = 160 Top = 32 Width = 321 Height = 281 ImeName = '中文 (繁體) - 倉頡' Lines.Strings = ( 'Memo1') TabOrder = 0 end object ListBox1: TListBox Left = 24 Top = 32 Width = 121 Height = 281 ImeName = '中文 (繁體) - 倉頡' ItemHeight = 13 Items.Strings = ( 'Email01' 'Email02' 'Email03') TabOrder = 1 OnClick = ListBox1Click end end [/code]
------
努力會更接近成功 |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
[code delphi]
unit htmlogin; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, MSHTML,ActiveX, SHDocVw; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; WebBrowser1: TWebBrowser; ListBox1: TListBox; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ListBox1Click(Sender: TObject); private { Private declarations } myarr : array of string; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TextToWebBrowser(ASrc: string; AWebBrowser: TWebBrowser); var vv: Variant; HTMLDocument: IHTMLDocument2; begin vv := VarArrayCreate([0,0],varVariant); vv[0] := ASrc; HTMLDocument := AWebBrowser.Document as IHTMLDocument2; HTML(pSafearray(TVarData(vv).VArray)); HTMLDocument.close; end; procedure TForm1.Button1Click(Sender: TObject); begin TextToWebBrowser(memo1.Lines.text,WebBrowser1); end; procedure TForm1.FormCreate(Sender: TObject); begin webbrowser1.Navigate('about:blank'); setlength(myarr,2); myarr[0]:='<html>' #13 #10 '<head>' #13 #10 '<!-- This file is generated by WebAutoLogin 1.1 -->' #13 #10 '</head>' #13 #10 '<body ="document.formLogin.submit();">' #13 #10 '<form name="formLogin" method="post" action="http://ddd">' #13 #10 '<input type="hidden" name="sid" value="sZOUUI">' #13 #10 '<input type="hidden" name="formhash" value="87b470f2">' #13 #10 '<input type="hidden" name="cookietime" value="2592000">' #13 #10 '<input type="hidden" name="loginfield" value="username">' #13 #10 '<input type="hidden" name="username" value="aaa">' #13 #10 '<input type="hidden" name="password" value="bbb">' #13 #10 '<input type="hidden" name="userlogin" value="登錄">' #13 #10 '</form>' #13 #10 '</body>' #13 #10 '</html>' #13 #10 end; procedure TForm1.ListBox1Click(Sender: TObject); begin memo1.lines.Text := myarr[listbox1.ItemIndex]; end; end. [/code] 結果要執行時顯示 [Error] htmlogin.pas(70): Left side cannot be assigned to [Error] htmlogin.pas(89): Expression expected but 'END' found [Fatal Error] htmloginp.dpr(5): Could not compile used unit 'htmlogin.pas' |
pcslxl
一般會員 發表:2 回覆:6 積分:1 註冊:2005-11-08 發送簡訊給我 |
用 resource(res)方式來包,
as: {$R Wdate.res} var rs : TResourceStream; vStr : string; begin inherited; vStr:=ExtractFilePath(Paramstr(0)) 'xx.htm'; if not FileExists('xx.htm') then begin rs := TResourceStream.Create(Hinstance,'wd','Wdate'); rs.SaveToFile('xx.htm'); rs.Free; end ; end 去找一下资源文件打包的方法就可以了。
------
pcsl ┣━┒ ┣—┒ ┟━┃ ┍╄┓ ┟━│ ╃━ ┝—┃ ┣╈┤ ┣━┃ / ╈ ┗━┘ ┗┸┛ └━┛/┃┻-.. |
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
unit htmlogin;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, MSHTML,ActiveX, SHDocVw; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; WebBrowser1: TWebBrowser; ListBox1: TListBox; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ListBox1Click(Sender: TObject); private { Private declarations } myarr : array of string; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TextToWebBrowser(ASrc: string; AWebBrowser: TWebBrowser); var vv: Variant; HTMLDocument: IHTMLDocument2; begin vv := VarArrayCreate([0,0],varVariant); vv[0] := ASrc; HTMLDocument := AWebBrowser.Document as IHTMLDocument2; HTML(pSafearray(TVarData(vv).VArray)); HTMLDocument.close; end; procedure TForm1.Button1Click(Sender: TObject); begin TextToWebBrowser(memo1.Lines.text,WebBrowser1); end; procedure TForm1.FormCreate(Sender: TObject); begin webbrowser1.Navigate('about:blank'); setlength(myarr,2); myarr[0]:='<html>' #13 #10 '<head>' #13 #10 '<!-- This file is generated by WebAutoLogin 1.1 -->' #13 #10 '</head>' #13 #10 '<body ="forbiddendocument.formLogin.submit();">' #13 #10 '<form name="formLogin" method="post" action="http://ddd">' #13 #10 '<input type="hidden" name="sid" value="sZOUUI">' #13 #10 '<input type="hidden" name="formhash" value="87b470f2">' #13 #10 '<input type="hidden" name="cookietime" value="2592000">' #13 #10 '<input type="hidden" name="loginfield" value="username">' #13 #10 '<input type="hidden" name="username" value="aaa">' #13 #10 '<input type="hidden" name="password" value="bbb">' #13 #10 '<input type="hidden" name="userlogin" value="登錄">' #13 #10 '</form>' #13 #10 '</body>' #13 #10 '</html>' end; procedure TForm1.ListBox1Click(Sender: TObject); begin memo1.lines.Text := myarr[listbox1.ItemIndex]; end; end.
------
努力會更接近成功 |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
===================引 用 pcslxl 文 章=================== 用 resource(res)方式來包, as: {$R Wdate.res} var rs : TResourceStream; vStr : string; begin inherited; vStr:=ExtractFilePath(Paramstr(0)) 'xx.htm'; if not FileExists('xx.htm') then begin rs := TResourceStream.Create(Hinstance,'wd','Wdate'); rs.SaveToFile('xx.htm'); rs.Free; end ; end 去找一下资源文件打包的方法就可以了。 請問是先將上面的用筆記本存在*.rc 再用 brcc32.exe *.rc嗎 我網路上找很久 怎麼都沒有相關的資訊呢 |
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
|
pcslxl
一般會員 發表:2 回覆:6 積分:1 註冊:2005-11-08 發送簡訊給我 |
资源文件的使用步骤为:
1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件。例如: mycur cursor move.cur //加入光标 mypic Bitmap Water.BMP //加入位图 mywav WAVE happy.wav //加入声音 myAVI AVI EPOEN.AVI //加入视频 myIco ICON CJT.ICO //加入图标 格式分别为在资源文件中的名称->类型->实际文件名称,例如上面第一行定义一个名为mycur的光标,实际名称为加入光标move.cur. 2.将rc文件编译成res资源文件 将脚本文件和实际文件拷到Brcc32.EXE所在目录,执行DOS命令。格式为:Brcc32 脚本文件(回车),例如有一名为myfirst.rc的脚本文件,则执行 Brcc32 myfirst.rc(回车)即可。如果你是懒人,也可新建一批处理文件,内容只有一行:Brcc32 mufist.rc.(因为Delphi安装后一般会在自动批处理文件中指明搜索路径的。)如果编译成功,则会生成一个结尾为res的文件,这个文件就是我们需要的资源文件。 3.在Delphi单元中加入资源文件 将生成的res资源文件拷贝到你所编程序的路径下,在单元文件{$R *DFM}后加上一句{$R mufirst.res},则将res文件加入去,编译后资 源文件即已包含在可执行文件中了。若你有多个资源文件,也按上法依次加入。 function TForm1.ExtractRes(ResType, ResName, ResNewName: string): boolean; var Res: TResourceStream; begin try Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType)); try Res.SavetoFile(ResNewName); Result := true; finally Res.Free; end; except Result := false; end; 我就是按上述方法完成 的,祝你好运!
------
pcsl ┣━┒ ┣—┒ ┟━┃ ┍╄┓ ┟━│ ╃━ ┝—┃ ┣╈┤ ┣━┃ / ╈ ┗━┘ ┗┸┛ └━┛/┃┻-.. |
andyto202
一般會員 發表:10 回覆:29 積分:7 註冊:2006-12-07 發送簡訊給我 |
我講一下我的操作流程
[code delphi] unit auto; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, StdCtrls, Activex, Menus; type TForm1 = class(TForm) B1: TButton; WebBrowser1: TWebBrowser; Label1: TLabel; ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } procedure LoginUrl2(Ur2:String); public { Public declarations } end; var Form1: TForm1; logon:Boolean; implementation var AppPath:string; {$R *.DFM} procedure TForm1.LoginUrl2(Ur2:String); var docs,edits:OleVariant; begin WebBrowser1.Navigate(Ur2); end; procedure TForm1.FormCreate(Sender: TObject); begin AppPath:=ExtractFilePath(Application.ExeName); end; procedure TForm1.Button1Click(Sender: TObject); begin LoginUrl2(apppath 'abc.htm'); end; end. [/code] 1.用記筆本加入 myhtm htm abc.htm 並存成 abc.rc 2.brcc32 abc.rc 並產生了 abc.res 3.在{$R *.DFM}之後加入了{$R abc.res} 請問這樣子後 我要如何將 procedure TForm1.Button1Click(Sender: TObject); begin LoginUrl2(apppath 'abc.htm'); end; 這段用res來取代呢 |
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
先生:
流程應該是這樣的: 1. 由res載入文件後(所以要你重新開新版嘛!") 2. 若照 pcslxl 大的做法,是基本做法,要save to file,再重新由硬碟載入HTM執行,這應該不是你要的,只要存到硬碟後,就算刪除,還是可以用軟體抓回來看帳號密碼的 ;另外RES是不能含入全文字檔TEXT的,要以stringtable方式存在的。 3. 應該要以TMemoryStream方式在程式內部取得文字檔。 4. 之前PO給你的TextToWebBrowser(stream.text,WebBrowser1); 應該可以用了(已切合主題了),再將3取得的文字檔填入即可。
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2008-12-17 11:56:11, 註解 無‧
|
mytion
一般會員 發表:0 回覆:4 積分:0 註冊:2011-01-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |