Avatar billede webcreator Nybegynder
22. april 2004 - 19:10 Der er 6 kommentarer og
1 løsning

Meget simpel form for syntaksfarvning

Hej Eksperter.

Jeg har gentagne gange forsøgt at finde eksempler på meget simpel syntaksfarvning. Men desværre er der ikke rigtig noget der har kunnet bruges. Jeg vil derfor forsøge at beskrive problemet lidt bedre denne gang.

Det jeg søger er en funktion, som kaldes hver gang jeg trykker på tastaturet (OnChange / OnClick). Denne funktion skal undersøge, om tegnene < og > bliver brugt. Hvis dette er tilfældet, så skal al tekst mellem < og > farvelægges.

Dvs. en funktion som begynder at farvelægge teksten når < aktiveres, og som skifter tilbage til den normale farve, når > aktiveres.

Jeg håber I kan hjælpe. På forhånd tak.
Avatar billede webcreator Nybegynder
22. april 2004 - 19:12 #1
Kort og godt skulle det altså bare være noget i denne retning :

If KeyStroke = '<' then
  RichEdit.Color := clRed;

if KeyStroke = '>' then
  RichEdit.Color := clBlack;
Avatar billede webcreator Nybegynder
22. april 2004 - 19:42 #2
- Men dels ved jeg ikke hvordan jeg får fat i tegnet fra tastaturet (og dermed tjekker hvad der bliver tastet
- Og så ved jeg ikke nøjagtigt hvordan man nøjes med at ændre farven fra fx < tegnet.

Altså 2 simple ting der skal på plads.
Avatar billede angelod Novice
22. april 2004 - 21:01 #3
Jeg vil lige høre om du har prøvet at kigge på SynEdit (http://synedit.sourceforge.net)?
Avatar billede webcreator Nybegynder
22. april 2004 - 21:05 #4
Ja, den kender jeg. Men jeg ønsker at lave det uden brug af ekstra moduler. Men tak alligevel.
Avatar billede hrc Mester
22. april 2004 - 22:30 #5
Tror ikke at syntakshighlightere (eller hvad den slags hedder) arbejder på den måde. Hvad hvis du skifter position ved at klikke i teksten andetsteds.

Jeg ville hente en komponent på Torry's, sandsynligvis den mest producerede komponent, kigge koden igennem og så lave min egen variant.

Hvis du kun vil skifte farve ved det er der mellem <> så kan du bruge den funktion jeg lavede et andet sted på eksperten. Har desværre ikke fået lavet resten angående spørgsmålet (http://www.eksperten.dk/spm/489767)

function TForm1.InTag(const aString : string; const aIndex : integer) : boolean;
var
  i : integer;
  bStart, bEnd : boolean;
begin
  bStart := false; bEnd := false;

  // Seek backards - look for start-tag
  i := aIndex;
  while (i > 1) and (aSt[i] <> '>') and not bStart do begin
    bStart := aSt[i] = '<';
    dec(i);
  end;

  // Seek forward if tag-start found - look for end-tag
  if bStart then begin
    i := aIndex;
    while (i < length(aSt)) and not (aSt[i] in ['<','>']) and not bEnd do begin
      bEnd := aSt[i] = '>';
      inc(i);
    end;
  end;

  result := bStart and bEnd;
end;
Avatar billede hrc Mester
22. april 2004 - 22:49 #6
Beklageligvis havde jeg aldrig testet den og den rettede version ser således ud:

function TfrmMain.InTag(const aString : string; const aIndex : integer) : boolean;
var
  i : integer;
  bStart, bEnd : boolean;
begin
  // Seek backards - look for start-tag
  bStart := false; i := aIndex;
  while (i > 0) and (aString[i] <> '>') and not bStart do begin
    bStart := aString[i] = '<';
    dec(i,integer(not bStart));
  end;

  // Seek forward if tag-start found - look for end-tag
  bEnd := false;
  if bStart then begin
    i := aIndex;
    while (i < length(aString)) and (aString[i] <> '<') and not bEnd do begin
      bEnd := aString[i] = '>';
      inc(i,integer(not bEnd));
    end;
  end;

  result := bStart and bEnd;
end;

Her returneres true om den er i et tag, ellers false. Med små modifikationer kan man returnere start og slut på strengen så den kan farves clRed.
Avatar billede webcreator Nybegynder
10. juli 2004 - 12:48 #7
Tak for input. Jeg er ved at lukke spørgsmål - hvis nogen føler de burde have points, så kontakt mig i et af mine aktive spørgsmål - så finder vi ud af noget dér.
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