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

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 1 von 2  1 2   
Benutzerbild von Reinhardtinho
Reinhardtinho

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

RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 1. Nov 2007, 11:07
Hi @all,

Ich möchte den Inhalt eines RichEdits in Richtung Excel exportieren und habe dort nur eine bestimmte Anzahl an Zeichen pro Zeile und an Zeilen zur Verfügung.

Wie kann man bei einer RichEdit-Komponente die Maximalwerte einstellen?


Danke.

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
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#2

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 1. Nov 2007, 15:41
Hallo Lorenz,
mir ist noch nicht so ganz klar worin das Problem besteht. Der Text im RichEdit ist doch "normalerweise" Fließtext, der optisch - so das Attribut gesetzt ist - umgebrochen wird. Erzwingt die spätere Verwendung in Excel eine Limitierung des Textes, gibt es m. E. zwei Grundfälle ..

a) Du kannst die Limitierung bereits während der Texterfassung in das RichEdit durch dein Programm überwachen lassen. Das könnte dann bedeuten, dass du nach der Eingabe einer bestimmten Zeichenanzahl durch das Programm CRLF einfügst. Wenn die maximale Zahl der Zeilen (also Zeilen mitzählen) erreicht ist, darf das Programm keine weiteren Eingaben zulassen.

b) Du hast keinen Einfluß auf den RTF-Text (während der Erstellung) >> dann musst du den fertigen Text analog des unter a) beschriebenen aufbereiten. Das automatisierte "Zurechtstutzen" stelle ich mir allerdings etwas aufwändig vor, wenn dabei nicht die Gefahr bestehen soll, dass in vielen Fällen unleserliches Zeug in Excel ankommt.

Gruß Ralph
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

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

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 1. Nov 2007, 15:44
Ich weiß ya nicht, was du genau vorhast, aber wäre es nicht vlt. einfacher und besser, eine Liste (TListBox, TListView) zu nutzen?
Chris
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

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

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 2. Nov 2007, 16:03
Hi,

ich bin jetzt auf ein Memo umgestiegen, weil die Formatierung in Excel einheitlich sein soll.

Ich bin auch ein bisschen weitergekommen, ich habe im Internet folgenenden Code gefunden:

Delphi-Quellcode:
if key = #13 then begin
    with Sender as TMemo do begin
      if lines.count >= 2 then begin
        key := #0;
        line := Perform( EM_LINEFROMCHAR, SelStart, 0 );
        if line < 1 Then
          SelStart := Perform( EM_LINEINDEX, line+1, 0 );
      end;
    end;
  end;
Das funktioniert für die Anzahl der Zeilen, wenn ich den Text im Memo eintippe, aber nicht wenn ich Text per Copy&Paste einfüge, weil dort die Enter-Taste nicht gedrückt wird.

Habt ihr Tipps, wie ich das Paste abfangen kann? Dankesehr.

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
Benutzerbild von Reinhardtinho
Reinhardtinho

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

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 2. Nov 2007, 17:25
Kurz nach Feierabend ( ) bin ich wohl der richtigen Lösung auf der Spur.

Ich werde im OnChange-Ereignis des Memos den Text analysieren und dort alle Zeilenumbrüche rauslöschen und dann neu setzen.

Vielen Dank an alle.

MFG und schönes WE
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
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#6

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 2. Nov 2007, 17:45
Hallo Lorenz,
also die Variante A - der CodeSchnipsel überwacht aber nur die Zahl der Zeilen, ich denke, du wolltest auch die Zeichen/Zeile limitieren? Na, dann noch viel Erfolg.
Gruß Ralph
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

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

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 2. Nov 2007, 22:12
Hallo,

ja das ist richtig, die Zeichen pro Zeile habe ich auch im OnChange Ereignis schon überprüft, soweit hat auch alles geklappt, nur Copy&Paste war dort noch das Problem und nun werde ich das dann mit Memo1.Text im OnChange-Ereignis machen und dort die Steuerzeichen umbauen.

Damit sichere ich auch den Fall ab, das jemand was einfügt.

Meine Lösung werde ich dann am Montag nochmal vorstellen.


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
Benutzerbild von Reinhardtinho
Reinhardtinho

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

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 5. Nov 2007, 10:43
Hallo *,

soweit mit den Zeichenbegrenzung pro Zeile funktioniert alles, nur hab ich ein Problem. Wenn ich den Text zuweise, wird die Cursorposition an den Anfang gesetzt, ich möchte aber, dass der Cursor hinter dem Zeichen bleibt, dass ich zuletzt eingefügt habe.

Wie mache ich das am Besten? Der Eigenschaft CaretPos kann man nichts zuweisen.

Delphi-Quellcode:
procedure TForm1.Memo1Change(Sender: TObject);
var
  sText : String;
  i : Integer;
  NewText : String;
begin
  sText := Memo1.Text;
  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 *)

  Memo1.Text := NewText;

  //Cursorposition neu setzen
end;

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
Benutzerbild von Deep-Sea
Deep-Sea

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

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 5. Nov 2007, 10:46
Zitat von Reinhardtinho:
soweit mit den Zeichenbegrenzung pro Zeile funktioniert alles, nur hab ich ein Problem. Wenn ich den Text zuweise, wird die Cursorposition an den Anfang gesetzt, ich möchte aber, dass der Cursor hinter dem Zeichen bleibt, dass ich zuletzt eingefügt habe.

Wie mache ich das am Besten? Der Eigenschaft CaretPos kann man nichts zuweisen.
SelStart ...

(Und ich glaube immer noch, das eine Liste ggf. besser wäre ...)
Chris
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

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

Re: RichEdit: Zeilen und Zeichen pro Zeile begrenzen

  Alt 5. Nov 2007, 11:01
Hallo,

danke für die schnelle Antwort.

Ich habe das ganze jetzt etwas überarbeitet, aber der Cursor springt immer an die erste Stelle im Memo und ich weiss nicht warum.

Delphi-Quellcode:
procedure TForm1.Memo1Change(Sender: TObject);
var
  sText : String;
  i : Integer;
  NewText : String;
  Line : Integer;
begin
  sText := Memo1.Text;

  if CanChange then
    Line := Memo1.CaretPos.Y;

  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;

    //Cursorposition neu setzen
    Memo1.SelStart := Perform(EM_LINEINDEX, Line, 0) ;
  end;

  CanChange := True;
end;

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 .
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 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:11 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