Autor |
Beitrag |
Chiller
      
Beiträge: 34
|
Verfasst: Mi 24.12.08 15:50
hallo
ich programmiere seit ca 3 monaten in der schule mit delphi 6 und bin deshalb noch nichr sehr erfahren, will jedoch ein programm schreiben, dass vorerst nur den quellcode einer website ausliest...
versucht habe ich das mit TIdHTTP, nachdem ich nun schon delphi 2005, 8, 7 personal editon und nun 7 second edition mit einer offentlich geeigneten indy 10 habe...
Mein Code:
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:
| unit UHaupt;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdHTTP, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private a : TIdHTTP; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var httpcode : string; begin httpcode:=a.Get('http://www.google.de'); Memo1.Text:=httpcode; end;
end. | wenn ich das programm nun starten will, fragt er mich nach der IdHTTP.pas, deshalb habe ich den Pfad zu der datei in meinem indy-installationsverzeichnis angegeben habe, doch dann kommt:
[quote]Project Versuch.exe raised exeption class EAccessViolation with message 'Access violation at adress 0046F49F in module 'Versuch.exe'. Read at adress 00000000' Process stopped. Use step or turn to continue.[quote]
daraufhin zeigt er hier einen fehler in der IdHTTP.pas an, wobei ein grüner pfeil davor ist:
Delphi-Quelltext 1:
| DoRequest(Id_HTTPMethodGet, AURL, nil, AResponseContent, AIgnoreReplies); |
wenn man die datei außerhalb von delphi ausführ kommt nur die fehlermeldung
Zitat: | "Access violation at adress 0046F49F in module 'Versuch.exe'. Read at adress 00000000"... |
ich hoffe jmd von euch kann mir bei diesem problem weiterhelfen...
frohe weihnachten
Chiller
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 24.12.08 15:54
|
|
stigge
      
Beiträge: 426
WinXP
Delphi 2007
|
Verfasst: Mi 24.12.08 16:22
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:
| unit UHaupt;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdHTTP, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private a : TIdHTTP; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin a := TIdHTTP.Create(nil); Memo1.Text := a.Get('http://www.google.de'); a.Free; end;
end. |
Hast vergessen zu Erzeugen, außerdem kannst das a.Get()-Ergebnis direkt dem Memo zuweisen.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 24.12.08 16:25
Deklariere a : TIdHTTP; lieber in der Prozedur selber. Und a ist ein wirklich aussagekräfiger Name für einen HTTP-Client
Delphi-Quelltext 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| { ... } procedure TForm1.Button1Click(Sender: TObject); var HTTP: TIdHTTP; httpcode : string; begin HTTP := TIdHTTP.Create; try Memo1.Text := HTTP.Get('http://www.google.de'); finally HTTP.Free; end; end; |
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Mi 24.12.08 17:48
ersteinaml danke für die antworten!
habe es nun umgeschrieben:
Code:
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdHTTP, StdCtrls;
type TForm1 = class(TForm) BStart: TButton; Memo1: TMemo; procedure BStartClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BStartClick(Sender: TObject); var HTTP: TIdHTTP; httpcode : string; begin HTTP:=TIDHTTP.Create(nil); Memo1.Text:=HTTP.Get('http://www.google.de'); HTTP.Free; end;
end. |
daraufhin sollte ich den pfad der datei IdGlaobalProtocols.pas angeben, und habe die datei wieder in meinem indy-verzeichnis gesucht, auch wenn ich gar nicht weiß weshalb ich diese pas datei überhaupt benötige...
daraufhin kam in der IdGlobalProtocols.pas in dieser zeile wieder eine fehlermeldung:
Dt := Sys.StrToInt( Fetch(Value, ADelim), 1);
was habe ich falsch gemacht?
Zuletzt bearbeitet von Chiller am Mi 24.12.08 18:23, insgesamt 1-mal bearbeitet
|
|
n-regen
      
Beiträge: 202
Erhaltene Danke: 2
|
Verfasst: Mi 24.12.08 18:05
Auf jeden Fall solltest du in deinem Post mal den Quelltext in ein Delphi-Tag packen (Quelltext markieren und dann über dem Textfeld auf "Bereiche" und dann "+" klicken).
Chiller hat folgendes geschrieben : | was habe ich falsch gemacht? |
Nichts.
Die Indy-Units rufen sich aber gegenseitig auf (deswegen hat dich Delphi nach der IdGlobalProtocols.pas gefragt). Damit Delphi die Dateien selber findet, solltest du den Ordner, in dem du Indy installiert hast, als sogenannten Bibliothekspfad hinzufügen. Dazu klickst du in Delphi (ich gehe jetzt mal von Delphi 7 aus) im Menü auf "Tools" und dann "Umgebungsoptionen", wählst den Reiter "Bibliothek" aus, klickst auf das "..." neben dem Feld "Bibliothekspfad", gibst in das Feld unten C:\Programme\Indy 10\LibD7 (oder den Ordner, in den du die Indys installiert hast) ein und klickst auf "Hinzufügen" und dann zwei mal auf "OK".
Danach sollte Delphi dich eigentlich nicht mehr nach den Units fragen.
Nils
Ach ja: Frohe Weihnachten!
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Mi 24.12.08 18:22
n-regen hat folgendes geschrieben : | Auf jeden Fall solltest du in deinem Post mal den Quelltext in ein Delphi-Tag packen (Quelltext markieren und dann über dem Textfeld auf "Bereiche" und dann "+" klicken). |
ich wusste nicht wie es geht, doch in zukunft werde ich es machen
habe ich gemacht...doch er fragt mich wieder nach dem pfad der IdglobalProtocols.pas...ich ahbe nachgeschaut, in dem order LibD7 befindet sich nur die datei IdGlobalProtocols.dcu...aber das müsste doch eigentlich reichen....
Chiller
Moderiert von Narses: Zitat repariert
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Fr 26.12.08 15:44
hat niemand eine lösung für mein problem...?
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: So 28.12.08 21:05
ich fände es auf jeden fall nett wenn amn mir überhaupt sagen kann was sache ist, ich befürche dass die indy nicht ganz ok ist, da sich die IdGlobalprotocols.duc in dem ordner befindet...doch wie schon erwähnt habe ich davon gar keine ahnung und bin für jede hilfe dankbar...
wenn ihr also irgend etwas wisst, sei es noch so dumm oder abwegig, sagt es mir bitte, sonst komme ich nämlich nicht weiter!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 28.12.08 21:09
Mit der .dcu kann Delphi offenbar nichts anfangen, und das ist der Fall, wenn diese von einer anderen Version von Delphi stammt.
Eigentlich sollte die .pas Datei aber auch irgendwo dabei sein, es ist ja ein Open Source Projekt.
Welchen Ordner hast du denn jetzt im Suchpfad eingetragen?
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Mo 29.12.08 13:56
C:\Programme\Indy 10 for Delphi 7\LibD7
das ist der pfad zu der indy mit den entsprechenden dcu's, der mir schon von delphi vorgeschalgen wurde...und trotzdem geht es nicht...!
wenn ich die pas so aus dem anderen ordner auswähle, kommt auch eine fehlermeldung, in der IdGlobalProtocols.pas...!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.12.08 14:22
Füge den anderen Ordner mit den .pas Dateien auch zum Pfad hinzu. Am besten einfach alle Odner mit .pas Dateien im Indyverzeichnis, ich weiß nicht wie das bei dir aussieht. Ich habe da 4 Ordner jeweils mit Packages und .pas Dateien (Core, Protocols, SuperCore, System).
Hast du einen Autoinstaller benutzt? Das habe ich noch nie gemacht, keine Ahnung was der macht.
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Mo 29.12.08 14:30
ich hatte nur eine datei die ich installiert habe..eine .exe und mehr musste ich nciht tun, in dem ordner waren auch noch noch 2 dll's...
bei mir sieh das so aus [url= img515.imageshack.us...screendephi7ji2.jpg] [/URL]
ich weiß jetzt nur wie bzw wo ich die anderen parts angeben soll!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.12.08 14:48
Also bei mir sieht das Indy Verzeichnis so aus:
In dem Fall wären es die vier markierten Verzeichnisse, die in den Pfad gehören, eben die, in denen sich die .pas Dateien befinden.
Was genau der Autoinstaller da installiert weiß ich nicht, ich halte nichts davon und habe ihn nie ausprobiert. 
Einloggen, um Attachments anzusehen!
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Mo 29.12.08 14:58
bei mir sieht das so aus...
[url= img230.imageshack.us...=ordnerdephimn9.png] [/URL]
du siehst ja auf dem anderne bild wie es bei mir in delphi aussieht, jetzt kann ich dort nur einen ordner angeben, und nicht mehrere...deshalb weiß ich nicht wie die anderen ordner, die man ja oben auf dem bild sieht, angeben soll!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.12.08 15:09
Nacheinander, und jeweils auf Add klicken... 
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Mo 29.12.08 16:05
ok, danke, das habe ich jetzt gemacht, dachte zuvor ich würde dann den pfad, der shcon dasteht ersetzen, da das add noch nicht"enabled"^^ war, kleiner denkfehler, dem ist ja aber nicht so...
nun kommt jedoch folgende fehlermeldung wenn ich mein programm ausführe:
Project project1.exe raised exeption class EConvertError with message 'Invalid argument to date encore.' Process stopped. Press run or stop to continue.
dabei wird in der IdGlobalProtocols.pas am ende sier Zeile ein fehler anzezeigt
Result := Sys.EncodeDate(Yr, Mo, Dt);
mein code sieht dabei so aus:
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdHTTP, StdCtrls;
type TForm1 = class(TForm) BStart: TButton; Memo1: TMemo; procedure BStartClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BStartClick(Sender: TObject); var HTTP: TIdHTTP; begin HTTP:=TIDHTTP.Create(nil); Memo1.Text:=HTTP.Get('http://www.google.de'); HTTP.Free; end;
end. |
ich hoffe du/jmd kann mir helfen, was ich jetzt noch tun muss...die pas hat er jetzt ja schon mal gefunden...jetzt weiß ich nur noch nicht wo der fehler liegt...!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.12.08 16:17
Da sehe ich erstmal keinen Fehler.
Die Fehlermeldung sagt mir im Moment nichts, keine Ahnung wo die her kommt.
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Mo 29.12.08 16:18
hm, ok...kannd ie indy irgendwie beschädigt sein...!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 29.12.08 16:23
Ich weiß wie gesagt nicht, was der Autoinstaller macht, aber eigentlich gehe ich davon aus, dass der funktioniert. Ich nutze Delphi 7 so gut wie nicht mehr wegen der im Vergleich unkomfortablen Oberfläche, aber ich kann man schauen, ob ich was finde. Im virtuellen PC hab ich D7 ja noch.
Es gibt da ja auch Probleme auf der Website, da funktioniert ja kaum ein Download, was das Testen erschwert.
|
|
|