Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
Har ikke lige haft lyst til den slags GUI - vil prøve at tumle lidt med det. Forventer/frygter dog, at man ikke kan "vride" den eksisterende TRichEdit i den retning, men må forlade sig på komponentfremstilling - men hvad ved jeg, endnu...
Et eksempel der viser resultatet på formens canvas. Derfor sæt din RichEdit ca. midt på din form når du tester den. Du vil let kunne ændre koden, til at tegne på andre komponenter end formens canvas!
skriv følgende i din RichEdit's OnSelectionChange property:
procedure TForm1.RichEdit1SelectionChange(Sender: TObject); var I, Y : Integer; S : string; L : TStringList; begin //Laver en midlertidig TStringList L := TStringList.Create;
//kopiere TRichEdit til TStringList for I := 0 to RichEdit1.Lines.Count-1 do L.Add(RichEdit1.Lines[I]);
//Bytter om på linjerne (Alignet) for I := L.Count div 2 downto 1 do begin S := L[I-1]; L[I-1] := L[L.Count-I]; L[L.Count-I] := S; end;
Canvas.FillRect(RichEdit1.ClientRect);
//Tegner teksten på formen for I := 0 to RichEdit1.Lines.Count-1 do Canvas.Textout(0,I*(ABS(RichEdit1.Font.Height)+2),L[I]);
//Beregner og tegner den nye caret if RichEdit1.CaretPos.Y = RichEdit1.Lines.Count-1 then Y := 1 else if RichEdit1.CaretPos.Y < L.Count div 2 then Y := L.Count-RichEdit1.CaretPos.Y else Y := (L.Count div 2) -(RichEdit1.CaretPos.Y - (L.Count div 2)) ; Y := (Y-1)*(ABS(RichEdit1.Font.Height)+2); I := Canvas.TextWidth(Copy(RichEdit1.Lines[RichEdit1.CaretPos.Y],0,RichEdit1.CaretPos.X)); Canvas.MoveTo(I,Y); Canvas.LineTo(I,Y+Canvas.TextHeight('|'));
Jeg kunne jo ikke vide, at du ikke er så knøv med Canvas ;))...
Det er ikke særligt redigervenligt at gøre det på denne måde! Men hvis det er fordi der skal skrives en linje af gangen (Ligesom et Chat program eller lign.) så skulle det være ok at bruge! Hvis du ikke skal kunne redigere i den overhovdet ville jeg vælge at lade den tegne på en TPanel eller lign. og dernæst lade en skjult TRichEdit gøre arbejdet! Vil du derimod lave en 100% redigervenlig TRichEdit, ville jeg lave en ny komponent fra bunden, da der vil komme for mange komplikationer ved bare at overbygge en eksisterende komponent!
Her er et eksempel der tegner på sig selv! Jeg har ladet teksten der bliver alignet blive rødt, da det er lidt lettere at forstå hvad der sker!
procedure TForm1.RichEdit1SelectionChange(Sender: TObject); var I, Y : Integer; S : string; L : TStringList; MyCanvas : TControlCanvas; begin //Laver en midlertidig Canvas for TRichEdit MyCanvas := TControlCanvas.Create; MyCanvas.Control := RichEdit1;
//Laver en midlertidig TStringList L := TStringList.Create;
//kopiere TRichEdit til TStringList for I := 0 to RichEdit1.Lines.Count-1 do L.Add(RichEdit1.Lines[I]);
//Bytter om på linjerne (Alignet) for I := L.Count div 2 downto 1 do begin S := L[I-1]; L[I-1] := L[L.Count-I]; L[L.Count-I] := S; end;
MyCanvas.FillRect(RichEdit1.ClientRect);
//Alt hvad der bliver alignet bliver tegnet rødt MyCanvas.Font.Color := clRed;
//Tegner teksten på formen for I := 0 to RichEdit1.Lines.Count-1 do MyCanvas.Textout(0,I*(ABS(RichEdit1.Font.Height)+2),L[I]);
//Beregner og tegner den nye caret if RichEdit1.CaretPos.Y = RichEdit1.Lines.Count-1 then Y := 1 else if RichEdit1.CaretPos.Y < L.Count div 2 then Y := L.Count-RichEdit1.CaretPos.Y else Y := (L.Count div 2) -(RichEdit1.CaretPos.Y - (L.Count div 2)) ; Y := (Y-1)*(ABS(RichEdit1.Font.Height)+2); I := MyCanvas.TextWidth(Copy(RichEdit1.Lines[RichEdit1.CaretPos.Y],0,RichEdit1.CaretPos.X)); MyCanvas.MoveTo(I,Y); MyCanvas.LineTo(I,Y+MyCanvas.TextHeight('|'));
Den sidste kode del jeg har givet dig tegner altså på din TRichEdit (Tjekkede den selv igennem inden jeg postede den!)!!!!!!!!!! Ikke for at være uhøflig, men det er altså alt jeg gider at lave for 30 points! Prøv eventuelt selv at gå videre med det! Jeg har ikke tænkt mig at lave hele opgven for dig, så lære du jo ingenting :))
zerohero. Jeg havde ikke lige lagt mærke til dit nye svar var "nyt", da jeg postede den comment. Men som sagt, vil jeg godt have en komplet kode som tegner i bunden (og som bliver i bunden når man resizer. Og ja, jeg giver da gerne flere points.
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.