Autor Beitrag
Strophi
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 15.10.04 12:52 
Hallo Forum,

und jetzt die nächste Frage bezüglich der Benutzung von Komponenten in Console-Application. Das IdHTTP1 saugt sich die Source, und dann will ich sie parsen. Die beiden Komponenten sind der Parser und das dazugehörige Events-Plug-In.

Jetzt habe ich folgendes Problem:

Die Event-Handle-Prozeduren, wie ich sie sie jetzt habe, funktionieren nicht, laufen sogar auf RunTimeError 216. Ich denke, woher soll das Events-PlugIn auch wissen, wen es aufrufen soll?!?

Hier der Code:

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:
program thtest;

{$APPTYPE CONSOLE}

uses
  SysUtils,  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, DIHtmlParser, DIHtmlEventsPlugin, DIUnicode;

var  source : String;
     IdHTTP1 : TIdHTTP;

     DIHtmlParser1: TDIHtmlParser;
     DIHtmlEventsPlugin1: TDIHtmlEventsPlugin;

procedure DIHtmlEventsPlugin1Title (const Sender: TDIHtmlEventsPlugin; var Show: Boolean);
begin
      writeln ('Titel<br>');
end;

procedure DIHtmlEventsPlugin1Text(const Sender: TDIHtmlEventsPlugin; var Show: Boolean);
begin
      writeln ('Text<br>');
end;

procedure DIHtmlEventsPlugin1HtmlTag(const Sender: TDIHtmlEventsPlugin; var Show: Boolean);
begin
      writeln ('Tag<br>');
end;

begin
     WriteLn ('Content-type: text/html');
     WriteLn;
     Writeln ('<html><head></head><body>');

     IdHTTP1:=TIdHTTP.Create(nil);
     source:=IdHTTP1.Get('http://www.google.com');
     IdHTTP1.Destroy;

     DIHtmlParser1:=TDIHtmlParser.Create(nil);
     DIHtmlEventsPlugin1:=TDIHtmlEventsPlugin.Create(nil);
     DIHtmlEventsPlugin1.HtmlParser:=DIHtmlParser1;

     DIHtmlParser1.SourceBufferAsStrA:=source;
     DIHtmlParser1.ParseAll;
end.


Weiß jemand einen Rat?

mfg

Strophi

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 17.10.04 10:46 
Eigentlich ein neues Thema-->neuer Thread. ich hab mal einen erstellt und ihm einen Titel gegeben. Sollte er dir nicht zusagen, kannst Du ihn ja noch ändern ;-)

So: Du musst die Ereignis-Prozeduren natürlich auch noch dem Event zuweisen, sonst kann es gar nicht funktionieren. Die Variable für DHtmlEventsPlugin hast Du ja schon, Du musst nur noch die Event-Prozeduren zuweisen. In etwa so:
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:
program thtest;  

 
{$APPTYPE CONSOLE}  

 
uses  
  SysUtils,  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,  
  IdHTTP, DIHtmlParser, DIHtmlEventsPlugin, DIUnicode;  

 
var  source : String;  
     IdHTTP1 : TIdHTTP;  

 
     DIHtmlParser1: TDIHtmlParser;  
     DIHtmlEventsPlugin1: TDIHtmlEventsPlugin;  

 
procedure DIHtmlEventsPlugin1Title (const Sender: TDIHtmlEventsPlugin; var Show: Boolean);  
begin  
      writeln ('Titel<br>');  
end;  

 
procedure DIHtmlEventsPlugin1Text(const Sender: TDIHtmlEventsPlugin; var Show: Boolean);  
begin  
      writeln ('Text<br>');  
end;  

 
procedure DIHtmlEventsPlugin1HtmlTag(const Sender: TDIHtmlEventsPlugin; var Show: Boolean);  
begin  
      writeln ('Tag<br>');  
end;  

 
begin  
     WriteLn ('Content-type: text/html');  
     WriteLn;  
     Writeln ('<html><head></head><body>');  

 
     IdHTTP1:=TIdHTTP.Create(nil);  
     source:=IdHTTP1.Get('http://www.google.com');  
     IdHTTP1.Destroy;  

 
     DIHtmlParser1:=TDIHtmlParser.Create(nil); 
     DIHtmlEventsPlugin1:=TDIHtmlEventsPlugin.Create(nil);   
     DIHtmlEventsPlugin1.OnText:=DIHtmlEventsPlugin1Text; //!
     DIHtmlEventsPlugin1.OnTitle:=DIHtmlEventsPlugin1Title; //!
     DIHtmlEventsPlugin1.OnHtmlTag:=:=DIHtmlEventsPlugin1HtmlTag; //!
     DIHtmlEventsPlugin1.HtmlParser:=DIHtmlParser1;  

 
     DIHtmlParser1.SourceBufferAsStrA:=source;  
     DIHtmlParser1.ParseAll;  
end.

Meine Änderungen habe ich mit einem ! gekennzeichnet. Ich hoffe mal, die Ereignisse, die ich verwendet habe, stimmen ;-)