Autor |
Beitrag |
Stinger47
      
Beiträge: 102
|
Verfasst: 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....
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 = '' then begin 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
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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: Stinger47 hat folgendes geschrieben: | Delphi-Quelltext 1:
| k:= RichEdit1.GetTextLen; | |
und Stinger47 hat folgendes geschrieben: | Delphi-Quelltext |
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 
      
Beiträge: 102
|
Verfasst: 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
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 102
|
Verfasst: Mo 01.01.07 06:04
oh man kopf gegen die wand...XD
danke ja funzt jetzt
meintest ja auch die letzte zeile wäre RichEdit1.Lines.Count - 1 dann funktioniert es....
also dankö.... 
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 01.01.07 06:07
|
|
Stinger47 
      
Beiträge: 102
|
Verfasst: 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..."  ^^
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...
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 = '' then begin 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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: 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
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; 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; end; if Flag then if Trim(RichtEdit1.Text) = '' then begin 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 RichEdit1.Text := RichEdit1.Text + #13#10; 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 
      
Beiträge: 102
|
Verfasst: 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
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.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 01.01.07 17:10
|
|
Stinger47 
      
Beiträge: 102
|
Verfasst: 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 
      
Beiträge: 102
|
Verfasst: 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 
      
Beiträge: 102
|
Verfasst: 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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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 
      
Beiträge: 102
|
Verfasst: 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... 
|
|