04. december 2000 - 18:33Der er
16 kommentarer og 1 løsning
Skriftfarve
Hejsa.
Jeg er rimelig ny inden for Delphi, og jeg har set at der ligger en demo i Delphi der hedder RichEdit, det er et tekstprogram, det ligner Notepad ret meget. Mit spørgsmål: Hvordan gør man sådan så at nogen tekster bliver f.eks. grønne? Jeg vil gerne bruge det som HTML program nemlig, og det ville være dejligt hvis kommandoer som <br> o.lign. var farvet.
Eksemplet var sådan set kun for at vise dig hvordan koden så ud for at ændre skriftfarven i en Trichedit, i håb om at du blev inspireret til at arbejde videre på egen hånd... da dette ikke lykkedes helt så... :o)
Nå, men det er ret indelysende du skal såmænd bare søge efter alle <br> i din tekst, markere dem og så farve dem grønne...
eksempelvis noget lign. dette:
procedure TForm1.RichEdit1Change(Sender: TObject); var i, i1 : integer; begin with richedit1 do begin i := findtext(\'<br> \',0,length(richedit1.text),[stWholeWord]); if i <> -1 then begin selstart := i; sellength := 5; selattributes.color := clgreen; sellength := 0; selstart := i+5; sellength := 0; selattributes.color := clwindowtext; end; end; end;
Eksemplet skulle meget gerne virke sådan, at når du har skrevt et <br> et eller andet sted i teksten så bliver <br> farvet grøn...
Hejsa Effer... I går sad jeg lige legede lidt med din idé og kom frem til et resultat du muligvis kan bruge. I eksemplet bliver alt i en Trichedit som starter med < og slutter med > fremhævet, sådan så når du skriver en HTML side og anvender <br>, <Form>, <Body> osv. bliver de fremævet.
Jeg sidder med noget ligende det samme problem! Jeg har lavet et program, der henter en almindelig txt fil ind i en RichEdit. Nu vil jeg gerne, at når filen bliver hentet ind, så kigger mit program filen igennem, og giver en farve hvis en linie indeholder et bestemt tegne i starten. Her er et eksempel på en linie der skal skifte farve. * Farver er lige \"lidt\" fraværende...arbejdet kalder! Denne linie skal så blive LILLA. Det skal den så gøre ved alle linier der indholder en *
Kan du ikke bare bruge mit eksempel og istedet for < & > skrive *.... og eventuel sæt koden i en repeat lykke lige efter at du har loaded teksten ind i din TRichEdit....
Det virker lidt uoverskueligt for mig. Jeg skriver her, den provedure, hvori jeg gerne vil have lagt funktionen ind. Hvis ikke det er for meget forlangt! procedure TForm1.Openlog(Sender: TObject); var f: file; size : Longint; dato : Longint; begin //Fil Størrelse AssignFile(f, FileListBox1.FileName); Reset(f); size := FileSize(f); Label4.Caption:= IntToStr(size) + \' bytes\'; //Fil Dato dato := FileAge(FileListBox1.FileName); Label6.Caption := DateTimeToStr(FileDateToDateTime(dato)); CloseFile(f); //Åbn Fil i RichEdit1 RichEdit1.Lines.LoadFromFile(FileListBox1.FileName); Label2.Caption:= FileListBox1.FileName; ToolButton2.Enabled := True; ToolButton3.Enabled := True; ToolButton6.Enabled := True; end;
Hvis du kan hjælpe mig med det ville jeg blive glad!
>> stalle (Torben). Prøv denne procedure jeg håber det var sådan du gerne ville have det dit program til fungere... Jeg er lidt nysgerrig efter hvad det er for et program du er ved at lave, så hvis du vil fortælle mig lidt mere omkring meningen med den eller sende mig et færdigt resultat (når den tid kommer) ville JEG blive meget glad *S*
procedure TForm1.Openlog(Sender: TObject); var f: file; size, dato, foundat : Longint; i, i1 : integer; begin //Fil Størrelse AssignFile(f, FileListBox1.FileName); Reset(f); size := FileSize(f); Label4.Caption:= IntToStr(size) + \' bytes\'; //Fil Dato dato := FileAge(FileListBox1.FileName); Label6.Caption := DateTimeToStr(FileDateToDateTime(dato)); CloseFile(f); //Åbn Fil i RichEdit1 RichEdit1.Lines.LoadFromFile(FileListBox1.FileName); Label2.Caption:= FileListBox1.FileName; ToolButton2.Enabled := True; ToolButton3.Enabled := True; ToolButton6.Enabled := True; //finder * og ændre farven på teksten i hele linien til lilla i := 0; repeat with richedit1 do begin foundat := findtext(\'*\',i,length(richedit1.text),[stMatchCase]); if foundat <> -1 then begin selstart := foundat; i1 := caretpos.y; sellength := length(lines[i1]); selattributes.color := clpurple; i := foundat+1; end; end; until foundat = -1;
end;
PS: Torben du burde sku at give mig nogle point en dag for denne indsats *G*...
Jeg siger MANGE tak...2 ting...(bare lige for at være besværlig!) 1. Den tager også linier hvor der er to eller tre *\'er. 2. Det tager LANG tid hvis der er mere end 10-15 linier der skal farves.
Du skal nok få nogle point....hvordan ordner vi det!?
1. prøv denne procedure og se om det var sådan du havde tænkt dig... Proceduren farver kun linier hvis der er en * i starten af linien...Hvis du vil have dit program til kun at farve linier når de indeholder én (og kun én) stjerne bliver du nødt til at lave en ny søgning efter andre stjerner i den linie (og kun den linie)... 2. angående det du nævner at det tager LANG tid, hvis der er mere end 10-15 linier der skal farves er mig simpelthen ubegribeligt. Måske kan det være at du har sat andre løkker eller procedure igang før (søgningen efter *\'er) som tager den lange tid. For selve proceduren der søger efter *\'er tager overhovedet ingen tid på min computer uanset hvor mange *\'er der findes i txt\' filen (har prøvet)... Men send mig HELE projectet + et eksempel af en txt-fil så vil jeg med glæde kigge nærmere på problemet min mail adresse er: info@electronicbugs.org ...
Opret et spørgsmål som hedder \"Point til ZeroHero\" og giv \"spørgsmålet\" det antal point du synes jeg fortjener (ca. 300 *G*) så vil jeg \"svare på spørsmålet\" så du kan tildele mig dine points.
procedure TForm1.Openlog(Sender: TObject); var f: file; size, dato, foundat : Longint; i, i1 : integer; begin //Fil Størrelse AssignFile(f, FileListBox1.FileName); Reset(f); size := FileSize(f); Label4.Caption:= IntToStr(size) + \' bytes\'; //Fil Dato dato := FileAge(FileListBox1.FileName); Label6.Caption := DateTimeToStr(FileDateToDateTime(dato)); CloseFile(f); //Åbn Fil i RichEdit1 RichEdit1.Lines.LoadFromFile(FileListBox1.FileName); Label2.Caption:= FileListBox1.FileName; ToolButton2.Enabled := True; ToolButton3.Enabled := True; ToolButton6.Enabled := True; //finder * og ændre farven på teksten i hele linien til lilla i := 0; repeat with richedit1 do begin foundat := findtext(\'*\',i,length(richedit1.text),[stMatchCase]); if (foundat <> -1) then begin //forbereder i1 i1 := foundat-1; selstart := i1; i1 := caretpos.y; //kun hvis * er som første tegn i linien vil linien blive farvet selstart := foundat; if caretpos.y-1 = i1 then begin sellength := length(lines[caretpos.y]); selattributes.color := clpurple; end; //gør det muligt for søgningen efter *\'er at fortsætte i := foundat+1; end; end; until foundat = -1; end;
SÅ HØR DOG EFTER: (citat) \"Hvis du vil have dit program til kun at farve linier når den indeholder én og kun én stjerne, bliver du nødt til at lave en ny søgning efter andre stjerner i den linie (og kun den linie)...\"
Hilsen ZeroHero
Synes godt om
Ny brugerNybegynder
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.