Einzelnen Beitrag anzeigen

Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Problem mit Zeichen im RichEdit

  Alt 26. Jan 2011, 13:49
hallo zusammen.

ich möchte aus einer HTML seite daten lesen.

ich habe mir eine unit geschrieben :

Delphi-Quellcode:
unit htmlFuncts;
interface
uses MSHTML, ActiveX, Dialogs, windows, sysutils, stdctrls, forms, classes, comCtrls, commctrl;
function GetDocumentFromFile(const markup: WideString): IDispatch;
function GetHtmlText(const markup : widestring; ElementName: string = ''; HTMLText : boolean = false): string;
procedure LadeHTMltoTable(memo : TRichEdit; Liste : TListView);

implementation

procedure LadeHTMltoTable(memo : TRichEdit; Liste : TListView);
var ProcessForm : TForm;
    Label1 : TProgressBar;
  i,j: Integer;
begin
  ProcessForm := Tform.Create(nil);
  ProcessForm.Height := 80;
  ProcessForm.Width := 250;
  ProcessForm.FormStyle := fsStayOnTop;
  ProcessForm.Caption := 'Vortschritt';
  Label1 := TProgressBar.Create(ProcessForm);
  Label1.Min := 0;
  Label1.max := Memo.lines.Count;
  Label1.Top := 12;
  Label1.Left := 12;
  Label1.Width := 220;
  Label1.height := 15;
  ProcessForm.Position := poMainFormCenter;
  ProcessForm.Show;
  Label1.Parent := ProcessForm;
  label1.show;
  j := 0;
  for i := 0 to Memo.lines.Count - 1 do
  begin
    Label1.stepby(1);
    ProcessForm.Update;
    Label1.refresh;
    sleep(5);
  end;
  ProcessForm.Release;
end;

function GetDocumentFromFile(const markup: WideString): IDispatch;
var
  doc: OleVariant;
  f : TextFile;
  TextString : Widestring;
begin
  AssignFile(f, Markup);
  Reset(f);
  Result := CoHtmlDocument.Create;
  doc := Result;
  doc.Open;
  while not eof(f) do
  begin
    readln(f, textstring);

    doc.write(textstring);
  end;
  doc.Close;
  CloseFile(f);
end;


function GetHtmlText(const markup: widestring; ElementName: string = ''; HTMLText : boolean = false): string;
var
 m_pHtmlDoc2 : IHTMLDocument2;
 HTMLElement : IHTMLElement;
 HTMLTxtRange : IHTMLTxtRange;
begin
 result := '';
 try
     m_pHtmlDoc2 := GetDocumentFromFile(Markup) as IHTMLDocument2; // document get
     if assigned(m_pHtmlDoc2) then begin
       if ElementName = 'then
         HTMLElement := m_pHtmlDoc2.body as IHTMLElement // select body for all text
       else
         HTMLElement := m_pHtmlDoc2.all.item(ElementName,0) as IHTMLElement;

       if assigned(HTMLElement) then begin // check
         m_pHtmlDoc2.selection.empty; // clear old selection
         HTMLTxtRange := IHTMLTxtRange(m_pHtmlDoc2.selection.createRange);
         if assigned(HTMLTxtRange) then begin
           HTMLTxtRange.moveToElementText(HTMLElement); // move selection to Element
           HTMLTxtRange.select; // select
           if HTMLText then
             result := HTMLTxtRange.htmltext // get the TEXT
           else
             result := HTMLTxtRange.text; // get the PLAIN TEXT
           m_pHtmlDoc2.selection.empty; // remove selection
         end;
       end;
     end;
 except
  on E : Exception do
      ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
 end;
end;

end.
aufgerufen wird folgendes :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   old_size := 0;
  New_size := 0;
  old_File := ExtractFilePath(ParamStr(0)) + 'akt.xml';
  new_file := ExtractFilePath(ParamStr(0)) + 'akt_old.xml';
  tmpfile := new_File;
  GetInetFile('http://eu.battle.net/wow/de/guild/die-todeskrallen/legenden%20der%20horde/roster', tmpFile,NIL);
  RichEdit1.Text := GetHtmlText(tmpfile, 'roster', checkbox1.Checked);
end;
Memo heissen die Variablen da es ursprünglich ein Memo war und ich dachte das ein RichEdit das problem evtl lösen kann

Problem ist das sonderzeichen wie Ö, oder anderen zeichen hinterher im RichEdit als hieroglyphen angezeigt.
bsp : aus Wöchentlich macht es im RichEdit dann Wöchentlich.

ich weiss nich an welcher stelle ich dieses Problem lösen kann.

Denn nachher soll dann aus dem Gelesenen Text weitere details ausgelesen werden und da muss der richtige zeichensatz stimmen.

Kann es sein das bei der Function GetHtmlText etwas angepasst werden kann bzw muss um dieses Problem zu lösen ?

Bin für Jeden rat dankbar.

gruss Sascha
Sascha Nickel
Man muss die Dinge nehmen wie sie kommen, man kann aber auch dafür sorgen das die dinge so kommen wie man sie nehmen möchte.
  Mit Zitat antworten Zitat