Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - 3 + 2 = 5 Fragen zu RichEdit


StefanH - Di 13.05.03 21:27
Titel: 3 + 2 = 5 Fragen zu RichEdit
Hallo zusammen!!

Ich möchte in meinem RichEdit folgendes machen:
  1. die letzten Zweizeilen löschen
  2. eine Zeile mit bestimmten Inhlat löschen
  3. Die corsorpositoin festsetzen

zu 3.: ich habs so probiert:

Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.RichEdit1Change(sender: Tobject);
begin
  RichEdit.CaretPos.x:= 3
end;

Kommt aber:
Zitat:
Der linken Seite kann nichts zu gewiesen werden.

Heißt das, dass das "Readonly" ist????

//Edit:
Und nun die anderen 2:

  1. Schauen ob ein bestimmtes Wort öfter auftaucht als ein anders (z.B.: ob mehr Klammern geöffnet sin als geschlossen)
  2. Verhindern, dass man nach Textende noch scrollen kann bis der Text ganz weg ist

Stefan

Moderiert von user profile iconTino: Code-Tag hinzugefügt.[/list]


Ex0rzist - Di 13.05.03 21:45

1.

Delphi-Quelltext
1:
2:
3:
4:
5:
If RichEdit1.Lines.Count > 1 do  // es müssen mindestens zwei Zeilen da sein
  begin
   RichEdit1.Lines.Delete(RichEdit1.Lines.Count-1);
   RichEdit1.Lines.Delete(RichEdit1.Lines.Count-2);
  end;


2.

Delphi-Quelltext
1:
2:
3:
For i := 0 to RichEdit1.Lines.Count-1 do
   If RichEdit1.Lines[i] = 'Das soll in der Zeile stehen' then
        RichEdit1.Lines.Delete[i];


3. Dafür habe ich jetzt keinen Code parat, auf jeden Fall musst du mit RichEdit1.SelStart arbeiten (siehe Online-Hilfe).

P.S.: RichEdit.CaretPos ist ReadOnly.


flow - Mi 14.05.03 07:46


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure GetRichEditRowCol(R: TRichEdit; var Row, Col : LongInt);
begin
  Row := SendMessage(R.Handle, EM_LINEFROMCHAR, R.SelStart, 0);
  Col := M.SelStart-SendMessage(R.Handle, EM_LINEINDEX, Row, 0);
end;

Gibt dir die genaue Zeile und Spalte wo sich der Cursor befindet.

Delphi-Quelltext
1:
2:
3:
4:
procedure SetRichEditRowCol(R : TRichEdit; Row, Col : Integer);
begin
  R.SelStart := SendMessage(R.Handle, EM_LINEINDEX, Row, 0) + Col;
end;

Setzt dir die genaue Cursor Position.

FLOW


Simon Joker - Mi 14.05.03 11:20

Hi

zu 1:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
i:=2//löschte die letzten 2 Zeilen wenn vorhanden (ungetestet)
while (Memo1.Lines.Count>0and (i>0do
  begin
    Memo1.Lines.Delete(Memo1.Lines.Count-1);
    dec(i);
  end;

ich würde es so lösen.
@Ex0rzist
dein Vorschlag crasht. Du löschtst erst die letzte Zeile und dann die VORLETZTE! Bei mehr als 2 Zeilen wird die falsche gelöscht und bei 2 Zeilen versuchst du Zeile -1 zulöschen. Die Befehle müssen getauscht werden.


StefanH - Mi 14.05.03 15:47

Jo, Danke!! Werds probieren (wird schon gehen, ich will euch ja nicht schlecht machen :wink: )


Ex0rzist - Do 15.05.03 19:36

@Simon Joker

Stimmt. :shock:

Asche auf mein Haupt.


StefanH - Do 15.05.03 19:38

Ex0rzist hat folgendes geschrieben:

2.

Delphi-Quelltext
1:
2:
3:
For i := 0 to RichEdit1.Lines.Count-1 do
   If RichEdit1.Lines[i] = 'Das soll in der Zeile stehen' then
        RichEdit1.Lines.Delete[i];   <-: Fehlermeldung


Fehlermeldung hat folgendes geschrieben:
Nicht genügend wirkliche Paramenter :(


mfg Stefan


Ex0rzist - Do 15.05.03 20:01


Delphi-Quelltext
1:
2:
3:
For i := 0 to RichEdit1.Lines.Count-1 do
   If RichEdit1.Lines[i] = 'Das soll in der Zeile stehen' then
        RichEdit1.Lines.Delete(i);


Da müssen natürlich runde Klammern hin. Immer diese Flüchtigkeitsfehler ...


StefanH - Do 22.05.03 19:26

Und nun die anderen 2:


  1. Schauen ob ein bestimmtes Wort öfter auftaucht als ein anders (z.B.: ob mehr Klammern geöffnet sin als geschlossen)

  2. Verhindern, dass man nach Textende noch scrollen kann bis der Text ganz weg ist



Stefan


GSE - So 25.05.03 12:34

zu 1.:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure CompareWords(text, wort1, wort2: string);
var
 p, p2, cw1, cw2: integer;
begin
   cw1 := 0; cw2 := 0;
   p := 1;
   p2 := 1;
Repeat 
 p := pos(wort1,text);
 if p <> 0 then begin
  inc(cw1);
  delete(text,p,length(wort1));
 end;
 p2 := pos(wort2,text);
 if p2 <> 0 then begin
  inc(cw2);
  delete(text,p2,length(wort2));
 end;
Until (p = 0and (p2 = 0);
  if cw1 > cw2 then showmessage(wort1+' ist häufiger '+wort2);
  if cw1 < cw2 then showmessage(wort2+' ist häufiger als '+wort1);
  if cw1 = cw2 then showmessage(wort1+' ist genauso oft vorhanden wie '+wort2);
end;


mfg
GSE


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt