Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Letzte Zeile von RichEdit erkennen
Stinger47 - Mo 01.01.07 05:23
Titel: Letzte Zeile von RichEdit erkennen
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....
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 = '' 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; |
jaenicke - 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
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 - 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 - 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 - 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 - Mo 01.01.07 06:07
Stinger47 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 - 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...
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 = '' 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 - 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
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; 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; |
Stinger47 - 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....
Stinger47 - 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 - 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 - 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 - Mo 01.01.07 18:17
Trim() schneidet die [unnötigen] Leerzeichen vor und nach dem String ab.
Lannes - Mo 01.01.07 20:06
Hallo,
kleine Ergänzung:
... und Steuerzeichen.
also entfernt Trim auch Zeilenumbrüche am Ende eines RichEdit.Text.
Stinger47 - 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...:)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!