![]() |
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); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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