Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bestimmte Wörter anders zeigen (https://www.delphipraxis.net/61164-bestimmte-woerter-anders-zeigen.html)

A-M-X 17. Jan 2006 18:45


Bestimmte Wörter anders zeigen
 
Huhu!

Habe vor einiger Zeit von einem Kumpel einen Code gekriegt (habe ihn gefragt wie das geht ^^):

"Wie drucke ich bestimmte Wörter in einem RichEdit anderst?"

Er hat mir einen sehr guten Code gegeben:

Delphi-Quellcode:

procedure TForm1.RichEdit1Change(Sender: TObject);
const
  AMarkedWords : array [1 .. 106] of String = ('unit', 'interface', 'uses', 'type', 'class', 'procedure', 'private', 'public', 'end;', 'end', 'end.', 'var', 'implementation', 'array', 'of', 'string', 'to', 'goto', 'with', 'do', 'for', 'while', 'mod', 'if', 'then', 'begin', 'const', 'else', 'repeat', 'xor', 'label', 'try', 'finally', 'except', 'overload', 'stdcall', 'inherited', 'div', 'interface', 'not', 'stored', 'default', 'read', 'write', 'absolute', 'assembler', 'and', 'as', 'asm', 'at', 'case', 'cdecl', 'downto', 'exports', 'external', 'far', 'file', 'finally', 'forward', 'goto', 'in', 'index', 'inline', 'library', 'name', 'mear', 'nodefault', 'nil', 'not', 'of', 'or', 'on', 'program', 'raise', 'record', 'resident', 'set', 'shl', 'shr', 'finalization', 'packed', 'protected', 'resourcestring', 'threadvar', 'initialization', 'abstract', 'class', 'constructor', 'destructor', 'dynamic', 'inherited', 'is', 'message', 'object', 'property', 'override', 'publishes', 'read', 'stored', 'virtual', 'dispinterace', 'packed', 'protected', 'resourcestring', 'threadvar', 'until');
var
  BufferPosition : LongInt;
  BufferText    : String;
  Index         : LongInt;
  MySelLength   : LongInt;
  MySelStart    : LongInt;
begin
  MySelStart := RichEdit1.SelStart;
  MySelLength := RichEdit1.SelLength;

  RichEdit1.SelStart := 0;
  RichEdit1.SelLength := Length(RichEdit1.Text);

  RichEdit1.SelAttributes.Color := clBlack;
  RichEdit1.SelAttributes.Style := [];

  RichEdit1.SelStart := 0;
  RichEdit1.SelLength := 0;
 
  for Index := Low(AMarkedWords) to High(AMarkedWords) do
  begin
    BufferPosition := 0;
    BufferText    := RichEdit1.Text;
 
    while (Pos(Trim(LowerCase(AMarkedWords[Index])), LowerCase(BufferText)) > 0) do
    begin
      RichEdit1.SelStart := BufferPosition + Pred(Pos(Trim(LowerCase(AMarkedWords[Index])), LowerCase(BufferText)));
      RichEdit1.SelLength := Length(Trim(AMarkedWords[Index]));
 
      RichEdit1.SelAttributes.Color := clNavy;
      RichEdit1.SelAttributes.Style := [FsBold];
 
      BufferPosition := BufferPosition + Pred(Pos(Trim(LowerCase(AMarkedWords[Index])), LowerCase(BufferText))) + Length(Trim(AMarkedWords[Index]));
      BufferText := Copy(BufferText, Pos(Trim(LowerCase(AMarkedWords[Index])), LowerCase(RichEdit1.Text)) + Length(Trim(AMarkedWords[Index])), Succ(Length(BufferText) - (Pos(Trim(LowerCase(AMarkedWords[Index])), LowerCase(RichEdit1.Text)) + Length(Trim(AMarkedWords[Index])))));
    end;
  end;

  RichEdit1.SelStart := MySelStart;
  RichEdit1.SelLength := MySelLength;

  RichEdit1.SelAttributes.Color := clBlack;
  RichEdit1.SelAttributes.Style := [];

end;
NUR:

wenn ich z.B. NUR "in" fett gedruckt haben will, druckt er bei "string" folgendermaßen:

String

Also er druckt das "in" in "strINg" auch fett. Wie behebe ich das? ^^

Edit: und wie behebe ich dieses Flackern beim schreiben. wenn ich "hallo" eingebe flacktert es und dauert ewig lang bis es da steht -> habe einen code eingefügt und will am ende noch was schreiben, wenn es leer ist und ich schreibe, flackerts und hängts ned, wenn ich aber wiederum einen langen code einfüge und dann am ende schreibe flackerts und hängts total

[edit=sakura] L E E R Z E I C H E N eingefüt. Mfg, 桜[/edit]

jfheins 17. Jan 2006 18:49

Re: Bestimmte Wörter anders zeigen
 
simpelste lösung: nicht 'in' sondern z.B. ' in ' highlighten ;)

Flackern: am Anfang BeginUpdate; und am ende EndUpdate ;)

Matze 17. Jan 2006 18:51

Re: Bestimmte Wörter anders zeigen
 
Ich möchte dich nicht entmutigen, aber wenn du einen Pascal-Highlighter schreiben möchtest, wie es dein Array andeutet, geht das mit dem SynEdit deutlich einfacher und wesentlich performanter. Da hast du dann auch eine Zeilennummerierung, sofern du es einstellst etc.

Code zu highlighten ist beim SynEdit für viele Sprachen einfaches Zusammenklicken von Komponenten und dauert keine 2 Minuten.

Wenn du natürlich etwas lernen möchtest, ist das SynEdit witzlos. :zwinker:

A-M-X 18. Jan 2006 12:48

Re: Bestimmte Wörter anders zeigen
 
@jfheins:

Wie BeginUpdate und EndUpdate? wohin?

@Matze:
Hab ich schonma probiert aber ich kann komischerweise nicht richtig Komponenten installieren.
Haste vllt icq oder n messenger wo wir uns ma "treffen" könnten und du mir das erklären könntest (natürlich nur, wenn es dir keine Umstände macht ;))

thx

Khabarakh 18. Jan 2006 12:59

Re: Bestimmte Wörter anders zeigen
 
Zitat:

Zitat von A-M-X
@jfheins:

Wie BeginUpdate und EndUpdate? wohin?

An Anfang und Ende der Prozedur, hat er doch geschrieben :wink: .

A-M-X 18. Jan 2006 13:01

Re: Bestimmte Wörter anders zeigen
 
das geht aber irgendwie ned.. der dagt "undefinierter bezeichner"

ichbins 18. Jan 2006 13:07

Re: Bestimmte Wörter anders zeigen
 
so:
Delphi-Quellcode:
richedit1.beginupdate;
blablabla;
richedit1.endupdate;

A-M-X 18. Jan 2006 13:11

Re: Bestimmte Wörter anders zeigen
 
geht auch nicht o.o

-> glaube mit ner komponente wäre das besser. synedit hab ich nur da sind soviele ordner usw. o.o was davon soll ich installieren? ^^

ichbins 18. Jan 2006 13:12

Re: Bestimmte Wörter anders zeigen
 
hm, und wieso? was zeigt er dir denn an?

A-M-X 18. Jan 2006 13:15

Re: Bestimmte Wörter anders zeigen
 
Undefinierter Bezeichner...
Ich glaub da selber rumzuschreiben bringts ned. weiss einer wie man die SynEdit Komponente installiert? *gg*


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr.
Seite 1 von 2  1 2      

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