[Delphi] RitchEdit Zeilenanzahl

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Mutator, 9. Januar 2007 .

Schlagworte:
  1. 9. Januar 2007
    RitchEdit Zeilenanzahl

    Hallöchen leute,

    ich hab ein kleines Problem bei Delphi und zwar möchte ich aus einem RitchEdit Feld alle Zeilen in denen ich was eingegeben habe in nem label ausgaben, habs schon mit " Memo.Lines.Count " probiert aber die funktion gibt was komisches aus, so in etwa:

    Code:
    Tasteneingabe = Zeilenausgabe
    
    [ENTER]
    [ENTER] = 1 ( sollte doch 2 sein oder O.o )
    
    [IRGENDWAS][IRGENDWAS] = 4 ( kp wie des dann kommt )
    
    wisst ihr wie ich eine genaue Zeilenanzhal hinbekomme ?!

    greetz Mutator
     
  2. 9. Januar 2007
    AW: RitchEdit Zeilenanzahl

    Hi!
    Also ich nehme an das Du mit Borland arbeitest. Ich programmiere zwar c++, aber teilweise auch mit Borland und da tut sich nicht viel zwischen den Sprachen Also bei mir klappt es mit Count.

    Code:
     Label1->Caption=IntToStr(RichEdit1->Lines->Count);
    
    Da die Pfeile bei dir Punkte sind, müsste es bei dir so aussehen:

    Code:
     Label1.Caption=IntToStr(RichEdit1.Lines.Count);
    
    Allerdings weiß ich nicht, wie du es ausgeben lässt. Bei mir funktioniert es wenn ich auf einen Button klicke. Ich hab aber auch kurz versucht die Ausgabe der Zeilenanzahl bei jedem Tastendruck ins Label zu kopieren. Das hat nicht so ganz geklappt, da hat er öfter mal ne Zeile "verschluckt". Vlt versuchst du es genauso... ?
     
  3. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    mit der count methode kommt ja gerade diese komische Aufzählung ;(
    kann ich die zeilenanzahl nicht anders herausbekommen ?!

    greetz
     
  4. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    das muss Richedit1.Lines.Count heißen.. bei mir klappt das auf jeden fall... wenns nicht klappt hol dir einfach mal die neuste version vom Kompiler.. oder stell am besten mal den quelltext hier rein....
     
  5. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    Das Problem dabei ist ein anderes, glaub ich:

    Computer haben die Eigenschaft beim Zählen bei 0 anzufangen. Das merkt man auch z.B. bei einer Listbox. Wenn du dort den ItemIndex des ersten Elements in der Liste ausgeben lässt, spuckt er dir eine 0 und keine 1 aus. Ich weiß zwar nicht, wie das intern gezählt wird, aber ich kann mir gut vorstellen, dass der einfach nur die Nummer der letzten Zeile ausgibt.
    Also du müsstest dann einfach nur eins zu dem Count hinzuaddieren, dann müsste es funktionieren.

    Gruß aus Aachen

    Niederrheiner

    *** Edit ***

    Ich seh gerade, dass das doch nicht so einfach ist... vergess es einfach, ich schlag nochmal nach...
     
  6. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    Code:
    procedure TForm1.MemoKeyPress(Sender: TObject; var Key: Char);
    Begin
     StatusBar1.Panels[0].Text:='Zeile: '+inttostr(Memo.Lines.Count+1);
     if StatusBar1.Panels[1].Text='' then
     StatusBar1.Panels[1].Text:='Datei noch nicht Gespeichert!';
    end;
    so sieht mein Code momentan aus.
     
  7. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    Also wenn ich dei Problem richtig verstanden habe, willst du die "Lines" in einem RichEdit-Feld zählen. Dann musst Du es mit "Count" machen. Dafür ist es doch vorgesehen... oder nicht? ?(

    Oder willst Du vlt nur beschriebene Zeilen zählen?
     
  8. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    ähm...^^ lad mal bitte dein vollständigen Quelltext hoch und erklär noch mal bitte genau was du machen möchtest.. blicke da nicht so wirklich durch.. erst soll irgendwas aus mitm Richedit gemacht werden und jetzt ist es auf einmal nen memo.. außerdem hieß am am anfang du wolltest die anzahl der zeilen ausgeben und deinen letzten post habe ich so verstanden, als wenn du die zeile selber ausgeben wolltest?!?..
    wenn du die ZEILENANZAHL ausgeben möchtest muss das über die count funktion geschehen (wie bereits in mehreren post vorher erläutert wurde)
    wenn du die ZEILE selber ausgeben möchtest musst du das über Memo1 (oder wars doch Richedit1 ).Lines[Zeilennummer] machen....

    aber erklär erst mal bitte deine Absichten
     
  9. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaalso ich hab so ein RitchEdit Feld das ich Memo genannt habe, weil ich vorher ein Memo Fled zum ausprobieren hatte und keine lust dafür die funktionen zu ändern. jaa ich weiß ich bin ne faule sau das weiß ich selbst :tongue:

    hier der gesammt quelltext:

    Code:
    unit Unit1;
    interface
    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, XPMan, Menus, StdCtrls, strUtils, ComCtrls, cxControls,
     cxContainer, cxEdit, cxTextEdit, cxMemo;
    type
     TForm1 = class(TForm)
     MainMenu1: TMainMenu;
     Datei1: TMenuItem;
     Speichern1: TMenuItem;
     Speichern2: TMenuItem;
     Beenden1: TMenuItem;
     Hilfe1: TMenuItem;
     ber1: TMenuItem;
     OpenDialog1: TOpenDialog;
     SaveDialog1: TSaveDialog;
     StatusBar1: TStatusBar;
     Versio1: TMenuItem;
     Memo: TRichEdit;
     procedure Beenden1Click(Sender: TObject);
     procedure ber1Click(Sender: TObject);
     procedure Speichern1Click(Sender: TObject);
     procedure Speichern2Click(Sender: TObject);
     procedure MemoKeyPress(Sender: TObject; var Key: Char);
     procedure Versio1Click(Sender: TObject);
     private
     function getzeile():Integer;
     public
     { Public-Deklarationen }
     end;
    var
     Form1: TForm1;
    implementation
    uses Unit2;
    {$R *.dfm}
    procedure TForm1.Beenden1Click(Sender: TObject);
    begin
     Close;
    end;
    procedure TForm1.ber1Click(Sender: TObject);
    begin
     //Infos in einer extra form
     Form2.Height:=289;
     Form2.Width:=263;
     Form2.btn_Close.Top:=224;
     Form2.btn_Close.Left:=168;
     Form2.Label2.Caption:='Entwickelt von Mutator.'+sLineBreak
     +''+sLineBreak+'Dieses Programm darf frei weitergegeben,'+
     sLineBreak+'verändert und benutzt werden.'+sLineBreak
     +''+sLineBreak
     +'Wenn Sie fragen haben, an der Entwicklung'+sLineBreak
     +'helfen möchten oder Hilfe bei der'+sLineBreak
     +'benutzung benötigen, stehe unter der'+sLineBreak
     +'unten Stehenden E-Mail Adresse für'+sLineBreak
     +'sie zur Verfügung.'+sLineBreak
     +''+sLineBreak
     +'Mit freundlichen Grüßen'+sLineBreak
     +'Mutator'+sLineBreak
     +''+sLineBreak
     +'URL: http://www.mut4t0r.de'+sLineBreak
     +'E-Mail: support@mut4t0r.de';
     Form2.Caption:='Allgemeine Infos';
     Form2.ShowModal;
    end;
    procedure TForm1.Speichern1Click(Sender: TObject);
    begin
     //Öffne Datei
     OpenDialog1.Execute;
     StatusBar1.Panels[1].Text:=Leftstr(OpenDialog1.Files.Text, Length(OpenDialog1.Files.Text)-2);
     Memo.Lines.LoadFromFile(Leftstr(OpenDialog1.Files.Text, Length(OpenDialog1.Files.Text)-2));
    end;
    procedure TForm1.Speichern2Click(Sender: TObject);
    var Pfad:String;
     position:Integer;
    begin
     //Datei Speichern
     SaveDialog1.Title:='Speichern';
     SaveDialog1.Execute;
     Pfad:=SaveDialog1.Files.Text;
     WHILE position<>0 DO
     begin
     position:=Pos('\', Pfad);
     if position <> 0 then
     begin
     Pfad:=RightStr(Pfad,Length(Pfad)-position);
     end;
     end;
     Pfad:=LeftStr(Pfad,Length(Pfad)-2);
     Memo.Lines.SaveToFile(Pfad);
     StatusBar1.Panels[1].Text:=Pfad;
    end;
    function TForm1.getzeile():Integer;
    var
     i, u:Integer;
    begin
    u:=0;
    i:=0;
    while i<Memo.Lines.Count+1 do
     begin
     i:=i+1;
     u:=u+1;
     end;
     result:=u;
    end;
    
    procedure TForm1.MemoKeyPress(Sender: TObject; var Key: Char);
    Begin
     //anzeige in der Status Bar unten
     StatusBar1.Panels[0].Text:='Zeile: '+inttostr(Memo.Lines.Count+1);
     if StatusBar1.Panels[1].Text='' then
     StatusBar1.Panels[1].Text:='Datei noch nicht Gespeichert!';
    end;
    procedure TForm1.Versio1Click(Sender: TObject);
    begin
     //Versionsinfos auch in einem extra Feld
     Form2.Height:=161;
     Form2.Width:=263;
     Form2.btn_Close.Top:=96;
     Form2.btn_Close.Left:=168;
     Form2.Caption:='Version';
     Form2.Label2.Caption:='Versionsnummer: 0.0.2'+sLineBreak
     +'Datum: 09.01.2007'+sLineBreak
     +'Updates stehen wenn dann auf meiner Homepage.'+sLineBreak+sLineBreak
     +'MfG Mutator';
     Form2.Show;
    end;
    end.
    Mein Vorhaben ist das unten links angezeigt wird wie viele Zeilen ich schon vollgeschrieben habe, hat mit der count funktion nicht gefunzt.

    also so

    blablablablablablablablablablablablablablabla
    blablablablablablablablablablablablablablabla

    = unten 2 Zeilen anzeigen aber mit count ist das dann 4
     
  10. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    Code:
    procedure TForm1.MemoKeyPress(Sender: TObject; var Key: Char);
    Begin
     StatusBar1.Panels[0].Text:='Zeile: '+inttostr(Memo.Lines.Count+1);
     if StatusBar1.Panels[1].Text='' then
     StatusBar1.Panels[1].Text:='Datei noch nicht Gespeichert!';
    end;
    
    Da benutzt er eine Statusbar um die Zeilen zu zählen. Das ist aber eigentlich ein Umweg und er benutzt auch hier die Funktion "count" (warum da memo steht weiß ich auch nicht ?(). Eigentlich macht er, wenn ichs richtig verstanden habe, nichts anderes als die Zeilen mit "count" zu zählen, dann eine Statusbar die Zeilenanzahl als schritte anzeigen zu lassen un später wieder die schritte in der Statusbar abzulesen...
     
  11. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    ah^^.. jetzt hab ichs verstanden^^.... also beim richedit brauchst du nach dem count keine +1. wenn du eine Zeile beschrieben hast, ist count auch 1.. das bei 2 zeilen 4 angezeigt werden liegt also an der plus 1 und wahrscheinlich daran dass du noch nen zeilenumbruch mehr hast, d.h. der cursor steht vermutlich schon in zeile 3, daher 3 zeilen... kannst ja noch überprüfen, ob in der zeile schon was drin steht.. dann passiert das nicht.. bsp:
    Code:
    var zeilen : Integer;
    .
    .
    .
    zeilen:= Memo.Lines.Count;
    If Memo.Lines[zeilen] = ''
     Then zeilen:=zeilen-1;
    hoffe das funzt jetzt
     
  12. 10. Januar 2007
    AW: RitchEdit Zeilenanzahl

    hmm ich hab´s probiert aber da fängt der bei -1 an ^^ das iss ah net so das dolle
    das ist das Progrämmchen falls ihr des euch ansehen wollt was da das problem ist.
    Link
     
  13. 9. Februar 2007
    AW: RitchEdit Zeilenanzahl

    Hier liegt wohl der Fehler (Falsches Ereigniss: OnKeyPress):

    Code:
    procedure TForm1.MemoKeyPress(Sender: TObject; var Key: Char);
    Muss in dieses Ereigniss von TMemo OnChange:

    Code:
    procedure TForm1.Memo1Change(Sender: TObject);

    Und außerdem braucht ihr nichts zum "Count" zu addieren, also einfach so lassen ohne
    was zu addieren bzw. subtrahieren.

    Mfg

    Rushh0ur
     
  14. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.