Autor Beitrag
musiktiger
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
ausblenden 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! :cry:

Gruß,
musiktiger

Moderiert von user profile iconTino: Code-Tags hinzugefügt.
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Sa 15.03.03 12:29 
Hi und willkommen im Delphi-Forum,

ich habe da den folgenden Link bei den Schweizern entdeckt :

ausblenden 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 user profile iconTino: Code-Bespiel von SwissDelphiCenter eingefügt.
musiktiger Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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:
ausblenden 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 user profile iconTino: Code- & Quote-Tags hinzugefügt.
Savage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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:
ausblenden volle Höhe 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:
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
    { Private declarations }
  public
    { Public declarations }
  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 user profile iconTino: Code-Tags hinzugefügt.
Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Savage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110



BeitragVerfasst: Di 18.03.03 00:10 
hmm, ich kann es zwar nicht testen, weil ich die FastNet Kompos net habe, aber probier das mal:

ausblenden 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);  {dadurch wird es (glaub ich) zum bestandteil der Form (Form ist eigentümer)}
 NMHTTP1.Get('www.e-bay.de');  
 memo1.Text:=NMHttp1.Body; 
 nmhttp1.free;

end;


MfG
Savage

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: 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:
ausblenden 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..1024of Char;
  BytesRead: dWord;
begin
  Result := '';
  NetHandle := InternetOpen(INETNAME, INTERNET_OPEN_TYPE_PRECONFIG, nilnil0);

  if Assigned(NetHandle) then 
  begin
    UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil0, INTERNET_FLAG_RELOAD, 0);

    if Assigned(UrlHandle) then
      { UrlHandle valid? Proceed with download }
    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
      { UrlHandle is not valid. Raise an exception. }
    InternetCloseHandle(NetHandle);
  end;
end;

und
ausblenden volle Höhe 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:
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..1024of 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, nilnil0);
  ProcessMessages(WINDOW);
  UpdateWindow(WINDOW);
  if Assigned(NetHandle) then
  begin

    ProcessMessages(WINDOW);
    UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil0, 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 user profile iconTino: Code- durch Delphi-Tags ersetzt.
inselberg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458



BeitragVerfasst: Do 20.03.03 01:19 
f1: twebbrowser
chritzl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 49

WIN 98 - bald Linux! :-)
Delphi 1, 4, 6
BeitragVerfasst: Do 20.03.03 20:53 
hallo!

TO/ ALIBI

Mit welchem Delphi hast du den geschrieben?

ich habs vierer. Hab deine src kopiert usw.

ausblenden Quelltext
1:
NetHandle := InternetOpen(INETNAME, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);					


bei mir läufts net... Fehlermeldung is:
"INETNAME" sei undefiniert...
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Fr 21.03.03 00:34 
Hast du WinInet in den Uses stehen? Die Funktionen machen keine Probleme hier, Delphi 6.
chritzl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 49

WIN 98 - bald Linux! :-)
Delphi 1, 4, 6
BeitragVerfasst: Fr 21.03.03 13:57 
Yo, "WinInet" steht... vielleicht liegts an der Version...?!?!

..wird zeit für was aktuelleres!
musiktiger Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 22.03.03 13:18 
Oh man, ich bin auch ganz schön blöd! :oops:
Ich war immer zu ungeduldig und habe nicht lange genug gewartet, dabei klappt es doch wunderbar wenn man ein bissel Gedult hat. :D

Also vielen Dank nochmal,
vor allem bis11 und savage!

Gruß,
musiktiger