Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Text in Memo finden (https://www.delphipraxis.net/91759-text-memo-finden.html)

Tommy1988 10. Mai 2007 16:07

Re: Text in Memo finden
 
Halöle, danke an euch ALLE. hat gut geklappt.

Habe mich auch länger jetzt mit Strings ersetzen beschäftigt, nur leider finde ich für mein Problem keine Lösung.

Delphi-Quellcode:
var Text: String;
begin
  Text := Memo1.Text;
  Text := StringReplace(text, '<head>', '<head>'+Edit1.Text+ []);
end;
Ich möchte gerne im Memo das Tag <head> aufsuchen, und AB <head> den inhalt von ein Paar Editfeldern hinzufügen.

So wie ich es probiert habe, siehe Code, klappt es nicht.

Ihr werdet sicher über den Code lachen, aber anders weis ich nicht wie das gehen soll.

Blackheart 10. Mai 2007 16:17

Re: Text in Memo finden
 
Ein Blick in die Delphihilfe hätte das Problem wahrscheinlich gelöst. :wink:
Delphi-Quellcode:
StringReplace(text, '<head>', '<head>' + Edit1.Text, [rfReplaceAll, rfIgnoreCase]);

joachimd 10. Mai 2007 16:28

Re: Text in Memo finden
 
Zitat:

Zitat von Blackheart
Ein Blick in die Delphihilfe hätte das Problem wahrscheinlich gelöst. :wink:
Delphi-Quellcode:
StringReplace(text, '<head>', '<head>' + Edit1.Text, [rfReplaceAll, rfIgnoreCase]);

reicht nicht!
@Tommy:
Such Dir die Positionen von <HEAD> und </HEAD> und bastel Dir einen String über Copy zusammen:

Delphi-Quellcode:
function ReplaceBetween(Tag1, Tag2, Text, NewText: String): String;
var
  iTag1, iTag2: integer;
begin
  iTag1:=Pos(Tag1,Text)+length(Tag1);
  iTag2:=Pos(Tag2,Text);
  Result:=Copy(Text,1,iTag1)+NewText+Copy(Text,iTag2+1,Length(Text));
end;

Tommy1988 10. Mai 2007 18:23

Re: Text in Memo finden
 
Erm, und der Aufruf sieht dann wie folgt aus:

Delphi-Quellcode:
ReplaceBetween('<head>','<head>',Memo1.Text);
Falsch oder ? :cry:

marabu 10. Mai 2007 19:01

Re: Text in Memo finden
 
Hallo Tommy,

du musst das Ergebnis der Funktion auch seiner Verwendung zuführen:

Delphi-Quellcode:
 Memo1.Text := ReplaceBetween('<head>', '</head>', Memo1.Text);
Es gibt aber auch noch einen zuverlässigeren Weg:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  doc: IDispatch;
  ec: IHTMLElementCollection;
  title: IHTMLTitleElement;
begin
  doc := GetDocument(Memo.Text);
  // oder direkt aus dem Internet mit
  // doc := GetDocument(HTTP.Get('http://localhost'));
  with doc as IHTMLDocument3 do
  begin
    ec := getElementsByTagName('title');
    if ec.length > 0 then
    begin
      title := ec.item(0, null) as IHTMLTitleElement;
      title.text := 'potzblitz';
    end;
    Memo.Lines.Text := documentElement.outerHTML;
  end;
end;
Natürlich brauchst du noch die Funktion GetDocument:

Delphi-Quellcode:
function GetDocument(const markup: WideString): IDispatch;
var
  doc: OleVariant;
begin
  Result := CoHtmlDocument.Create;
  doc := Result;
  doc.Open;
  doc.Write(markup);
  doc.Close;
end;
Dabei darfst du nicht vergessen die Units ActiveX und Mshtml einzubinden.

Freundliche Grüße vom marabu

Tommy1988 11. Mai 2007 16:27

Re: Text in Memo finden
 
Langsam verstehe ich hier nicht mehr..


Ich bleibe lieber bei Methode 1 (ReplaceBetween), auch wenn ich nicht weis, wie ich es richtig anwende.

Meine BDS ist eine PE deswegen kein MShtml.

Edit:
Delphi-Quellcode:
Memo1.Text := ReplaceBetween
('<head>', '<head>', Memo1.Text);
[Fehler] MetaTag.pas(47): E2035 Nicht genügend wirkliche Parameter

marabu 11. Mai 2007 16:39

Re: Text in Memo finden
 
Hallo Tommy,

wie du ReplaceBetween() richtig anwendest, habe ich dir gleich am Anfang meines Beitrages beschrieben. Den Rest kannst du getrost ignorieren. Er ist vielleicht für Mitleser von Nutzen, die erkennen, dass die Ersetzungsmethode bei auskommentierten HTML-Codes scheitern kann.

Freundliche Grüße

Edit: Es muss noch der Ersetzungstext als viertes Argument übergeben werden.

Edit2: Im Code von Joachim ist noch ein kleiner Fehler - hier die Korrektur:

Delphi-Quellcode:
function ReplaceBetween(Tag1, Tag2, Text, NewText: string): string;
var
  iTag1, iTag2: Integer;
begin
  iTag1 := Pos(Tag1, Text) + Length(Tag1);
  iTag2 := Pos(Tag2, Text);
  Result := Copy(Text, 1, iTag1 - 1) + NewText + Copy(Text, iTag2, Length(Text));
end;
Aber immer dran denken: Diese Methode funktioniert nur wenn "sauberes" HTML vorliegt und nur das erste Auftreten der Tag-Kombination bearbeitet werden soll.

Tommy1988 11. Mai 2007 18:25

Re: Text in Memo finden
 
Ich scheitere leider.
Die Syntax stimmt bei mit nicht.

Zitat:

Edit: Es muss noch der Ersetzungstext als viertes Argument übergeben werden.
Wie füge ich denn 2 Editfelder als 4. Argument ein?

Blackheart 11. Mai 2007 18:35

Re: Text in Memo finden
 
Du solltest Dir vieleicht noch mal den Crashkurs anschauen. :wink:
Delphi-Quellcode:
Memo1.Text:=ReplaceBetween('<head>','</head>',Memo1.Text,Edit1.Text);


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 Uhr.
Seite 2 von 2     12   

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