Autor Beitrag
Stinger47
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 01.01.07 05:23 
so da nun ein andres problem behoben ist kommt nun das nächste....^^
wie erkenne ich die letzte zeile von richedit?..
über RichEdit1.Lines.Count gibt er mir einen falschen wert aus 11 stat nur 7...
zeile 85 - 89 soll er abarbeiten überspringt er aber....
ausblenden volle Höhe Delphi-Quelltext
 
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
{ ... }
begin

richedit1.Lines.LoadFromFile('c:\abcde.abc');
  k:= RichEdit1.Lines.Count;


  for I := 0 to RichEdit1.Lines.Count
        do
          begin
            if RichEdit1.Lines[i] = DateToStr(Now)
              then
                begin
                  Flag := False;
                  if RichEdit1.Lines[k - 1] <> ''
                    then
                      begin
                        RichEdit1.Text  :=    RichEdit1.Text + #13#10;
                      end;
                  RichEdit1.SelStart:=  RichEdit1.GetTextLen;
                  Exit;
                end
              else
               Flag    := True;
          end;


  if RichEdit1.Text = ''                                     // öhm hier beginnt der teil falls die datei ganz leer ist
    then                                                     // oder halt flag = True gesetzt wurde also kein aktuelles
      begin                                                  // datum zu finden war und ein neuer eintrag gesetzt wird..
        RichEdit1.Text    :=    DateToStr(Now) + #13#10;
        RichEdit1.SelStart:= Richedit1.GetTextLen;
      end
    else
      if Flag = True
        then
          begin
            RichEdit1.Text    :=    RichEdit1.Text + #13#10 + DateToSTr(Now);
            if RichEdit1.Lines[k] = ''
              then
                begin
                  RichEdit1.Text    :=    RichEdit1.Text;
                end
              else
                begin
                  RichEdit1.Text:= RichEdit1.Text + #13#10;
                end;
            RichEdit1.SelStart:=    RichEdit1.GetTextLen;
          end;end;


Zuletzt bearbeitet von Stinger47 am Mo 01.01.07 06:50, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 01.01.07 05:41 
1. Zeile 78: Du gehst eine Zeile zu weit! Du musst bis Count - 1 gehen, das ist die letzte Zeile.
2. Ich vermute mal, dass da noch Leerzeilen in deinem RichEdit sind, die werden mitgezählt. (Von wegen 11 statt 7) ;-)
3. Zeile 74/85:
user profile iconStinger47 hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
k:= RichEdit1.GetTextLen;					
und
user profile iconStinger47 hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
RichEdit1.Lines[k]					
k ist die Länge des Texts in Buchstaben bei dir. Soviele Zeilen hast du gar nicht. k wird soweit du das gepostet hast ja gar nicht verändert. Nun ja, und deshalb gibt es diese Zeile gar nicht, denn die Anzahl der Buchstaben ist sicher größer als die der Zeilen.

// EDIT:
Was möchtest du eigentlich machen? Das ist mir im Moment nicht klar, außer, dass du das Datum suchst, aber was soll dann passieren...
Wozu benutzt du ein RichEdit für diese Abfrage? Du lädst doch nur etwas aus einer Datei und suchst dadrin. Das kannst du ja auch ohne RichEdit oder eine andere visuelle Komponente machen. Oder soll der User das auch sehen?
Stinger47 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 01.01.07 05:52 
hmmm jetzt wo dus sagst leuchtets auch ein aber ich hatte am anfang auch k := RichEdit1.Lines.Count stehen nur wenn ich das programm dann starte steht im debugger das k = 1 ist und das ist dann ja auch nicht richtig....
und ich meintte schon diese zeilen aber ja irgendwo hattest recht das davor muss zunächst kommen..
aber expliziet geht es um diese if anweisung....
es soll nämlich falls das datum vorhanden ist geschaut werden ob dir letzte zeile eine leerzeile ist oder ob dort das datum steht...
steht dort die leerzeile soll der cursor einfach dorthin gesetzt werden...
ist dort nur das datum und der cursor hinterm datum abgespeichert worden soll ein absatz gesetzt werden und der cursor in die letzte zeile halt...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 01.01.07 05:55 
Du solltest erst die Datei laden und dann k auf die Anzahl der Zeilen setzen ;-). Denn die 1 ist an der Stelle ja richtig, es ist ja noch nix im RichEdit drin (eine Leerzeile oder die Standardzeile, falls du die nicht gelöscht hast schon, daher die 1 und nicht 0)...
Und die letzte Zeile ist k := RichEdit1.Lines.Count - 1;.
Stinger47 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 01.01.07 06:04 
oh man kopf gegen die wand...XD :oops:
danke ja funzt jetzt
meintest ja auch die letzte zeile wäre RichEdit1.Lines.Count - 1 dann funktioniert es....
also dankö....:)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 01.01.07 06:07 
user profile iconStinger47 hat folgendes geschrieben:
oh man kopf gegen die wand...XD
Meinst du das? :autsch:
Klick einfach auf "mehr" rechts neben den Smilies :D ;-) :lol:
Stinger47 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 01.01.07 07:03 
ja das drückt aus was ich dachte...^^
aber nochma zu dem programm ma wieder...^^ so wart "smilies....mehr..." :autsch: ^^
und zwar kommt es nun auf eine sache drauf an....
angenommen ich starte das programm und das ganze ist leer..dann schreibt er korrekt datum in die erste zeil macht mir nen schönen absatz und so...
so das speicher ich und schließe das prog...
beim öffnen gibts da jetzt so n haken egal ob der cursor hinter dem datum oder in der nächsten zeile steht (nächste zeile = zeile unterm datum = leerzeile) er macht mir noch nen absatz...hinterm datum ist das auch richtig dann will ich nen absatz aber sonst net wenn schon einer da ist...
das ding ist das bei beiden fällen RichEdit1.Lines.Count = 1 ist.....
eine idee wie ich diesen fall umgehen kann das er mir entweder a) die richtige letzte zeile anzeigt oder b) bei diesem fall wo cursor in leerzeile er kein absatz mehr macht??...
code sieht halt jetzt wiefolgt aus...
ausblenden volle Höhe Delphi-Quelltext
 
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
{ ... }
begin

  richedit1.Lines.LoadFromFile('c:\abcde.abc');
  k:= RichEdit1.Lines.Count;


  for I := 0 to RichEdit1.Lines.Count
        do
          begin
            if RichEdit1.Lines[i] = DateToStr(Now)
              then
                begin
                  Flag := False;
                  if RichEdit1.Lines[k - 1] <> ''
                    then
                      begin
                        RichEdit1.Text  :=    RichEdit1.Text + #13#10;
                      end;
                  RichEdit1.SelStart:=  RichEdit1.GetTextLen;
                  Exit;
                end
              else
               Flag    := True;
          end;


  if RichEdit1.Text = ''                     // öhm hier beginnt der teil wo die datei vollkommen 
    then                                     // leer ist oder Flag halt auf True ist und somit kein
      begin                                  // kein aktuelles datum vorhanden wäre
        RichEdit1.Text    :=    DateToStr(Now) + #13#10;
        RichEdit1.SelStart:= Richedit1.GetTextLen;
      end
    else
      if Flag = True
        then
          begin
            RichEdit1.Text    :=    RichEdit1.Text + #13#10 + DateToSTr(Now);
            if RichEdit1.Lines[k] = ''
              then
                begin
                  RichEdit1.Text    :=    RichEdit1.Text;
                end
              else
                begin
                  RichEdit1.Text:= RichEdit1.Text + #13#10;
                end;
            RichEdit1.SelStart:=    RichEdit1.GetTextLen;
          end;end;
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 01.01.07 11:27 
Die I-Schleife ist immer noch falsch (0 to Count - 1) und du solltest deinen Source mal richtig formatieren ;-):
begin

ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
RichEdit1.Lines.LoadFromFile('C:\abcde.abc');  
  K := RichEdit1.Lines.Count;  
 
  Flag := True;                                      // Wir gehen davon aus, dass wir nichts finden
                                                     // werden und setzen Flag vorher schon auf True.

  for I := 0 to RichEdit1.Lines.Count 1 do  
    if RichEdit1.Lines[I] = DateToStr(Now) then  
    begin  
       Flag := False;
                                                    
       if RichEdit1.Lines[K - 1] <> '' then  
         RichEdit1.Text := RichEdit1.Text + #13#10;    
        
       RichEdit1.SelStart := RichEdit1.GetTextLen;    // Exit kommt weg, das ist nicht so schön ;-)
    end;                                              // Flag muss nicht mehr jedesmal auf True gesetzte werden   

 
  if Flag then
    if Trim(RichtEdit1.Text) = '' then                // Kann ja passieren, dass im RichEdit ein Leerzeichen ist,
    begin                                             // dann würde er hier nicht reingehen, deshalb trim()
      RichEdit1.Text     := DateToStr(Now) + #13#10;
      RichEdit1.SelStart := Richedit1.GetTextLen;  
    end  
    else  
    begin
      RichEdit1.Text := RichEdit1.Text + #13#10 + DateToStr(Now); 
 
      if Trim(RichEdit1.Lines[K]) <> '' then         // Hier stimmt K, weil wir ja eine neue Zeile haben 
        RichEdit1.Text := RichEdit1.Text + #13#10;   // Das vorherige ergab keinen Sinn, wir benutzen <> anstatt =   

      RichEdit1.Text := RichEdit1.Text + #13#10;  
      
      RichEdit1.SelStart := RichEdit1.GetTextLen;  
    end;
end;

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Stinger47 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 01.01.07 17:06 
hmmm könntest du mir kurz erklären wie die trim routine funktioniert?..
weiß was sie macht aber nicht wie genau...
delphi hilfe war auch net gerade nützlich und hier im foorum kennen das anscheinen schon alle und wird vorausgesetzt...^^
und es gibt dennoch noch einen fehler....
folgende situation.....
erste zeile = Datum(Now)
dann macht er richtig einen absatz...
so schließe ich das programm jetzt ist der curso unterm datum und das wird so in ne datei gespeichert...
beim öffnen ist der absatz ja noch da aber wird nich als solcher erkannt?...
auf jeden fall geht er i der for to do schleife in in die if-abfrage rein und führt dann
ausblenden Delphi-Quelltext
1:
2:
3:
begin
if RichEdit1.Lines[k] <> '' then
            RichEdit1.Text    :=    RichEdit1.Text + #13#10;

aus und somit hätte ich wieder einen absatz zu viel..?...
so ist dann nämlich
zeile 1 = Datum(now)
zeile 2 = #13#10
zeile 3 = #13#10

speicher ich das und starte neu macht er keinen absatz da die zeile davor ja ne leerzeile ist....
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mo 01.01.07 17:10 
Vllt. hilft ja das : delphi.about.com/b/a/257700.htm
Stinger47 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 01.01.07 17:24 
hmmm..theoretisch könnte es mir vielleicht helfen aber wie komme ich denn an die meldung ran...
ausführem macht ers ja anscheinen aber wie lese ich das dann aus?....
falls noch jemand eine andere möglichkeit findet obiges problem zu lösen gerne...^^
Stinger47 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 01.01.07 17:27 
ok das mit dem link hat sich erldeigt weiß es jetzt...ma schauen obs klapp falls noch andere lösungen gepostet werden gerne...^^
Stinger47 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 01.01.07 17:34 
Danke!!!
das mit dem richedit1.perform klappt wunderbar...:)
danke für den link...:)
aber könnte mir trotzdem nochmal einer bitte dieses trim erklären das wäre net...^^
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 01.01.07 18:17 
Trim() schneidet die [unnötigen] Leerzeichen vor und nach dem String ab.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 01.01.07 20:06 
Hallo,

kleine Ergänzung:
... und Steuerzeichen.

also entfernt Trim auch Zeilenumbrüche am Ende eines RichEdit.Text.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Stinger47 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 01.01.07 21:42 
ok danke für die erklärung...hab noch n bissen damit rumgespielt und denke habs nun einigermaßen verstanen wies zu gebrauchen ist und mit öfterem gebrauch wirds wohl besser werden...
also nochma danke an alle die mir geholfen haben...:)