AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Reservierte Wörter hervorheben [RichEdit]
Thema durchsuchen
Ansicht
Themen-Optionen

Reservierte Wörter hervorheben [RichEdit]

Ein Thema von Blackheart · begonnen am 10. Dez 2006 · letzter Beitrag vom 1. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#1

Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 09:00
Hallo Leute
Ich wollte im RichEdit Reservierte Wörter hervorheben das klappt auch Soweit.
Jetzt hätte Ich es gern schon bei Eingabe des Textes, also zur Laufzeit.
Hätte da Jemand eine Idee und könnte Mir auf die Sprünge helfen.

Blackheart

Delphi-Quellcode:
var
  Form1: TForm1;
  Reserviert: Array [0..2] of String= ('begin', 'end', 'end.');
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,j: Integer;
 s: String;
begin
  for j:=0 to 2 do
  begin
  s:=Reserviert[j];
  for i:= Length(RichEdit1.Text)-1 downto 0 do
    begin
    RichEdit1.SelStart:=i;
    RichEdit1.SelLength:=Length(s);
    if (Uppercase(RichEdit1.SelText)=Uppercase(s)) then
      begin
      RichEdit1.SelAttributes.Style:=[fsBold];
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#2

Re: Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 09:07
Warum machst du dir die Mühe und nimmst nicht gleich fertige Komponenten wie das Synedit, da sowas von alleine können?
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 09:08
Delphi-Quellcode:
unit ufoMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
    function IsReservedWord(const aReservedWord: String): Boolean;
    function SpecialCases(const aReservedWord: String): Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.IsReservedWord(const aReservedWord: String): Boolean;
const
  coReserved: Array[1..115] of String = ('and', 'else', 'inherited', 'packed',
    'then', 'array', 'end', 'end;', 'end.', 'initialization', 'procedure',
    'threadvar', 'as', 'except', 'inline', 'program', 'to', 'asm', 'exports',
    'interface', 'property', 'try', 'begin', 'file', 'is', 'raise', 'type',
    'case', 'final', 'label', 'record', 'unit', 'class', 'finalization',
    'library', 'repeat', 'unsafe', 'const', 'finally', 'mod', 'resourcestring',
    'until', 'constructor', 'for', 'nil', 'sealed', 'uses', 'destructor',
    'function', 'not', 'set', 'var', 'dispinterface', 'goto', 'object', 'shl',
    'while', 'div', 'if', 'of', 'shr', 'with', 'do', 'implementation', 'or',
    'static', 'xor', 'downto', 'in', 'out', 'string', 'absolute', 'dynamic',
    'local', 'platform', 'requires', 'abstract', 'export', 'message', 'private',
    'resident', 'assembler', 'external', 'name', 'protected', 'safecall',
    'automated', 'far', 'near', 'public', 'stdcall', 'cdecl', 'forward',
    'nodefault', 'published', 'stored', 'contains', 'implements', 'overload',
    'read', 'varargs', 'default', 'index', 'override', 'readonly', 'virtual',
    'deprecated', 'package', 'register', 'write', 'dispid', 'library', 'pascal',
    'reintroduce', 'writeonly');
var
  CaseWord: String;
  ReservedWord: String;
begin
  CaseWord := LowerCase(Trim(aReservedWord));
  Result := False;

  for ReservedWord in coReserved do
  begin
    if ( ReservedWord = CaseWord ) then
    begin
      Result := True;
      Exit;
    end;
  end;
end;

function TForm1.SpecialCases(const aReservedWord: String): Boolean;
var
  CaseWord: String;
begin
  CaseWord := LowerCase(aReservedWord);
  Result := (Pos('class(', CaseWord) > 0) or (Pos('array[', CaseWord) > 0);
end;

end.
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 09:13
Das wollt Ich eigentlich vermeiden, das mit Pascal war jetzt nur ein Beispiel.
Hab ungefähr 10 Wörter die Fett dargestellt werden sollen und wollte dafür nicht unbedingt SynEdit einsetzen.

Blackheart
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 09:24
Zitat von Blackheart:
Hab ungefähr 10 Wörter die Fett dargestellt werden sollen und wollte dafür nicht unbedingt SynEdit einsetzen.
Falls du denkst, dass SynEdit mehr Ressourcen frisst als ein RichEdit, dann bist du auf'm Holzweg.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 09:37
Hab mal die Unit von Mackhack ausprobiert krieg aber immer Fehlermeldungen
Operator ist auf Diesen Operandentyp nicht anwendbar.

for ReservedWord in coReserved do

Wollte Synedit eigentlich nicht einsetzen weil es das Prog unnötig groß macht.

Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

Re: Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 09:42
Ja, er benutzt eine for-in Schleife ... die gibt es glaube ich erst seit ... ... Delphi 2005 ?

Wenn du eine ältere Version hast,musst du wohl oder übel die Elemente herkömlich durchiterieren
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 09:44
Hi,

der Code von MackHack verwendet ein language feature, welches in deiner Delphi-Version noch nicht existiert. Wenn du deine Delphi-Version in deinem DP-Profil nachträgst, dann kann man darauf Rücksicht nehmen.

Bei einem simplen interaktivem HighLighter musst du bei jeder Änderung des Textes den entsprechenden Textbereich so erweitern, dass Wörter, die an die Bereichsgrenzen anschließen, für die nachfolgende Analyse mit eingeschlossen werden. Ob dieser simple Ansatz bei dir trägt, das hängt von der Grammatik deines Textes ab.

Freundliche Grüße
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 09:49
Ahso benutze Delphi 7 dann erstmal Danke für die Antworten.
Habs hinbekommen.

Delphi-Quellcode:
procedure ReserviertBold(RichEdit1: TRichedit);
var
 i,j:Integer;
 Bold, str: String;
begin
  for i:= 1 to length(RichEdit1.Text) do
    for j:= 0 to High(Reserviert) do
      begin
        Bold:= Reserviert[j];
        str:= Copy(RichEdit1.text, i, Length(Bold));
        if (str = Bold) then
          begin
            RichEdit1.SelStart:= i - 1;
            RichEdit1.Sellength:= length(Bold);
            RichEdit1.SelAttributes.style:= [fsbold];
            RichEdit1.SelStart:=length(RichEdit1.Text)-1;
            RichEdit1.SelAttributes.Style:= [];
          end;
      end;
end;
Blackheart
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Reservierte Wörter hervorheben [RichEdit]

  Alt 10. Dez 2006, 14:40
Klappt doch noch nicht ganz so, weil Ich ja SelStart immer ans Ende des Textes setze, kann Ich jetzt nicht mehr zb. - wenn Ich Fünf Zeilen hab in der Ersten Zeile was eingeben.
Habs schon mit RichEdit1.CaretPos.x probiert klappt aber auch nicht so Recht.
Vieleicht hat ja von Euch noch wer eine Idee.
Hier nochmal der Quelltext zur Zeit.

Delphi-Quellcode:
var
  Form1: TForm1;
  Reserviert: array[0..2] of string =('begin', 'end', 'end.');
implementation

{$R *.dfm}
procedure ReserviertBold(RichEdit1: TRichedit);
var
 i,j:Integer;
 Bold, Str: String;
begin
  for i:= 1 to length(RichEdit1.Text) do
    for j:= 0 to High(Reserviert) do
      begin
        Bold:= Uppercase(Reserviert[j]);
        Str:= Uppercase(Copy(RichEdit1.text, i, Length(Bold)));
        if (Str = Bold) then
          begin
            RichEdit1.SelStart:= i - 1;
            RichEdit1.Sellength:= Length(Bold);
            RichEdit1.Text:=StringReplace(RichEdit1.Text,Bold,Uppercase(Bold),[rfReplaceAll, rfIgnoreCase]);
            RichEdit1.SelAttributes.Color := clBlue;
            RichEdit1.SelAttributes.Style:= [fsbold];
            RichEdit1.SelStart:=Length(RichEdit1.Text)-1;
            RichEdit1.SelAttributes.Style:= [];
          end;
      end;
end;

procedure TForm1.RichEdit1Change(Sender: TObject);
begin
  ReserviertBold(RichEdit1);
end;
Blackheart
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 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