Einzelnen Beitrag anzeigen

Matthias-k

Registriert seit: 7. Jul 2005
Ort: Freiberg
75 Beiträge
 
Delphi 7 Professional
 
#1

aktuallisierungsproblem wegen timer

  Alt 28. Jun 2009, 01:44
hello,

also, es ist nun halb 3 und ich komm ne mehr weiter...

folgendes problem: per timer hole ich mir von einer website den kompletten quelltext. dies geschieht alle 0,5 sek...
dies ist für mich wichtig, da ständig neue daten darüber kommen.

diese daten sind insofern bereits ausgewertet und lade diese in ein memo.

dies passiert mit diesen 3 proceduren:
Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
var
  SList1, SList2 : TStringList;
  IpStream: IPersistStreamInit;
  AStream: TMemoryStream;
  iw: IWebbrowser2;
  i : integer;
begin
  SList1 := TStringList.Create;
  SList2 := TStringList.Create;
  iw := GetFrame(1);
  AStream := TMemoryStream.Create;
  try
    IpStream := iw.document as IPersistStreamInit;
    if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then
    begin
      AStream.Seek(0, 0);
      SList1.LoadFromStream(AStream);
      SList2.Text := HtmlToText(SList1.Text);
      Memo1.lines.Clear;
      Memo1.Lines.Add(slist2.text);
    end;
  except
  end;
  AStream.Free;
  SList1.Free;
  SList2.Free;
end;

//-------------------------------------------------

function TForm1.GetFrame(FrameNo: Integer): IWebbrowser2;
var
  OleContainer: IOleContainer;
  enum: IEnumUnknown;
  unk: IUnknown;
  Fetched: PLongint;
begin
  if Assigned(Webbrowser1.document) then
  begin
    Fetched := nil;
    OleContainer := Webbrowser1.Document as IOleContainer;
    OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
    Enum.Skip(FrameNo);
    Enum.Next(1, Unk, Fetched);
    Result := Unk as IWebbrowser2;
  end
  else
    Result := nil;
end;

//-------------------------------------------------

function TForm1.HtmlToText(const _html: string): string;
var WebBrowser: TWebBrowser;
   Document: IHtmlDocument2;
   Doc: OleVariant;
   v: Variant;
   Body: IHTMLBodyElement;
   TextRange: IHTMLTxtRange;
begin
   Result := '';

   WebBrowser := TWebBrowser.Create(nil);
   webbrowser.Silent := true;
   try
     Doc := 'about:blank';
     WebBrowser.Navigate2(Doc);
     Document := WebBrowser.Document as IHtmlDocument2;

     if (Assigned(Document)) then
     begin
       v := VarArrayCreate([0, 0], varVariant);
       v[0] := _html;
       Document.Write(PSafeArray(TVarData(v).VArray));
       Document.Close;

       Body := Document.body as IHTMLBodyElement;
       TextRange := Body.createTextRange;
       Result := TextRange.text;
     end;
   finally
     WebBrowser.Free;
   end;
end;
das klappt wunderbar. nur hab ich das problem, das, wenn ich mit der maus über das memo control geh, flackert der mauszeiger. des weiteren verliert mein control, was zur befehlssteuerung dient(ein tedit), sofort den focus, was eine befehlseingabe schlichtweg unmöglich macht.

desweiteren ist es, so scheint es mir, eine recht resourcenfressende angelegenheit. kann ich da noch was rausholen an leistungsfähigkeit bezüglich dieser 3 proceduren?

oder hat jemand eine idee, die mir gar nicht geläufig ist?

mfg matthias


Gebt Trollen keine Chance!!!
  Mit Zitat antworten Zitat