Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TWebbrowser Werte in Lable.Caption darstellen (https://www.delphipraxis.net/147032-twebbrowser-werte-lable-caption-darstellen.html)

cobus_tschulz 31. Jan 2010 16:37


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:
<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>
Davon brauche ich nur ErrorCode und den Wert (in diesem Fall 215) dieser kann sich aber ändern.

Und so öffne ich den TWebbrowser:

Delphi-Quellcode:
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.
Vielen Dank euch schonmal !!!
Und denkt dran .. bin total neu hier :))) Nicht gleich erschlagen :) lach ...

toms 1. Feb 2010 08:12

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.

cobus_tschulz 1. Feb 2010 08:36

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:
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.
Der Fehler kommt hier:

Delphi-Quellcode:
 Result := Succeeded(ps.Save(sa, True));
Das hier ist die Fehlermeldung dann:
---------------------------
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
---------------------------

Matze 1. Feb 2010 08:41

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:
var
  MyIdHTP: TIdHTTP;
  HTMLCode: string;

// ...

MyIdHTTP := TIdHTTP.Create;
try
  HTMLCode := MyIdHTTP.Get('deine URL');
finally
  FreeAndNil(MyIdHTTP);
end;
Grüße, Matze

cobus_tschulz 1. Feb 2010 09:06

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

cobus_tschulz 1. Feb 2010 10:08

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...

nahpets 1. Feb 2010 10:35

Re: TWebbrowser Werte in Lable.Caption darstellen
 
Hallo,

wenn Du dasda hast:
Code:
<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>
ersetze zuerst alle < und > durch einen Zeilenumbruch und < bzw. Zeilenumbruch und >.
Danach hast Du dann:
Code:
<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>
Nun lösche von "unten" beginnend alle Zeilen, die mit < beginnen und Du erhälst:
Code:
UstId_1
ErrorCode
215
Jetzt suchst Du noch die Zeile mit dem Text ErrorCode und nimmst aus der nächsten Zeile den gewünschten Wert.

cobus_tschulz 1. Feb 2010 10:51

Re: TWebbrowser Werte in Lable.Caption darstellen
 
hmmm ... hört sich logisch an nur mit der Umsetztung scheiert es gerade :))) nen kleenen Codeschnippsel ? :))))

nahpets 1. Feb 2010 11:01

Re: TWebbrowser Werte in Lable.Caption darstellen
 
Hallo,

Zeichenfolgen ersetzen geht z. B. mit:
Delphi-Quellcode:
memo.text := AnsiReplaceText(Memo.Text,'<',#13 + '<')
Damit hast Du aus dem < einen Zeilenvorschub plus < gemacht.

Zeilen Löschen könnte in etwa so gehen:
Delphi-Quellcode:
for i := Memo.Lines.Count - 1 DownTo 0 do if Copy(memo.lines[i],1,1) = '<' then memo.lines.Delete(i);
Wenn Du statt des Memos eine TStringList (oder Nachfahren) benutzt, dann kannst Du die Zeile mit dem Text ErrorCode über
Delphi-Quellcode:
Position := Stringliste.IndexOf('ErrorCode')
erhalten und den ErrorCode selbst dann mit
Delphi-Quellcode:
ErrorCode := Stringliste.IndexOf('ErrorCode') + 1
Alles ungetestet nur hingedaddelt.

DeddyH 1. Feb 2010 12:35

Re: TWebbrowser Werte in Lable.Caption darstellen
 
2 Verbesserungsvorschläge:
Delphi-Quellcode:
Memo.Text := {StrUtils.}AnsiReplaceText(Memo.Text,'<',sLineBreak + '<');
Delphi-Quellcode:
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);
Auch nur heruntergetippt und nicht getestet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz