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 sowas {\bhallo\b} direkt in richedit laden? (https://www.delphipraxis.net/80866-sowas-%7B%5Cbhallo%5Cb%7D-direkt-richedit-laden.html)

Matze 19. Jun 2008 18:46

Re: sowas {\bhallo\b} direkt in richedit laden?
 
Hallo,

ich denke, dir reicht Delphi-Referenz durchsuchenSelAttributes aus. Aus dem Kopf geht das grob so:

Delphi-Quellcode:
RichEdit.SelAttributes.Style := [fsBold];
// Text einfügen und danach die Attribute zurücksetzen
Du kannst das auch immer "invertieren":
Delphi-Quellcode:
RichEdit.SelAttributes.Style := RichEdit.Font.Style + [fsbold];
// Text einfügen
RichEdit.SelAttributes.Style := RichEdit.Font.Style - [fsbold];
Die Schriftfarbe kannst du natürlich analog ändern.

Ich hoffe, das ist das, was du gemeint hast.

Grüße

toms 19. Jun 2008 18:58

Re: sowas {\bhallo\b} direkt in richedit laden?
 
Zitat:

Zitat von Helmi
Funktioniert das Einfügen von Formatierungen auch bei RichEdit.Lines
oder nur bei SelText?

Bei mir gibt's dann einen "Richedit line insertion Error"

Alternative: RTF Text via EM_STREAMIN einfügen oder wie schon erwähnt mit RichEdit.SelAttributes arbeiten.

Bsp. EM_STREAMIN:

http://www.swissdelphicenter.ch/de/showcode.php?id=1147

http://www.delphidabbler.com/tips/57

Helmi 19. Jun 2008 19:44

Re: sowas {\bhallo\b} direkt in richedit laden?
 
Hallo,

ich werds mal etwas ausgedehnter erklären:

ich habe einen unformatierten RichEdit-Text (Beispiel):
Zitat:

Die Katze ist stohdumm.
Sie, die Katze frisst nur ohne
nachzudenken - die andere Katze
schläft nur.
Nun hab ich zwei StringListen, die gleiche Anzahl
Items beinhalten. Nennen wir sie: Liste_Such und Liste_Tausch

Meine "Machwas"-Routine sucht in dem RichEdit-Text zeilenweise
nach Wörtern die in der Liste_Such drin stehen und ersetzt sie
gegen Wörtern der Liste_Tausch.

In dem Beispiel...
...Inhalt der Liste_Such: Katze
...Inhalt der Liste_Tausch: Maus
(nur ein Item in den Listen)

Das funktioniert soweit.
Der RichEdit-Text würde dann lauten:
Zitat:

Die Maus ist stohdumm.
Sie, die Maus frisst nur ohne
nachzudenken - die andere Maus
schläft nur.
Nun möcht ich aber beim Ersetzen gleichzeitig eine Formatierung
mit angeben. Also das in dem oberen Beispiel das Wort Maus
fett dargestellt wird und nicht unformatiert.

Ich stell mir das so vor, beim Ersetzen bei dem neuen Wort
eine Formatierungsflag mit anzugeben, dass dann automatisch
vom RichEdit als RTF interpretiert wird und dann dementsprechend
formatiert und angezeigt wird.

Also nochmals bei dem Beispiel oben zu bleiben - etwa so:
(\b<Text>\b für Wort in fett)
Zitat:

Die \bMaus\b ist stohdumm.
Sie, die \bMaus\b frisst nur ohne
nachzudenken - die andere \bMaus\b
schläft nur.
Was dann so aussehen sollte:
Die Maus ist stohdumm.
Sie, die Maus frisst nur ohne
nachzudenken - die andere Maus
schläft nur.

Ich hoffe es ist nun verständlicher geworden, was ich machen möchte.
Wär so was möglich?

Matze 19. Jun 2008 19:54

Re: sowas {\bhallo\b} direkt in richedit laden?
 
Hallo Helmi,

mithilfe der genannten Code-Snippets und dieses Codes aus dem SDC geht es so:

Delphi-Quellcode:
function Search_And_Replace(RichEdit: TRichEdit;
  SearchText, ReplaceText: string): Boolean;
var
  startpos, Position, endpos: integer;
begin
  startpos := 0;
  with RichEdit do
  begin
    endpos := Length(RichEdit.Text);
    Lines.BeginUpdate;
    while FindText(SearchText, startpos, endpos, [stMatchCase])<>-1 do
    begin
      endpos  := Length(RichEdit.Text) - startpos;
      Position := FindText(SearchText, startpos, endpos, [stMatchCase]);
      Inc(startpos, Length(SearchText));
      SetFocus;
      SelStart := Position;
      SelLength := Length(SearchText);
      RichEdit.clearselection;

      RichEdit.SelAttributes.Style := [fsBold];
      SelText := ReplaceText;
      RichEdit.SelAttributes.Style := [];
    end;
    Lines.EndUpdate;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Search_And_Replace(Richedit1, 'Katze', 'Maus');
end;
Grüße, Matze

Helmi 19. Jun 2008 20:00

Re: sowas {\bhallo\b} direkt in richedit laden?
 
Hallo Matze,

danke für deine Hilfe.
Nur muss ich dich wieder enttäuschen - es ist nicht das was ich suche/meine.

Dein Code tauscht im kompletten Text - da geht natürlich SelStart/End...

Nur kann ich nur Zeilenweise tauschen (es gibt schon nen Grund dafür)
deswegen auch RichEdit.Lines.Strings

und bei RichEdit.Lines.Strings kann ich ja leider kein SelStart/End anwenden
Deswegen auch meine Frage nach der Möglichkeit zum Einfügen von Flags
vor und nach dem getauschten Wort.

marabu 19. Jun 2008 21:10

Re: sowas {\bhallo\b} direkt in richedit laden?
 
Hallo,

Zitat:

Zitat von Helmi
... Nur kann ich nur Zeilenweise tauschen (es gibt schon nen Grund dafür) deswegen auch RichEdit.Lines.Strings und bei RichEdit.Lines.Strings kann ich ja leider kein SelStart/End anwenden

in Beitrag #10 behaupte ich schlicht das Gegenteil. Passenden Code findest du indirekt über diesen Beitrag. Beim zeilenweise Verarbeiten der Strings hilft dir vielleicht die Prozedur SelectLine(), die ich weiter oben (#10) verlinkt habe. Einen plausiblen Grund für das zeilenweise Vorgehen hast du aber bisher nicht angeben können.

Freundliche Grüße

Helmi 19. Jun 2008 21:20

Re: sowas {\bhallo\b} direkt in richedit laden?
 
Danke für die Hinweise.

Werd ich mir morgen mal anschauen und es mal meinen Wünschen anpassen.

Zitat:

Zitat von marabu
Einen plausiblen Grund für das zeilenweise Vorgehen hast du aber bisher nicht angeben können.

Ich hab nie behauptet keinen Grund dafür angeben zu können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:56 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