![]() |
TWebbrowser Werte in Lable.Caption darstellen
Hallo zusammen,
ich bin noch recht neu hier unterwegs und brauche einmal Hilfe. Ich bin dabei ein kleines Tool zu schreiben wo ich Eingabewerte einer TEdit Übergebe und mittels TWebbrowse anzeigen lasse. Klappt auch soweit gut. Jetzt bekomme ich die Seite angezeigt jedoch brauche ich einen Wert der auf der Seite steht in einem lable.caption bez. geht auch TEdit. Folgenes bekomme ich im TWebbrowse als Quelltext:
Delphi-Quellcode:
Davon brauche ich nur ErrorCode und den Wert (in diesem Fall 215) dieser kann sich aber ändern.
<params>
<param> <value><array><data> <value><string>UstId_1</string></value> <value><string></string></value> </data></array></value> </param> <param> <value><array><data> <value><string>ErrorCode</string></value> <value><string>215</string></value> </data></array></value> </param> Und so öffne ich den TWebbrowser:
Delphi-Quellcode:
Vielen Dank euch schonmal !!!
procedure TTFrmMain.btnAnfrageSendenClick(Sender: TObject);
begin csWeb.Navigate('http://evatr.bff-online.de/evatrRPC?UstId_1='+eUSTID1.Text+ '&UstId_2='+eUSTID2.Text+ '&Firmenname='+eFirmenname.Text+ '&Ort='+eOrt.Text+ '&PLZ='+ePlz.Text+ '&Strasse='+eStrasse.Text+ '&Druck='+eDruck.Text); end; end. Und denkt dran .. bin total neu hier :))) Nicht gleich erschlagen :) lach ... |
Re: TWebbrowser Werte in Lable.Caption darstellen
Herzlich willkommen in der Delphi-PRAXiS !
1. Quelltext auslesen (Beispiele finden sich in der DP), 2. per Pos, Copy, etc. den String herausschneiden. Falls die Inhalte der Webseite sonst visuell nicht dargestellt werden müssen, würden sich die Indy Komponenten besser eignen. |
Re: TWebbrowser Werte in Lable.Caption darstellen
Vielen Dank dafür, jedoch scheitert es schon an dem Auslesen des Quelltextes. Ich bekomme immer einen Fehler.
Hier der Code schonmal:
Delphi-Quellcode:
Der Fehler kommt hier:
unit uCSUSTIDtools;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw, ActiveX, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,StrUtils ; type TTFrmMain = class(TForm) eUSTID1: TEdit; eUSTID2: TEdit; eFirmenname: TEdit; eOrt: TEdit; ePLZ: TEdit; eStrasse: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; btnAnfrageSenden: TButton; csWeb: TWebBrowser; cmbDrucken: TComboBox; Label8: TLabel; Label9: TLabel; Label10: TLabel; eRGueltigAb: TEdit; Label11: TLabel; eRGueltigBis: TEdit; Label12: TLabel; eRFirmenname: TEdit; Label13: TLabel; eROrt: TEdit; Label14: TLabel; eRPLZ: TEdit; Label15: TLabel; eRStrasse: TEdit; Button1: TButton; eRAnfrangeAm: TEdit; Label16: TLabel; Label17: TLabel; eRAnfrageUm: TEdit; Label18: TLabel; eRErrorCode: TEdit; Panel1: TPanel; Label19: TLabel; Label20: TLabel; Memo1: TMemo; IdHTTP1: TIdHTTP; procedure btnAnfrageSendenClick(Sender: TObject); private public { Public-Deklarationen } end; var TFrmMain: TTFrmMain; implementation uses mshtml; {$R *.dfm} // CEigene function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean; var ps: IPersistStreamInit; ss: TStringStream; sa: IStream; s: string; begin ps := WebBrowser.Document as IPersistStreamInit; s := ''; ss := TStringStream.Create(s); try sa := TStreamAdapter.Create(ss, soReference) as IStream; Result := Succeeded(ps.Save(sa, True)); if Result then ACode.Add(ss.Datastring); finally ss.Free; end; end; procedure TTFrmMain.btnAnfrageSendenClick(Sender: TObject); var htmlcode: string; begin csWeb.Navigate('http://evatr.bff-online.de/evatrRPC?UstId_1='+eUSTID1.Text+ '&UstId_2='+eUSTID2.Text+ '&Firmenname='+eFirmenname.Text+ '&Ort='+eOrt.Text+ '&PLZ='+ePlz.Text+ '&Strasse='+eStrasse.Text+ '&Druck='+cmbDrucken.Text); WB_GetHTMLCode(csWeb, Memo1.Lines); end; end.
Delphi-Quellcode:
Das hier ist die Fehlermeldung dann:
Result := Succeeded(ps.Save(sa, True));
--------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt pUSTIDTool.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 004BD4AA in Modul 'pUSTIDTool.exe'. Lesen von Adresse 00000000' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- |
Re: TWebbrowser Werte in Lable.Caption darstellen
Hallo,
ich würde auch die erwähnten Indy-Komponenten nutzen. Dein WebBrowser ist aktuell sicher versteckt, oder? Das wäre sehr schlampig und langsam. Mit den Indys geht das ganz einfach. Das folgende Beispiel zeigt die dynamische Erzeugung von TIdHTTP. Du kannst diese Komponente aber auch auf dein Formular ziehen und verwenden.
Delphi-Quellcode:
Grüße, Matze
var
MyIdHTP: TIdHTTP; HTMLCode: string; // ... MyIdHTTP := TIdHTTP.Create; try HTMLCode := MyIdHTTP.Get('deine URL'); finally FreeAndNil(MyIdHTTP); end; |
Re: TWebbrowser Werte in Lable.Caption darstellen
Danke Matze,
läuft super und auch schnell in das memo1.text Feld rein. Jetzt muss ich nur noch wie oben beschrieben die Daten auslesen des Error_Code und die Zahl dazu. Mit PosEx() wurde schon genannt, jedoch frag ich mich gerade wo genau ich den Ansatz habe das ich genau die Stelle rausbekomme und in ein TEdit Feld den Wert reinbekomme |
Re: TWebbrowser Werte in Lable.Caption darstellen
So ich habs rausbekommen mit Copy geht das recht gut.
Jedoch gebe ich dort ja statische Positionswerte an. Ich bräuchte sowas wie "Suche nach PLZ" dann zähle 10 zeilen weiter... nimm ab dort die kommenden 3 zeichen und schreib mir die ins TEdit feld... |
Re: TWebbrowser Werte in Lable.Caption darstellen
Hallo,
wenn Du dasda hast:
Code:
ersetze zuerst alle < und > durch einen Zeilenumbruch und < bzw. Zeilenumbruch und >.
<params>
<param> <value><array><data> <value><string>UstId_1</string></value> <value><string></string></value> </data></array></value> </param> <param> <value><array><data> <value><string>ErrorCode</string></value> <value><string>215</string></value> </data></array></value> </param> Danach hast Du dann:
Code:
Nun lösche von "unten" beginnend alle Zeilen, die mit < beginnen und Du erhälst:
<params>
<param> <value> <array> <data> <value> <string> UstId_1 </string> </value> <value> <string> </string> </value> </data> </array> </value> </param> <param> <value> <array> <data> <value> <string> ErrorCode </string> </value> <value> <string> 215 </string> </value> </data> </array> </value> </param>
Code:
Jetzt suchst Du noch die Zeile mit dem Text ErrorCode und nimmst aus der nächsten Zeile den gewünschten Wert.
UstId_1
ErrorCode 215 |
Re: TWebbrowser Werte in Lable.Caption darstellen
hmmm ... hört sich logisch an nur mit der Umsetztung scheiert es gerade :))) nen kleenen Codeschnippsel ? :))))
|
Re: TWebbrowser Werte in Lable.Caption darstellen
Hallo,
Zeichenfolgen ersetzen geht z. B. mit:
Delphi-Quellcode:
Damit hast Du aus dem < einen Zeilenvorschub plus < gemacht.
memo.text := AnsiReplaceText(Memo.Text,'<',#13 + '<')
Zeilen Löschen könnte in etwa so gehen:
Delphi-Quellcode:
Wenn Du statt des Memos eine TStringList (oder Nachfahren) benutzt, dann kannst Du die Zeile mit dem Text ErrorCode über
for i := Memo.Lines.Count - 1 DownTo 0 do if Copy(memo.lines[i],1,1) = '<' then memo.lines.Delete(i);
Delphi-Quellcode:
erhalten und den ErrorCode selbst dann mit
Position := Stringliste.IndexOf('ErrorCode')
Delphi-Quellcode:
Alles ungetestet nur hingedaddelt.
ErrorCode := Stringliste.IndexOf('ErrorCode') + 1
|
Re: TWebbrowser Werte in Lable.Caption darstellen
2 Verbesserungsvorschläge:
Delphi-Quellcode:
Memo.Text := {StrUtils.}AnsiReplaceText(Memo.Text,'<',sLineBreak + '<');
Delphi-Quellcode:
Auch nur heruntergetippt und nicht getestet.
for i := Memo.Lines.Count - 1 DownTo 0 do
if (Trim(memo.lines[i]) = '') or (Trim(memo.lines[i])[1] = '<') then memo.lines.Delete(i); |
Re: TWebbrowser Werte in Lable.Caption darstellen
Soweit super .. jedoch löscht er jetzt alles raus weil im Memo.Text jetzt es so steht
Delphi-Quellcode:
In einer Zeile und nicht
<string>ErrorCode
Delphi-Quellcode:
Deshalb löscht das Ding nun auch den ErrorCode raus .
<string>
ErrorCode Wie bekomme ich das hin das entweder ErrorCode runtergesetzt wird nach dem <String> oder er wirklich nur <string> löscht. |
Re: TWebbrowser Werte in Lable.Caption darstellen
Hallo,
< und > ersetzen und nicht nur < |
Re: TWebbrowser Werte in Lable.Caption darstellen
Öhmn okay ... wo denn ? :) *dummfrag* ;)
|
Re: TWebbrowser Werte in Lable.Caption darstellen
Delphi-Quellcode:
Oder alles auf einmal:
Memo.Text := AnsiReplaceText(Memo.Text,'<',sLineBreak + '<');
Memo.Text := AnsiReplaceText(Memo.Text,'>','>' + sLineBreak);
Delphi-Quellcode:
Memo.Text := AnsiReplaceText(AnsiReplaceText(Memo.Text,'<',sLineBreak + '<'),'>','>' + sLineBreak);
|
Re: TWebbrowser Werte in Lable.Caption darstellen
Ich würde das so machen...
Delphi-Quellcode:
var
i : Integer; Code : String; begin Code := ''; for i := Memo1.Lines.Count - 1 downto 0 do if AnsiPos('ErrorCode', Memo1.Lines.Strings[i]) > 0 then begin Code := Memo1.Lines.Strings[i + 1]; Code := StringReplace(Code, '/', '', [rfReplaceAll]); Code := StringReplace(Code, '<value>', '', [rfReplaceAll]); Code := StringReplace(Code, '<string>', '', [rfReplaceAll]); break; end; ShowMessage(Code); |
Re: TWebbrowser Werte in Lable.Caption darstellen
Danke schonmal dafür, jedoch löscht er jetzt ALLES raus :)))
und lässt nicht die Feldwerte stehen :/( |
Re: TWebbrowser Werte in Lable.Caption darstellen
Dann zeig doch einmal den aktuellen Code.
|
Re: TWebbrowser Werte in Lable.Caption darstellen
Hier der ganze Code ... hab nen bisschen auskommentiert und so was ich mal probiert hatte also davon nicht stören lassen
Delphi-Quellcode:
unit uCSUSTIDtools;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw, ActiveX, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,StrUtils ; type TTFrmMain = class(TForm) eUSTID1: TEdit; eUSTID2: TEdit; eFirmenname: TEdit; eOrt: TEdit; ePLZ: TEdit; eStrasse: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; btnAnfrageSenden: TButton; cmbDrucken: TComboBox; Label8: TLabel; Label9: TLabel; Label10: TLabel; eRGueltigAb: TEdit; Label11: TLabel; eRGueltigBis: TEdit; Label12: TLabel; eRFirmenname: TEdit; Label13: TLabel; eROrt: TEdit; Label14: TLabel; eRPLZ: TEdit; Label15: TLabel; eRStrasse: TEdit; Button1: TButton; eRAnfrangeAm: TEdit; Label16: TLabel; Label17: TLabel; eRAnfrageUm: TEdit; Label18: TLabel; eRErrorCode: TEdit; Panel1: TPanel; Label19: TLabel; Label20: TLabel; IdHTTP1: TIdHTTP; lErrorCode: TLabel; Memo1: TMemo; procedure btnAnfrageSendenClick(Sender: TObject); private public { Public-Deklarationen } end; var TFrmMain: TTFrmMain; implementation uses mshtml; {$R *.dfm} // CEigene function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean; var ps: IPersistStreamInit; ss: TStringStream; sa: IStream; s: string; begin ps := WebBrowser.Document as IPersistStreamInit; s := ''; ss := TStringStream.Create(s); try sa := TStreamAdapter.Create(ss, soReference) as IStream; Result := Succeeded(ps.Save(sa, True)); if Result then ACode.Add(ss.Datastring); finally ss.Free; end; end; procedure TTFrmMain.btnAnfrageSendenClick(Sender: TObject); var MyIdHTTP: TIdHTTP; HTMLCode: string; kompletterCode :string; RError,RGueltigBis,RGuelitgAb,RAnfrageAm,RAnfrageUm :string; s: String; errorcode: string; i: integer; begin // Abfrage der Felder für die Eingabe die dürfen nicht leer sein (* If (eUSTID1.text = '') or (eUSTID2.text = '') or (eFirmenname.text = '') or (eOrt.text = '') or (ePlz.text = '') or (eStrasse.text = '') or (cmbDrucken.text = '') then begin showmessage('Die Eingabe weist Fehler auf. Bitte prüfen Sie die Eingabe.'); exit; end; *) // Anfrage zur USTID Seite stellen und in das Memo1 Feld schreiben. MyIdHTTP := TIdHTTP.Create; try HTMLCode := MyIdHTTP.Get('http://evatr.bff-online.de/evatrRPC?UstId_1='+eUSTID1.Text+ '&UstId_2='+eUSTID2.Text+ '&Firmenname='+eFirmenname.Text+ '&Ort='+eOrt.Text+ '&PLZ='+ePlz.Text+ '&Strasse='+eStrasse.Text+ '&Druck='+cmbDrucken.Text); memo1.Text := HTMLCode; for i := Memo1.Lines.Count - 1 downto 0 do if AnsiPos('ErrorCode', Memo1.Lines.Strings[i]) > 0 then begin Memo1.text := Memo1.Lines.Strings[i + 1]; Memo1.text := StringReplace(memo1.Text, '/', '', [rfReplaceAll]); Memo1.text := StringReplace(memo1.Text, '<value>', '', [rfReplaceAll]); Memo1.text := StringReplace(memo1.Text, '<string>', '', [rfReplaceAll]); break; end; ShowMessage(memo1.text); // memo1.text := {StrUtils.}AnsiReplaceText(HTMLCode,'<',sLineBreak + '<'); //for i := Memo1.Lines.Count - 1 DownTo 0 do // if (Trim(memo1.lines[i]) = '') or (Trim(memo1.lines[i])[1] = '<') then // memo1.lines.Delete(i); //s := AnsiReplaceText(HTMLCode,'<',#13 + '<'); //ErrorCode := s.IndexOf('ErrorCode') + 1 ; //ShowMessage(memo1.text); (* s := HtmlCode; // Hinweiss hier: 1. Zahl ist AB Zeichen und 2. Zahl ist WIEVIELE zeichen RError := Copy(s, 231, 3); RGuelitgAb := Copy(s, 1582,3); RGueltigBis := Copy(s, 1582,3); RAnfrageAm := Copy(s, 905,10); RAnfrageUm := Copy(s, 1316, 8); // Fehlercodes umwanden in Texte . Fehlercodes stehen auf [url]http://evatr.bff-online.de/eVatR/xmlrpc/codes[/url] RError := StringReplace(RError, '215', 'Ihre Anfrage enthält nicht alle notwendigen Angaben für eine einfache Bestätigungsanfrage (Ihre deutsche USt-IdNr. und die ausl. USt-IdNr.).Ihre Anfrage kann deshalb nicht bearbeitet werden. ', [rfReplaceAll, rfIgnoreCase]); RError := StringReplace(RError, '200', 'Die angefragte USt-IdNr. ist gültig. ', [rfReplaceAll, rfIgnoreCase]); eRErrorCode.Text := RError; lErrorCode.Caption := RError; eRGueltigAb.Text := RGuelitgAb; eRAnfrangeAm.Text := RAnfrageAm; eRAnfrageUm.Text := RAnfrageUm; // Umwandeln der Codes in Werte // s := HtmlCode; // s := StringReplace(s, '215', 'Falscher Wert', [rfReplaceAll, rfIgnoreCase]); // ShowMessage(s); *) finally FreeAndNil(MyIdHTTP); end; end; end. |
Re: TWebbrowser Werte in Lable.Caption darstellen
Zitat:
|
Re: TWebbrowser Werte in Lable.Caption darstellen
Ist eigentlich schon jemandem aufgefallen, daß es hier stark nach XML/RPC riecht?
|
Re: TWebbrowser Werte in Lable.Caption darstellen
Also nur zu Info.
Ich steuere diese Schnittstelle an : ![]() und das ist eine XML-RPC ja ! |
Re: TWebbrowser Werte in Lable.Caption darstellen
War ja nur als Hinweis auf etwas:
- hier versucht man grade eine XML-Datei mit 'ner Stringliste zu verarbeiten ... warum also nicht einfach als XML behandeln? |
Re: TWebbrowser Werte in Lable.Caption darstellen
Nun verlink schon Dein komisches himxml, damit es Ruhe hat :tongue:
|
Re: TWebbrowser Werte in Lable.Caption darstellen
Kann mir denn nu keiner hier helfen wie ichs machen kann ?!? :-( *hilföööö*
|
Re: TWebbrowser Werte in Lable.Caption darstellen
Zitat:
oder nicht?? Gruß K-H |
Re: TWebbrowser Werte in Lable.Caption darstellen
Klar war das eindeutig funktioniert aber nicht.
Das memo1.text ist komplett geleer und ich habe keine Inhalte darin. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz