AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi RichEdit: Zeilen und Zeichen pro Zeile begrenzen
Thema durchsuchen
Ansicht
Themen-Optionen

RichEdit: Zeilen und Zeichen pro Zeile begrenzen

Ein Thema von Reinhardtinho · begonnen am 1. Nov 2007 · letzter Beitrag vom 5. Nov 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#11

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 5. Nov 2007, 11:10
Normalerweise würde ich SelStart am Anfang einer lokalen Variable zuweisen und am Ende wieder auf den Wert dieser setzen. Aber da du die Länge des Textes änderst wird das sicher net so leicht gehen ...

Zitat von Reinhardtinho:
Zur Liste:
Es soll halt ganz normaler Text eingegeben werden, wie in Word z.B. wenn ich mich da mitten im Text positioniere, rutscht der Rest einfach weiter und es ist möglich was aus der Zwischenablage einzufügen.
Daher finde ich es mit der Liste nicht ganz so schön, wobei mich das langsam nervt, das man nicht einfach die maximale Zeichenanzahl pro Zeile einstellen kann .
Bei einer Liste kann du auch mitten drin etwas einfügen. Und aus der Zwischenablage etwas zu holen ist dort auch kein Problem.
Es stellt sich aber nicht nur die Frage was "schön" ist, sondern auch was später stabil läuft ohne 3000 Zeilen Code für "nichts" zu verschwenden und trotzdem andauernd Fehler zu verursachen ...
Chris
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#12

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 5. Nov 2007, 11:34
Hm, ich hab jetzt noch was gefunden, was (vorerst) läuft (keine 3000 Zeilen ):

Delphi-Quellcode:
procedure TForm1.Memo1Change(Sender: TObject);

  procedure SetCursorInMemo(const AMemo: TCustomMemo; X, Y: Integer);
  begin
    AMemo.SelStart := AMemo.Perform(EM_LineIndex, X, 0) + Y;
    AMemo.Perform(EM_SCROLLCARET, 0, 0);
    AMemo.SetFocus;
  end;

var
  sText : String;
  i : Integer;
  NewText : String;
  Line : Integer;
  Col : Integer;
  Lines : Integer;
begin
  sText := Memo1.Text;

  if CanChange then
  begin
    Line := Memo1.CaretPos.Y;
    Col := Memo1.CaretPos.X;
    Lines := Memo1.Lines.Count;
  end;

  NewText := '';

  sText := StringReplace(sText, #13, '', [rfReplaceAll]);
  sText := StringReplace(sText, #10, '', [rfReplaceAll]);

  for i := 1 to Length(sText) do
  begin
    if ((i Mod 10) = 0) then
      NewText := NewText + sText[i] + #13#10
    else NewText := NewText + sText[i];
  end; (* of for *)

  if CanChange then
  begin
    CanChange := False;
    Memo1.Text := NewText;

    if (Lines <> Memo1.Lines.Count) then
      Col := Col + 2;
      
    //Cursorposition neu setzen
    SetCursorInMemo(Memo1, Line, Col);
  end;

  CanChange := True;

  if (Memo1.Lines.Count > 4) then
    Memo1.Lines.Delete(4);
end;
Hier begrenze ich die Zeichenanzahl pro Zeile auf 10 und die Zeilenanzahl auf 4.
Nach ein paar Tests kann ich sagen, dass es soweit seinen Zweck erfüllt, wie gut es wirklich ist, wird sich noch zeigen.

Die Prozedur SetCursorInMemo ist von dsdt.info.


Ich bedanke mich bei allen, die mir geholfen haben, das Problem zu lösen (vielleicht melde ich mich später nochmal).


MFG
Lorenz
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 18:27 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