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 Bei einem Text in RichEdit bestimmte Wörter formatieren (https://www.delphipraxis.net/35811-bei-einem-text-richedit-bestimmte-woerter-formatieren.html)

Äfan 12. Dez 2004 00:43


Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Hi,

Wie kann man in einer RichEdit bestimmte Wörter z.B. Dick, kursiv oder andere Farbe machen ?

MFG

Äfan

gmarts 12. Dez 2004 00:50

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Ja, dazu ist das RichEdit da.

Hier ein Beispiel aus der Hilfe:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with RichEdit1.SelAttributes do
  begin
    Color := clRed;
    Height := Height + 5;
  end;
  RichEdit1.Lines.Add('Diese Textzeile wird rot.');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  RichEdit1.DefAttributes.Color := clBlue;
  RichEdit1.DefAttributes.Style := [fsBold, fsItalic];
end;



Bzw.: Es gibt auch eine Demo zum RichEdit! Am besten da schauen.

Äfan 12. Dez 2004 00:58

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Gut, nur:

Ich will net das ein farbiger Text hinzugefügt wird sondern, wenn ich auf den Button klicke soll das Wort "Scheiße", das schon in der RichEdit drin ist rot und Fett formatiert werde.

Ultimator 12. Dez 2004 01:17

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Schau dir am besten man Delphi-Referenz durchsuchenpos und Delphi-Referenz durchsuchenposEx an :-)

Äfan 12. Dez 2004 01:37

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Habt ihr kein beispiel ? :cry:

fkerber 12. Dez 2004 09:55

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Hi!

Hast du mal in der Hilfe gesucht?
Pos gibt dir die Stelle zurück an der das Wort steht. Die Länge kennst du auch, wo ist dann das Problem?

Weitere Stichwörter
Delphi-Referenz durchsuchenSelstart,Delphi-Referenz durchsuchenSellength,Delphi-Referenz durchsuchenSelAttributes


Ciao Frederic

Äfan 12. Dez 2004 11:38

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Ja ich schaue immer erst in der hilfe, nur ich kann mir da keinen Reim drauf bilden. Mit einem Beispiel würde ichs besser verstehen :roll:

glkgereon 12. Dez 2004 11:56

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
oh mann :roll:

Delphi-Quellcode:
while pos('Scheisse')>0 do
  begin
  RichEdit1.SelStart:=pos('Scheisse');
  RichEdit1.SelLength:=8;
  RichEdit1.SelAttrbutes.Color:=clred;
  RichEdit1.SelAttrbutes.Style:=[saBold];
  end;
kapiert?

Dani 12. Dez 2004 12:23

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
@glkgereon
Das wird zur Endlos-Schleife wenn das Wort auch nur einmal im Text vorkommt.

Äfan 12. Dez 2004 12:33

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Zitat:

oh mann
Ja Sorry ! Kann ja net alles wissen !

Zitat:

@glkgereon
Das wird zur Endlos-Schleife wenn das Wort auch nur einmal im Text vorkommt.
Wenn das überhaupt mal laufen würde:
Zitat:

[Fehler] Unit1.pas(29): Nicht genügend wirkliche Parameter
Das kommt bei RichEdit1.SelStart := pos('Scheisse') und while pos('Scheisse')>0 do

MFG

fkerber 12. Dez 2004 12:36

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Hi!

Dann schau mal, was Pos für Paramter erwartet --> F1


Ciao Frederic

Äfan 12. Dez 2004 12:54

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Zitat:

RichEdit1.SelStart:=pos('Scheisse');
Also ich habe herausgefunden das da nach 'Scheisse' noch was reingehört, aber ich weiß net was !? In der Delphi Hilfe steht S und S=' 125.5' Aber ich versteh nicht was das soll und was ich da reinschreiben soll.

RichEdit1.SelStart:=pos('Scheisse',NochIrgendWas);

PS: Das mit der Endlosschleife is tatsächlich, dass programm wurde paar mal komplett blockiert. und die attribute werden auch nicht gesetzt.

fkerber 12. Dez 2004 12:58

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Hi!

Da steht doch alles deutlich:

Zitat:

Returns the index value of the first character in a specified substring that occurs in a given string.

Unit

System

Category

string handling routines

Delphi syntax:

function Pos(Substr: string; S: string): Integer;

Description

In Delphi, Pos searches for a substring, Substr, in a string, S. Substr and S are string-type expressions.

Pos searches for Substr within S and returns an integer value that is the index of the first character of Substr within S. Pos is case-sensitive. If Substr is not found, Pos returns zero.

The PosEx function is similar to Pos, but provides additional features and can be used in C++ code.

Delphi-Quellcode:
if Pos(gesuchtes_wort,text) > 0 then
und dann das von oben

Ciao Frederic

Dani 12. Dez 2004 12:59

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Überleg doch mal... woher soll pos() wissen, in welchem Text nach "scheisse" gesucht werden soll :zwinker:

Induktiver Ansatz:
Pos('Welt', 'Hallo, Welt!') liefert 8.

Äfan 12. Dez 2004 13:07

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Gut das weiß ich inzwischen auch. Also das prog läuft, nur wenn ich auf denn button klicke hängt sich das prog auf. Hier mal der Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 while pos('Scheisse',RichEdit1.Text) > 0 do begin
  RichEdit1.SelStart:=pos('Scheisse',RichEdit1.Text);
  RichEdit1.SelLength:=8;
  RichEdit1.SelAttributes.Color := clBlue;
  RichEdit1.SelAttributes.Style := [fsBold, fsItalic];
  end;
end;

nailor 12. Dez 2004 13:09

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
weil das ne endlosschleife gibt, weil der das erste Scheisse immer wieder findet. Wenn ersetzt wurde erst weiter hinten wieder anfangen.

fkerber 12. Dez 2004 13:09

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Hi!

Es wurde doch schon geschrieben, dass es mit while schief geht. Deswegen musst du es z.B. mit if machen (siehe meinen Post von oben)


Ciao Frederic

glkgereon 12. Dez 2004 13:11

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
mann ich bin heut müde....also, nächster versuch:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var temp: integer;
begin
while PosEx('Scheisse',RichEdit1.Text,temp) > 0 do begin
  RichEdit1.SelStart:=pos('Scheisse',RichEdit1.Text);
  RichEdit1.SelLength:=8;
  RichEdit1.SelAttributes.Color := clBlue;
  RichEdit1.SelAttributes.Style := [fsBold, fsItalic];
  temp:=RichEdit1.SelStart;
  end;
end;
oder?

Äfan 12. Dez 2004 13:20

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
PosEx ist Undefinierter Bezeichner.

Also ich habe es jetzt so gemacht:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 if pos('Scheisse',RichEdit1.Text) > 0 then
  RichEdit1.SelStart:=pos('Scheisse',RichEdit1.Text);
  RichEdit1.SelLength:=8;
  RichEdit1.SelAttributes.Color := clBlue;
  RichEdit1.SelAttributes.Style := [fsBold];
end;
Nur etwas blöd ist, das nicht Scheisse komplett blau wird sondern Scheisse und immer nur das erste Scheisse blau gemacht wird, die anderen werden ignoriert.

fkerber 12. Dez 2004 13:22

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Hi!

Ja, das mit mehr als einmal geht nur PosEx. Und wenn du mal in der OH gesucht hättest, dann hättest du gesehen, dass in der Unit StrUtils deklariert ist.

Er macht doch das Wort ganz blau. Was gefällt dir da nicht.


Ciao Frederic

Äfan 12. Dez 2004 13:30

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Zitat:

Er macht doch das Wort ganz blau. Was gefällt dir da nicht.
Nein, alles ausser das S.

Zitat:

Und wenn du mal in der OH gesucht hättest, dann hättest du gesehen, dass in der Unit StrUtils deklariert ist.
Ähhhhh ... Ja :gruebel: :|

fkerber 12. Dez 2004 13:32

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Hi!

Aha, dann hatte ich das S übersehen. Dann mach eben beim Selstart noch ein -1 dazu.

Und was PosEx angeht: Dann binde StrUtils bei den Uses ein und dann gibt es auch keinen undefinierten Bezeichner mehr.


Ciao Frederic

Ultimator 12. Dez 2004 13:32

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Probiers mal so:
Delphi-Quellcode:
if pos('Scheisse',RichEdit1.Text) > 0 then
  RichEdit1.SelStart:=pos('Scheisse',RichEdit1.Text)-1; //-1 nicht vergessen ;-)
  RichEdit1.SelLength:=8;
  RichEdit1.SelAttributes.Color := clBlue;
  RichEdit1.SelAttributes.Style := [fsBold];

glkgereon 12. Dez 2004 13:38

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
nein, so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var temp: integer;
begin
while PosEx('Scheisse',RichEdit1.Text,temp) > 0 do begin
  RichEdit1.SelStart:=pos('Scheisse',RichEdit1.Text)-1;
  RichEdit1.SelLength:=8;
  RichEdit1.SelAttributes.Color := clBlue;
  RichEdit1.SelAttributes.Style := [fsBold, fsItalic];
  temp:=RichEdit1.SelStart;
  end;
end;

Äfan 12. Dez 2004 13:40

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
Zwei beiträge höher !

Ok Also:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var temp: integer;
begin
while PosEx('Scheisse',RichEdit1.Text,temp) > 0 do begin
  RichEdit1.SelStart:=pos('Scheisse',RichEdit1.Text);
  RichEdit1.SelLength:=8;
  RichEdit1.SelAttributes.Color := clBlue;
  RichEdit1.SelAttributes.Style := [fsBold, fsItalic];
  temp:=RichEdit1.SelStart;
  end;
end;
Das programm startet, doch das Wort Scheisse wird nicht verändert.

Delphi-Quellcode:
if pos('Scheisse',RichEdit1.Text) > 0 then
  RichEdit1.SelStart:=pos('Scheisse',RichEdit1.Text)-1; //-1 nicht vergessen ;-)
  RichEdit1.SelLength:=8;
  RichEdit1.SelAttributes.Color := clBlue;
  RichEdit1.SelAttributes.Style := [fsBold];
So gehts, aber nur das erste Scheisse.

glkgereon 12. Dez 2004 13:42

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
:wall: :wall: :wall:

temp:=0...

lokale variablen müssen initialisiert werden :(

Äfan 12. Dez 2004 13:42

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
@glkgereon: So passiert garnichts ! Bzw. es hängt sich auf :?

glkgereon 12. Dez 2004 13:52

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
so, getestet und funzt!!!

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var temp: integer;
begin
temp:=0;
RichEdit1.SelStart:=0;
while PosEx('Scheisse',RichEdit1.Text,temp) > 0 do begin
  RichEdit1.SelStart:=PosEx('Scheisse',RichEdit1.Text,temp)-1;
  RichEdit1.SelLength:=8;
  RichEdit1.SelAttributes.Color := clBlue;
  RichEdit1.SelAttributes.Style := [fsBold, fsItalic];
  temp:=RichEdit1.SelStart+RichEdit1.SelLength;
  end;
end;

Äfan 12. Dez 2004 13:57

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
JAAAAA *in die luft springt* Danke. Boaaa war das ne schwere geburt :-D

thx

Äfan


Ich bin Anfänger, bitte schlagt mich nicht :nerd: :freak:

glkgereon 12. Dez 2004 14:06

Re: Bei einem Text in RichEdit bestimmte Wörter formatieren
 
nee, tu ich nicht, ich bin noch dabei mich selkber zu prügeln ;)

bei den fehlern :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz