Avatar billede obs Nybegynder
02. november 2000 - 15:24 Der er 5 kommentarer og
1 løsning

Syntaksfarvning

Hvordan laver man syntaksfarvning i en richedit.
f.esk alle G\'er plus værdi skal være blå, alle X\'er plus værdi skal være røde, osv med Z, F, I, J

...SNIP...
G0 G41 X1160.5 Y2001. Z30.
G01Z-24.F4000
G03X1115.5Y1956.I1160.5J1956.
G01Y1552.5
X99.238
...SNIP...



Avatar billede delphi Nybegynder
02. november 2000 - 15:38 #1
Kan du bruge følgende som udgangs punkt:

Start med en tom for.  Sæt en TRichEdit, en TButton og en TEdit på formen.  Indsæt følgende kode:


procedure TForm1.AddLineToRichEdit1(aStr: String);
begin
  Case Upcase(aStr[1]) Of
    \'A\' : RichEdit1.SelAttributes.Color := clBlack;
    \'B\' : RichEdit1.SelAttributes.Color := clRed;
    \'C\' : RichEdit1.SelAttributes.Color := clGreen;
    \'D\' : RichEdit1.SelAttributes.Color := clBlue;
    Else
      RichEdit1.SelAttributes.Color := clBlack;
  End;
  RichEdit1.Lines.Add(aStr);
  RichEdit1.SelAttributes.Color := clBlack;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddLineToRichEdit1(Edit1.Text);
end;


Som du kan se er hemmeligheden at benytte TRichEdit\'ens SelAttributes property, hvor du desuden kan skifte font, størrelse, bold, understregning mv.  I eksemplet benytter jeg en Case for at at kigge på første bogstav i inputlinien.  Du skal se\'følig lige ændre dette til at kigge på dine (C)NC koder, idet du sikkert ikke vil have samme font style til fx. alm. \'G0value\' og \'G0 G4\' kommandoer.

Delphi
Avatar billede delphi Nybegynder
02. november 2000 - 15:40 #2
Jeg har iøvrigt en tidligere kollega (lytter du med Anold) der har lavet noget CNC optimerings software i Delphi.  Hans program er bl.a. istand til at indsætte il-gang\'s koder på steder hvor dette vil speede fræse arbejdet op.

Delphi
Avatar billede vlamik Nybegynder
02. november 2000 - 20:47 #3
Du kan jo eventuelt prøve SynEdit, http://synedit.sourceforge.net/

Mikkel
Avatar billede obs Nybegynder
03. november 2000 - 02:28 #4
Hej delphi
hmm.
jeg har fået dit eksempel til at virke,men så er jeg ikke med længer. \'sådan er det med nybegyndere ;-) \'

Som du selv skriver se man kun på første bogstav i linien, men hvad med de næste, typisk starter det med \'G\' derefter x,y osv, de bliver samme farve som \'G\'.

Det er sikkeret et dumt spørgsmål, men jeg er lost




Avatar billede delphi Nybegynder
03. november 2000 - 10:12 #5
Dit grundlæggende problem, som jeg ser det, er tilsyneladende hvorledes man undersøger en del af en streng.

I mit eksempel undersøger jeg en enkelt position, den første, var at betragte strengen som et array (of Char).  Array\'s kan aflæses position for position ved at efterfølge array-navnet med firkantede paraenteser med et index i, e.g.:

Var
  aStr  : String;                // Declare aStr as a string
  ch    : Char;                  // Declare ch as a Char;
  aArr  : Arrray[1..50] Of Char; // Declare a Char array;
  Index : Integer;
Begin
  aStr := \'Dummy String\';
  Ch  := aStr[1];            // Ch := \'D\';

  For Index := 1 To Length(aStr) Do
    aArr[Index] := aStr[Index];

  If aArr[4] = \'x\' Then
    ShowMessage(\'Position er lig x\')
  Else
    ShowMessage(\'Position er IKKE lig x\');
End;

Som det ses af ovenstående kan parantes metoden benyttes til at undersøge enkelte positioner i et array/streng.  Skal du undersøge en delstreng på 2+ karakterers længde, så kan du benytte Copy metoden:

Var
  aStr  : String;
  DelStr : String;
Begin
  aStr := \'Dette er en test);
  DelStr := Copy(aStr, 1, 2);  // DelStr := 2 chars fra position 1 i aStr.

  If DelStr = \'De\' Then
    MessageBox(\'DelStr er lig \"De\"\')
  Else If DelStr = \'Xx\' Then
    MessageBox(\'DelStr er lig \"Xx\"\')
  Else If DelStr = \'Yy\' Then
    MessageBox(\'DelStr er lig \"Yy\"\')
  Else
    MessageBox(\'DelStr er lig noget helt andet\');
End;

Bemærk at jeg ikke længere kan benytte Case strukturen når du tester på delstrenge, men der imod benytter en stak nestede If-Then-Else kommandoer.

Håber det hjalp.

Delphi



 

Avatar billede obs Nybegynder
05. november 2000 - 01:55 #6
jehaaa
tak for hjælpen delphi.
også tak til vlamik
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester