Avatar billede klasker Nybegynder
27. september 2003 - 22:46 Der er 8 kommentarer og
1 løsning

Forbistrede Richedit!!

Jeg bruger en TRichedit som grundkomponent til min syntax-highlighter.
Normalt når jeg laver store ændringer i f.eks. memos, henter jeg hele teksten ind i en lokal variabel (TStringlist) og bruger den til buffer, for til sidst at smide hele den ind i memoen.
Problemet med TRichedit er at det er umuligt at gennemskue hvordan den egentlig gemmer hvilken font hvert enkelt bogstav er skrevet med.
Mit program er meget lang tid om at åbne store filer da den skal syntax highlighte hele filen når den bliver åbnet.

Jeg ved fra tidligere erfaring at det går betydeligt langsommere at arbejde direkte til/fra et komponents properties end vha. lokale varible.
Problemet er at den eneste måde jeg kan ændre et stykke tekst's font er ved at markere det og ændre på SelAttributes.

Så jeg leder altså efter en mindre processorkrævende metode at gøre det på.

Dvs. en måde hvorpå jeg ikke behøver at arbejde direkte på komponentet, men med lokale variable istedet.

Gav det overhoved nogen mening? :o|
Avatar billede athlon-pascal Juniormester
27. september 2003 - 23:07 #1
Avatar billede klasker Nybegynder
28. september 2003 - 00:06 #2
Det er godt nok en tør omgang tekst. Desværre kom jeg ikke langt med den.
Jeg har på fornemmelsen at jeg skal bruge nogle af de RTF formater han bruger.
Problemet er at jeg ikke ved hvordan jeg gør det, og det fremgår heller ikke tydeligt af hans beretning.
Avatar billede Slettet bruger
28. september 2003 - 00:19 #3
Avatar billede klasker Nybegynder
28. september 2003 - 00:42 #4
Argh!! Den er fandeme lang. Jeg tror at jeg dropper det med RTF.
Er der en anden måde at arbejde med en Richedit uden at det bliver langsomt?
Avatar billede Slettet bruger
28. september 2003 - 01:02 #5
Ved ik rigtig om det er hurtiger, men du kan da prøve:

http://hejhej105.frac.dk/rtf.zip
Avatar billede klasker Nybegynder
28. september 2003 - 01:12 #6
Det ser lovende ud... men jeg forstår ikke så meget af det :(
Kan du prøve at kommentere det eller forklare mig hvad det er du gør?
Avatar billede Slettet bruger
28. september 2003 - 14:47 #7
Ved ik lige hvad det første gør( {\rtf1\ansi\ansicpg1252\deff0\deflang1030{\fonttbl{\f0\fnil MS Sans Serif;}} ), men det er ihvertfald ret vigtigt :-)

ColorString tilføjer farvene til toppen af filen, hvis man f.eks. bruger det her array:

var
tags:array[0..2] of string;
color: array[0..2] of TColor;
begin
tags[0] := 'Ri';
color[0] := clRed;
tags[1] := 'ch';
color[1] := clGreen;
tags[2] := 'Ed';
color[2] := clBlue;

Kommer toppen til at se sådan ud:

            |      Farve 1      |      Farve 2      |      Farve 3    |
{\colortbl ;\red255\green0\blue0;\red0\green255\blue0;\red0\green0\blue255;}


TextString tilføjer teksten f.eks. hvis teksten er "RichEdit" og man bruger arrayet fra før så vil teksten kommer til at se sådan ud:

\viewkind4\uc1\pard\f0\fs16 \cf1 Ri\cf0 \cf2 ch\cf0 \cf3 Ed\cf0 it

Det første ved jeg ik lige hvad betyder :-), men \cf1 Ri\cf0 betyder den vælger "farve 1" fra toppen af filen og \cf2 ch\cf0 betyder den vælger "farve 2" fra

toppen, osv...


Tilsidst erstatter jeg alle normale mellemrun med rtf mellemrum(\par ):

TextString := StringReplace(TextString, Chr(13)+Chr(10), '\par ',[rfReplaceAll]);

Og afslutter rtf filen med "\par }"
Avatar billede klasker Nybegynder
29. september 2003 - 20:55 #8
Tja.. jeg er ved at rode mig ud i noget værre rod kan jeg mærke, men jeg plejer at komme godt ud af det til sidst så jeg springer bare ud i det.

Tak for hjælpen (igen-igen).

PS. Læg et svar :P
Avatar billede Slettet bruger
29. september 2003 - 20:57 #9
Svar :-)
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