Delphi-PRAXiS

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)

R0BIN 16. Nov 2006 15:09


sowas {\bhallo\b} direkt in richedit laden?
 
kann ich sowas direkt in richedit laden, so dass es fett angezeigt wird?

Robin

Mazel 16. Nov 2006 15:26

Re: sowas {\bhallo\b} direkt in richedit laden?
 
Hallo, wenn du eine rtf Datei hast kannst du diese mit:
Delphi-Quellcode:
RichEdit1.Lines.LoadFromFile('test.rtf');
laden. Genau so kannst du diese auch speichern:
Delphi-Quellcode:
RichEdit1.Lines.SaveToFile('test.rtf');
Wenn du also ein RichEdit hast, dort den FontStyle auf bsBold setzt und den Inhalt dann abspeicherst und wieder läds, wird der Text fett angezeigt. Dazu muss aber die Eigenschaft PlainText auf False gesetzt sein.

Gruß
Mazel

R0BIN 16. Nov 2006 15:55

Re: sowas {\bhallo\b} direkt in richedit laden?
 
ja ich möchte aber ungern nden umweg über ne datei gehen, weil ich das so schon in ner datenbank habe!

generic 16. Nov 2006 15:58

Re: sowas {\bhallo\b} direkt in richedit laden?
 
loadfromstream geht auch an der o.g. stelle.

R0BIN 16. Nov 2006 19:29

Re: sowas {\bhallo\b} direkt in richedit laden?
 
hab ich schon getestet, aber dann schreib er dass genauso in das textfeld, ohne formatierung,

Namenloser 16. Nov 2006 19:38

Re: sowas {\bhallo\b} direkt in richedit laden?
 
Hatte das Problem auch mal und hätte nicht gedacht, dass es so einfach geht:
Delphi-Quellcode:
richedit1.text := '{\b hallo\b}';

marabu 16. Nov 2006 19:48

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

vielleicht besser so:

Delphi-Quellcode:
 RichEdit.SelText := '{\rtf1\b hallo\b}';
Damit wird der RTF-Code an der Stelle des Cursors eingefügt - aber wichtig ist das command word \rtf1.

Gute Nacht

R0BIN 17. Nov 2006 09:31

Re: sowas {\bhallo\b} direkt in richedit laden?
 
vielen dank, das rtf1 fehlte, jetzt gehts

Helmi 19. Jun 2008 18:38

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

ich muss dieses Thema nochmal auswärmen :feuerchen:, weil ich gerade
selbst an diesem Problem bin.

Leider kann ich die oben genannte Lösung mittels SelText nicht verwenden,
weil ich, programmkonzeptbedingt, die RichEdit Line für Line auslese
und bearbeite und dann wieder Line für Line zurückschreibe.

Das schaut bei mir dann etwa so aus:
Delphi-Quellcode:
var
  S_RichEdit: String;

begin
  for i := 0 to Pred(RichEdit.Lines.Count) do
    begin
      //Line-Text auslesen
      S_RichEdit := RichEdit.Lines.Strings[i];


      //Mach was mit S_RichEdit (momentan SubStrings suchen und ersetzen)


      //auf RichEdit laden
      RichEdit.Lines.Strings[i] := S_RichEdit;
    end;
end;
Das ganze funktioniert Problemlos. Nur würd ich bei den ganzen
Machwas-Teil gleich noch ne Formatierung mit verarbeiten.

Unter Formatierung versteh ich:
  • Farbige Darstellung von Text-Teilen
  • Fettmarkierung von Text-Teilen
also nichts weltbewegendes.

Nun würd ich gern in die Variable "S_RichEdit" gleich
Formatierungszeichen miteinfügen. Nur weiss ich nicht wie
das funktioniert, da ich ja nicht direkt im RichEdit arbeite
sondern in der TStrings (Lines) von RichEdit.

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

Sollte es funktionieren, vielleicht könnte man mir einen Beispiel-
Code zur Verfügung stellen, oder vielleicht sogar ein kleines
Beispiel-Programm.

marabu 19. Jun 2008 18:43

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

mit Lines[] greifst du nur auf den Text zu, aber es hindert dich niemand daran eine Zeile nach der anderen zu selektieren und durch deinen formatierten Text zu ersetzen.
Das Selektieren muss ja nicht unbedingt sichtbar (LockWindow) gemacht werden.

Grüße vom marabu

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 08:07 Uhr.

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