RichEdit Zeile einfügen
-
zu 1) Dass du das begründet hast ändert doch nichts an dem Umstand, dass die Lösung damit untauglich ist. Oder willst du dem Benutzer vorschreiben, wo er automatische Einrückungen erwarten darf und wo nicht? Da hilft also nur weiter "drüseln", im BCB-Editor funktioniert's ja auch.
zu 2) Ich verstehe nicht so recht, was deine Erklärung mit dem von mir gezeigten "Bug" zu tun hat. Und wenn es um universelle Lösung für beliebige Zeichen geht dann sollte das Ganze nach Möglichkeit auch ohne doppelten Code auskommen.
Du hast die FAQ in's Spiel gebracht, also sollte die Lösung auch einigermassen wasserdicht sein.
-
zu1) Ich begründe nur meine Unfähigkeit, @Jansen. 'n kleicher Tip aus der Runde, vielleicht auch mal 'ne Codezeile, ansonsten heißt es erst mal Suchen. Ich find keinen Anhaltspunkt.
zu2) Bei mir wirkt sich das nicht als Bug aus. Ich erhalte keine zusätzliche Leerzeile. Die Bedingungen sind nicht true, VK_RETURN wirkt ganz normal. Man müßte dann die Zeile manuell mit dem Unterstrich beginnen.
Hast Recht. Doppelter Code ist sowieso nie sinnvoll. Werd nachher gleich drangehen.
Über '_', '-' (vielleicht auch '+', '*', was käme noch infrage?)) hab ich mir mal Gedanken gemacht. Das entscheidende Kriterium dürfte sein, daß direkt davor ein '\n' zu sein hat, wenn das Zeichen eine Aufzählung einleiten soll. Bei vorangestellten ' ' oder '\t' wird man aber auch ein '\n' direkt davor sicher nicht prüfen brauchen.
-Oh ich armer ich.
Mußte grad dran denken, daß solche Textausrichtungen noch fehlen. Sonst hätte ich die FAQ gar nicht erwähnt. Für mich hier lokal mach ich da sowieso keinen Unterschied. Nur reifer Code ist akzeptabler Code. Was heute nicht gelingt, wird morgen wieder in Angriff genommen. Für die "Vitrine" kommen dann nur noch die Kommentare dazu.
Gebraucht wird also auf jeden Fall die Lösung für die erste Zeile.
-
Ole, ich wär dann soweit. '+', '-' und '_' werden nach '\t' oder ' ' oder am Zeilenanfang nach '\n' miterfasst. Wenn ich noch den '*' mit aufnehmen soll, werden die Bedingungsketten recht lang. Weiß nicht, ob sowas Nachteile haben kann.
Wer stiftet die Lösung für die 1. Zeile?
Text nach Cursor darf nicht abgeschnitten werden. Ich find keinen Hinweis, warum es das macht.
-
Ich komm mit deinem Code nicht klar. Weil er bei mir nicht die Eigenschaften zeigt die du hier berichtest. Er fügt 2 Zeilen ein nachdrücken der Enter Taste , wobei in der ersten Zeile kurzzeitig der Zeilenvorschub AMrkiert sichtbar ist. Ich kuck mir das morgen nochmal genauer an aber zurzeit hinke ich irgendwie hinterher?
-
Nanu? Ausnahmslos Spezalisten an Bord?
Also ohne Code für die erste Zeile = keine FAQ:
<snip>siehe nachfolgende Beiträge</snip>
[ Dieser Beitrag wurde am 20.05.2003 um 15:54 Uhr von Jansen editiert. ]
-
*Au_weia*! Den Code aus meinem letzten Beitrag bitte meistbietend verbrennen - gröbste Schnitzer.
Ich glaub, jetzt bin ich erst mal zufrieden. Sind noch Bugs drin?:
<snip>siehe nachfolgende Beiträge</snip>
[ Dieser Beitrag wurde am 20.05.2003 um 15:55 Uhr von Jansen editiert. ]
-
Hab vorhin gemerxt, wenn ich den Cursor vorn in einer Zeiel ansetz und einen Zeilenumbruch schaffe, dann auf
*RE->Lines->Strings[line_nr-1].AnsiLastChar() == '\n'
prüfe, bekomm ich eine Zugriffsverletzung. Tatsächlich ist dann das letzte sichtbare Zeichen der vorangegangenen Zeile der AnsiLastChar(). Mein Vorhaben, nur erkennbar gewollte Aufzählungszeichen zu akzeptieren, dürfte damit gescheitert sein.Hab diese Prüfungen und damit auch einige if-Zweige weggelassen. Jetzt kann ich keinen Bug mehr feststellen.
Ich sollte diese Version nochmal posten. Aber die vielen fast gleichen Versionen hinternander, da blickt niemand durch. Ich will auch nicht den Thread total verbomben. Soll ich es posten und einer der Mods wär ggf. so freundlich, die störenden Beiträge incl. diesem zu löschen?
-
Jo, mach mal. Aber nimm doch bitte die C++Code-Tags.
-
Ole, das war's. Bei mir arbeitet die Function jetzt sauber. Hier noch mal der Code + Function für die Wechselschaltung (bei mir) über MenuItem:
void __fastcall TChild::EinrueckClick(TObject *Sender) { Einrueck->Checked = !Einrueck->Checked; if (Einrueck->Checked) Einrueck->Tag = 1; else Einrueck->Tag = 0; } //--------------------------------------------------------------------------- void __fastcall TChild::REKeyPress(TObject *Sender, char &Key) { if (Key == VK_RETURN && Einrueck->Tag == 1) { int line_nr = RE->CaretPos.y, lz = 1, start; String line_txt = RE->Lines->Strings[line_nr], lzs = ""; // Auf erstes Zeichen prüfen if (RE->Lines->Strings[line_nr].SubString(0,1) == ' ' || RE->Lines->Strings[line_nr].SubString(0,1) == '\t' || RE->Lines->Strings[line_nr].SubString(0,1) == '+' || RE->Lines->Strings[line_nr].SubString(0,1) == '-' || RE->Lines->Strings[line_nr].SubString(0,1) == '_') { // Anzahl der Zeichen in der Zeile ermitteln for (lz; lz <= line_txt.Length(); lz++) { // aussteigen, wenn am Zeilenanfang kein zu referierendes Zeichen if ((line_txt[lz] != ' ' && line_txt[lz] != '\t' && line_txt[lz] != '+' && line_txt[lz] != '-' && line_txt[lz] != '_') || lz > RE->CaretPos.x) break; // String für Zeilenanfang zusammenstellen else if (line_txt[lz] == ' ') lzs = lzs + " "; else if (line_txt[lz] == '\t') lzs = lzs + "\t"; else if (line_txt[lz] == '+') lzs = lzs + "+"; else if (line_txt[lz] == '-') lzs = lzs + "-"; else if (line_txt[lz] == '_') lzs = lzs + "_"; } // mindestens 1 zu wiederholendes Zeichen gefunden? if (lz > 1) { // ZeilenNummer aktuell ermitteln line_nr = RE->CaretPos.y; // CursorPosition merken start = RE->SelStart; // Aus aktueller Zeile 2 Zeilen machen: // LeerString + String hinter Cursor in neue Zeile RE->Lines->Strings[line_nr] = RE->Lines->Strings[line_nr].SubString(0,RE->CaretPos.x)+ "\r\n"+lzs+RE->Lines->Strings[line_nr].SubString(RE->CaretPos.x+1, line_txt.Length()-RE->CaretPos.x+1); // Cursor hinter LeerzeichenString positionieren RE->SelStart = start + lz +1; // '\n' wurde eingearbeitet, Key löschen Key = 0; } } } // war keine Bedingung true, löst VK_RETURN Zeilenwechsel aus }
-
Sorry @Jansen, hab erst nach dem Posten deinen Hinweis auf die C++-Codetags gesehen. Ich blick auf den Text, seh im Augenwinkel das Wort "Code" und drück drauf - *Zerstreuter Prof*. Ich gelobe Besserung.
@mosta, sorry für das Durcheinander. Da waren ein paar Haken und Ösen, ein paar unverstandene Sachen, Überraschungen, Neuland, teilweise dünne Scheibe :p .
Dafür sollte es jetzt aber blitzsauber laufen. Hab jedenfalls keinen krummen Hund mehr entdeckt.
-
Bei mir bearbeited er Key=0 nicht er setzt einfach eine neue Zeile ein. Was muss ich für Einstellung an der RichEdit vornehmen.
-
Bist du im OnKeyPress? In anderen Ereignissen kannst du nicht Key=0 setzen. Hatte ich aber klar geschrieben, als ich die Doppelfunction gepostst hab.
-
Oh, ich hatte KeyDown