AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi RichEdit - Schreibschutz für einzelne Zeilen
Thema durchsuchen
Ansicht
Themen-Optionen

RichEdit - Schreibschutz für einzelne Zeilen

Ein Thema von runningsoft · begonnen am 18. Jan 2013 · letzter Beitrag vom 18. Jan 2013
Antwort Antwort
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#1

RichEdit - Schreibschutz für einzelne Zeilen

  Alt 18. Jan 2013, 13:45
Delphi-Version: 5
Hallo,

wie bekomme ich einen Schreibschutz für einzelne Zeilen in einem RichEdit hin?

Delphi-Quellcode:
procedure TForm11.Button2Click(Sender: TObject);
var i, TxtLength : integer;
begin
for I := 0 to 10 do
   begin
   RxRichEdit1.Lines.Add('Zeile ' + IntToStr(i));
   end;
RxRichEdit1.SelStart := 0;
TxtLength := (Length(RXRichEdit1.Text));
RXRichEdit1.SelLength := TxtLength;
with RXRichEdit1.SelAttributes do Protected := true; //der bisher eingegebene Text ist jetzt schreibgeschützt
//jetzt wollte ich den Cursor auf die Position hinter dem erzeugten Text setzen
//und den Schreibschutz wieder aufheben --> geht leider nicht
RxRichEdit1.SelStart := TxtLength + 1;
RXRichEdit1.DefAttributes.Protected := False;
end;
Obiger code tut's leider nicht. Der Schreibschutz für die automatisch eingefügten Zeilen wird gesetzt, ich hab es aber leider noch nicht geschafft, ihn danach wieder aufzuheben.

Vielen Dank für eure Hinweise.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: RichEdit - Schreibschutz für einzelne Zeilen

  Alt 18. Jan 2013, 14:01
Auch wenn du nicht mit TRichedit arbeitest, hast Du es mal mit SelAttributes versucht?
Denn in der D7-Hilfe steht:
Zitat:
Mithilfe von DefAttributes können Sie die Attribute der Standardschrift abrufen oder ändern, die in einem RTF-Eingabefeld für neu eingefügten Text verwendet werden. Dies sind die Merkmale des Textes vor der Anwendung der speziellen Attribute. Nachdem spezielle Attribute für einen Teil des Textes verwendet wurden, gelten ab dieser Position die Standardattribute intern als nicht mehr für den Text definiert, auch wenn die Attribute mit DefAttributes übereinstimmen.
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: RichEdit - Schreibschutz für einzelne Zeilen

  Alt 18. Jan 2013, 14:07
Daran hatte ich auch gedacht, und ursprünglich

Delphi-Quellcode:
RxRichEdit1.SelStart := TxtLength + 1;
with RXRichEdit1.SelAttributes do Protected := false;
verwendet.

Da ja aber ab dem Cursor noch nichts ausgewählt sein kann (da man ja ab hier erst weiter schreiben soll) hat das keine Auswirkung. Das RichEdit bleibt komplett gesperrt.
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: RichEdit - Schreibschutz für einzelne Zeilen

  Alt 18. Jan 2013, 14:49
Ich hab mal noch ein bisschen probiert:

Ich habe in meiner Prozedur ja Length(RxRichEdit1.Text) verwendet, um, wie ich dachte, die Anzahl der in der Schleife erzeugten Zeichen zu ermitteln und genau bis dorthin SelLength anzuwenden.

Rein rechnerisch werden in meiner Schleife 78 Zeichen erzeugt, ein Length(RxRichEdit1.Text) ergibt aber eine Textlänge von 100 Zeichen.

Daraus folgere ich, dass für jeden Zeilenumbruch 2 zusätzliche, nicht sichtbare Zeichen, erzeugt werden. Nun wird natürlich erst mal deutlich, warum

with RXRichEdit1.SelAttributes do Protected := true; das RichEdit für weitere Eingaben sperrt: der selektierte Bereich ist einfach schon größer als die in der Schleife tatsächlich erzeugten (sichtbaren) Zeichen.

Nun stellt sich die Frage: wie ermittle ich die Endposition des letzten Zeichens des von mir in der Schleife erzeugten Textes um die Markierung exakt bis zu diesem Zeichen zu setzen? (Natürlich will ich nicht einfach mitzählen, in meiner realen Anwendung wird der per Programmcode erzeugte und dann zu schützende Text auf etwas komplexerem Weg erzeugt).
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: RichEdit - Schreibschutz für einzelne Zeilen

  Alt 18. Jan 2013, 16:05
Ich hab das jetzt so gelöst, dass ich die gesamte Länge des Textes ermittele und davon die Anzahl der Zeilenumbrüche abziehe. Diese Anzahl ermittle ich in einer Funktion, die das Vorkommen von #13 im gesamten Text zählt.

Wen der Code interessiert:

Delphi-Quellcode:
function TForm11.CountChar(const RichEdit: TRXRichEdit; s: string): integer;
//diese Funktion sucht in dem übergebenen RichEdit nach der Anzahl des gesuchten
//Zeichens
var I, x: integer;
    MyText : string;
begin
x := 0;
MyText := RichEdit.Text;
for I := 0 to Length(MyText) do
   begin
   if MyText[i] = s then
      Inc(x);
   end;
Result := x;
end;

procedure TForm11.Button2Click(Sender: TObject);
var i, TxtLength : integer;
begin
//Testtext erzeugen
for I := 0 to 9 do
   begin
   RxRichEdit1.Lines.Add('Zeile ' + IntToStr(i));
   end;
//bisher eingegebenen Text markieren
//über function CountChar werden alle Zeichen des Textes abzgl. des Zeichens für carriage-return (#13)
//ermittelt und das als Textlänge für SelLength übergeben
RxRichEdit1.SelStart := 0;
RxRichEdit1.SelLength := Length(RxRichEdit1.Text) - CountChar(RxRichEdit1,#13);
with RXRichEdit1.SelAttributes do Protected := true; //der bisher eingegebene Text ist jetzt schreibgeschützt
//Cursor in die nächste Zeile setzen
RxRichEdit1.SelStart := RxRichEdit1.SelLength + 1;
RxRichEdit1.SetFocus;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 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