Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi LeftIndent für markierten text (https://www.delphipraxis.net/18989-leftindent-fuer-markierten-text.html)

Xeno-Sebi 27. Mär 2004 07:57


LeftIndent für markierten text
 
Hi!
Ich habe folgendes Problem:
Ich will einen markierten Text in einem RichEdit auf knopfdurck einen leftindent verpassen.
ist das möglich?

rebugger 27. Mär 2004 08:36

Re: LeftIndent für merkierten text
 
Willste Leerzeichen einfügen, oder einen Tab ?

Bei Leerzeichen:
RichEdit1.SelText := ' ' + RichEdit1.SelText;

Xeno-Sebi 27. Mär 2004 09:40

Re: LeftIndent für merkierten text
 
ich habe ein memo durch ein richedit ersetzt. vorher habe ich das auch so gemacht, was jetzt aber nciht mehr geht:
  • -leerzeichen werden "verschluckt", da richedit anscheinend ne trimfunktion hat
    -ich will mehrere zeilen einrücken
    -es soll der inhalt des re nicht geändert werden (also sollen keine zeichen hinzugefügt werden)
ich überlege in diese richtung:
markierten text in ein tempRE cutten
text hinter der markierung in ein tempRE2 cutton
absatz mit indent erstellen
temp1 einfügen
absatz beenden
temp2 einfügen

geht das?

fkerber 27. Mär 2004 10:16

Re: LeftIndent für merkierten text
 
Hi!

Zeig am Besten mal deinen Code, der im Memo das gemacht, was du haben wolltest. Dann ist es wahrscheinlich einfacher zu verstehen.


Ciao fkerber

Markus K. 27. Mär 2004 10:29

Re: LeftIndent für merkierten text
 
Hallo Xeno-Sebi,
die RichEdit-Komponente besitzt dafür eine Methode, mit welcher es ganz einfach sein sollte den Text einen linken Einzug zu verpassen.
Delphi-Quellcode:
RichEdit1.Paragraph.LeftIndent:=...;
Tschüß Markus

Xeno-Sebi 27. Mär 2004 11:06

Re: LeftIndent für merkierten text
 
ja ist auch ganz einfach...also das hat sich erledigt, aber ein neues, viel schlimmeres prob taucht auf:
Delphi-Quellcode:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
text.Paragraph.FirstIndent:=TrackBar1.Position;
end;
(funzt supa)
ABER: ich benutze einen timer, der alle 3 sec. ein syntaxhighligh aktuallisiert. dazu wird der inhalt des "text"es (TRichEdit) in ein anderes verschoben. Dabei geht der indent verloren und alles ist wieder links am rand.

hier der Code:
Delphi-Quellcode:
procedure TForm1.syntaxtimerTimer(Sender: TObject);
var textselstart,textsellength:integer;
var codetext:TRichEdit;
var temptext:TStringList;
Begin
textselstart:=text.SelStart;
textsellength:=text.SelLength;
temptext:=TStringList.Create;
codetext:=TRichEdit.Create(Form1);
temptext.Text:=text.Text;
temptext.Text:=StringReplace(temptext.text, '}', '[zU]', [rfReplaceAll]);
temptext.Text:=StringReplace(temptext.text, '{', '[aUF]', [rfReplaceAll]);

codetext.text:='{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil MS Sans Serif;}}{\colortbl ;\red0\green0\blue255;\red100\green0\blue100;\red0\green200\blue0;\red150\green150\blue150;\red0\green150\blue150;}\viewkind4\uc1\pard\f0\fs16';
codetext.text:=codetext.text+StringReplace(temptext.Text, '<', '\cf1<', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '>', '>\cf0', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '//', '\cf4//\cf0', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '/*', '\cf4/*\cf0', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '*/', '\cf4*/\cf0', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '<script', '\cf2<script', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '</script>', '\cf2</script>\cf0', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '<!--', '\cf2<!--', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '-->', '\cf2-->\cf0', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, 'function', '\b function\b0 ', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, 'if', '\b if\b0 ', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, 'else', '\b else\b0 ', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, 'while', '\b while\b0 ', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, 'for', '\b for\b0 ', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, 'foreach', '\b foreach\b0 ', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, 'var', '\b var\b0 ', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, 'array', '\b array\b0 ', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '"', '\b "\b0 ', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '<?', '\cf3<?', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '?>', '\cf3?>\cf0', [rfIgnoreCase,rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '[zU]', '{\}}', [rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, '[aUF]', '{\{}', [rfReplaceAll]);
codetext.text:=StringReplace(codetext.text, chr(13), '\par', [rfIgnoreCase,rfReplaceAll])+'}';
text.text:=codetext.Text;
text.SelStart:=textselstart+1000;
text.SelStart:=textselstart;
text.SelLength:=textsellength;
codetext.Destroy;
temptext.Destroy;
end;
bis auf dieses problem geht alles...
ich glaube ich muss direkt im "text" die replace sachen machen...
aber wenn ich es so mache:
Delphi-Quellcode:
text.text:=StringReplace(text.Text, '<', '\cf1<', [rfIgnoreCase,rfReplaceAll]);
usw...
Dann wird der formatierungskram als text in des re reingeschrieben UND wie ich jetzt sehe, verschwindet der indent auch...mist

Edit No.3:
soll ich den indent für jede einzelne zeile speichern???

fkerber 27. Mär 2004 16:14

Re: LeftIndent für markierten text
 
Hi!

Mach am besten für die neue Frage ein neues Topic auf, dann wird es schneller gefunden.


Ciao fkerber


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz