Autor |
Beitrag |
musiktiger
Hält's aus hier
Beiträge: 8
|
Verfasst: Fr 14.03.03 23:39
Hallo,
kann mir jemand sagen wie man den Quelltext einer Webseite z.B. in ein Memo einlesen kann, ohne die Indy Komponente IDHttp zu benutzen. Ich hab da was mit NMHttp gefunden. Allerdings weiß ich nicht so ganz wie ich das initialisieren soll. Beim Code
Quelltext 1:
| NMHttp1:= TNMHttp.create(owner); |
und z.B. bei owner parent oder self eingesetzt kommt immer wieder eine Fehlermeldung. So kann ich das gar nicht erst initialisieren und dann damit auch nicht arbeiten.
Ich bin am verzweifeln bitte bitte helft mir!
Gruß,
musiktiger
Moderiert von Tino: Code-Tags hinzugefügt.
|
|
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Sa 15.03.03 12:29
Hi und willkommen im Delphi-Forum,
ich habe da den folgenden Link bei den Schweizern entdeckt :
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| // You need a TMemo, a TButton und a NMHTTP // Man braucht ein TMemo, einen TButton und eine TNMHTTP
procedure TForm1.Button1Click(Sender: TObject); begin NMHTTP1.Get('www.swissdelphicenter.ch'); memo1.Text := NMHTTP1.Body end; |
Vielleicht hilft er Dir ja.
Moderiert von Tino: Code-Bespiel von SwissDelphiCenter eingefügt.
|
|
musiktiger 
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 15.03.03 13:57
Hi bis11,
genau die Seite hatte ich auch gefunden. Als ich das aber ausprobiert hatte kommt bei mir immer folgende Fehlermeldung:
Zitat: | Project Project1.exe raised exception class EAccessViolation with message 'Access violation at adress 0044FDCE in module 'Project1.exe'. Read of adress FFFFFFFF'. ... |
Dabei habe ich genau die Anweisungen befolgt. Ach ja, die Fehlermeldung tritt dann in folgender Zeile auf:
Quelltext 1:
| NMHTTP1.Get('www.delphi-forum.de'); |
Kannst du mir da noch weiterhelfen?
Vielen Dank aber schon mal für die Bemühungen!
Moderiert von Tino: Code- & Quote-Tags hinzugefügt.
|
|
Savage
      
Beiträge: 110
|
Verfasst: Sa 15.03.03 14:38
Hi,
schau dir mal den Beitrag an, das könnte dir evtl. helfen
www.delphi-forum.de/...ic.php?p=37871#37871
(in der Mitte der Beitrag von AndyB)
MfG
Savage[/url]
|
|
musiktiger 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 17.03.03 23:28
Vielen Dank für den Tip Savage,
aber irgendwie schmiert mir das Programm jetzt immer ab, wenn ich den Text laden will. Vielleicht kann mir jemand sagen, was ich falsch gemacht habe? Ich poste einfach mal den ganzen Quellcode, den ich mir so zusammenkopiert habe:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, NMHttp, StdCtrls;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var NMHttp1: TNMHttp; begin NMHttp1 := TNMHttp.Create(nil); NMHTTP1.Get('www.e-bay.de'); memo1.Text:=NMHttp1.Body; end;
end. |
Moderiert von Tino: Code-Tags hinzugefügt.
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
Savage
      
Beiträge: 110
|
Verfasst: Di 18.03.03 00:10
hmm, ich kann es zwar nicht testen, weil ich die FastNet Kompos net habe, aber probier das mal:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var
NMHttp1: TNMHttp;
begin
NMHttp1 := TNMHttp.Create(self); NMHTTP1.Get('www.e-bay.de'); memo1.Text:=NMHttp1.Body; nmhttp1.free;
end; |
MfG
Savage
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Di 18.03.03 00:44
Hi,
ich hatte mal vom Auftraggeber aus die Vorgabe, dass das Programm maximal 20kb groß sein soll und auch was aus dem Netz runterladen soll.
Also war ich gezwungen, was komplett ohne Komponenten zu machen. Ich hatte dann eine Funktion gefunden, die ich umschreiben konnte um so diverse Downloadfunktionen zu haben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| function GetHTTPString(const Url: string): string; var NetHandle: HINTERNET; UrlHandle: HINTERNET; Buffer: array[0..1024] of Char; BytesRead: dWord; begin Result := ''; NetHandle := InternetOpen(INETNAME, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(NetHandle) then begin UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then begin FillChar(Buffer, SizeOf(Buffer), 0); repeat Result := Result + Buffer; FillChar(Buffer, SizeOf(Buffer), 0); InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead); until BytesRead = 0; InternetCloseHandle(UrlHandle); end else InternetCloseHandle(NetHandle); end; end; |
und
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78:
| function DownloadFile(const Url: string;Target:String; sd:string): bool; var NetHandle: HINTERNET; UrlHandle: HINTERNET; Buffer: array[0..1024] of Char; BytesRead: dWord; TargetFile:File; dwBufLen, dwIndex: DWord; Buf: Pointer; fsize,GotData,Position:real; Temp,Code:Integer; begin ProcessMessages(WINDOW); NetHandle := InternetOpen(INETNAME, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); ProcessMessages(WINDOW); UpdateWindow(WINDOW); if Assigned(NetHandle) then begin
ProcessMessages(WINDOW); UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0); ProcessMessages(WINDOW); UpdateWindow(WINDOW);
if Assigned(UrlHandle) then begin AssignFile(TargetFile, Target); Rewrite(TargetFile, 1); dwIndex := 0; dwBufLen:=1024; GotData:=0; GetMem(Buf, dwBufLen);
HttpQueryInfo(UrlHandle, HTTP_QUERY_CONTENT_LENGTH, Buf, dwBufLen, dwIndex); val(StrPas(Buf),Temp,Code); fSize:=Temp; SendMessage(Progress, PBM_SETPOS, round(GotData), 0);
repeat
If EndDownload then begin InternetCloseHandle(UrlHandle); InternetCloseHandle(NetHandle); CloseFile(TargetFile); DeleteFile(PChar(Target)); result:=false; Exit; end;
ProcessMessages(WINDOW); InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead); UpdateWindow(WINDOW); BlockWrite(TargetFile, Buffer, BytesRead);
GotData:=GotData+BytesRead; Position:=PROGRESSMAX / fsize * GotData; SendMessage(Progress, PBM_SETPOS, round(Position), 0);
until BytesRead = 0;
CloseFile(TargetFile); ShellExecute(hInstance, 'open', PChar(Target), PChar(sd), nil, SW_ShowNormal);
InternetCloseHandle(UrlHandle); result:=true;
end else begin result:=false; MessageBox(WINDOW,CONNECTIONERROR,ERRORCAPTION,MB_APPLMODAL OR MB_ICONERROR OR MB_OK); end; InternetCloseHandle(NetHandle); end else begin MessageBox(WINDOW,CONNECTIONERROR,ERRORCAPTION,MB_APPLMODAL OR MB_ICONERROR OR MB_OK); result:=false; end; end; |
Du musst dann noch die WinInet Unit einbinden.
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
inselberg
      
Beiträge: 458
|
Verfasst: Do 20.03.03 01:19
|
|
chritzl
      
Beiträge: 49
WIN 98 - bald Linux! :-)
Delphi 1, 4, 6
|
Verfasst: Do 20.03.03 20:53
hallo!
TO/ ALIBI
Mit welchem Delphi hast du den geschrieben?
ich habs vierer. Hab deine src kopiert usw.
Quelltext 1:
| NetHandle := InternetOpen(INETNAME, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); |
bei mir läufts net... Fehlermeldung is:
"INETNAME" sei undefiniert...
|
|
bis11
      
Beiträge: 1247
Erhaltene Danke: 2
Apple Mac OSX 10.11
|
Verfasst: Do 20.03.03 22:28
@musiktiger
Also das Beispiel von den Schweizern funktioniert bei mir mit den FastNet-Kompos. Der einzigste Hacken dabei ist, das Du nocch in den String bei www.swissdelphicenter.ch noch das http:// eintragen musst. Dann funktioniert es.
|
|
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Fr 21.03.03 00:34
Hast du WinInet in den Uses stehen? Die Funktionen machen keine Probleme hier, Delphi 6.
|
|
chritzl
      
Beiträge: 49
WIN 98 - bald Linux! :-)
Delphi 1, 4, 6
|
Verfasst: Fr 21.03.03 13:57
Yo, "WinInet" steht... vielleicht liegts an der Version...?!?!
..wird zeit für was aktuelleres!
|
|
musiktiger 
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 22.03.03 13:12
Vielen Dank euch allen!
@savage (vom 17.03.)
genau das habe ich ausprobiert, aber das Programm scheint irgendwie abzuschmieren. Ich kann dann zwar nochmal den Button drücken, aber ich kann das Programm nicht mal mehr schließen geschweige denn, dass irgendein Quellcode angezeigt wird.
@bis11
leider funzt es auch nicht mit 'http://' davor.
Wegen FastNet: Eigentlich dürfte es doch ausreichen, wenn in NMHttp im uses stehen habe, oder?
|
|
musiktiger 
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 22.03.03 13:18
Oh man, ich bin auch ganz schön blöd!
Ich war immer zu ungeduldig und habe nicht lange genug gewartet, dabei klappt es doch wunderbar wenn man ein bissel Gedult hat.
Also vielen Dank nochmal,
vor allem bis11 und savage!
Gruß,
musiktiger
|
|
|