![]() |
Re: Aufzählung in RichEdit
Dann hast du dir aber nicht alles dazu durchgelesen.
Beim Tabben musst du als Flag zusätzlich PFM_OFFSETINDENT setzen und dann kannst du dir mal noch die Erläuterungen zu dxStartIndent und dxOffset anschauen. Edit: PFM_OFFSET nicht vergessen. |
Re: Aufzählung in RichEdit
Hm... versteh nicht ganz, was du damit meinst.
Ich versuche gerade mit EM_GETPARAFORMAT die aktuelle Ebene abzufragen (funzt soweit) und eine weitere, tiefere Ebene zu erstellen. Ist das der richtige Weg? [Edit] Ja, ist es! Source kommt später noch dazu - für andere, die das gleiche Problem haben. [/EDIT] |
Re: Aufzählung in RichEdit
Also ich hab dafür nicht erst die vorherige Ebene abfragen müssen, sondern mit den Offsets kannst du relativ zur vorherigen Ebene Einzüge erstellen. Ebenso kann man negative Offsets verwenden (steht alles da...)
|
Re: Aufzählung in RichEdit
Ja. Das stimmt schon. Nur ich möchte ja auch die Nummerierungsart pro Ebene ändern. Also I, A, 1, aa, aaa etc
|
Re: Aufzählung in RichEdit
Dann musst du natürlich abfragen :)
|
Re: Aufzählung in RichEdit
Aber ein Problem gibt's jetzt noch. Funktioniert alles... nur, wenn ich Tab drücke und die Nummerierung geändert wird wird noch ein TAB-Zeichen eingefügt. Das bedeutet, dass in Ebene 7 locker 100m zwischen Caret und Aufzählungszeichen liegen ;)
Spiele schon mit den Werten rum, finde aber die Einstellung nicht. |
Re: Aufzählung in RichEdit
Keine Ahnung wo dein Problem liegt.
Folgendes funktioniert bei mir einwandfrei
Delphi-Quellcode:
Grüße
procedure TForm4.RichEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState); var fmt, fmt_old : TParaFormat2; begin //Initialize structure ZeroMemory(@fmt, SizeOf(TParaFormat2)); ZeroMemory(@fmt_old, SizeOf(TParaFormat2)); fmt.cbSize := SizeOf(TParaFormat2); fmt_old.cbSize := SizeOf(TParaFormat2); //common settings fmt.wNumberingStart := 1; fmt.wNumberingStyle := $200; fmt.wNumberingTab := 360; RichEdit1.Perform(EM_GETPARAFORMAT, 0, LPARAM(@fmt_old)); case Key of VK_RETURN: begin fmt.dwMask := PFM_NUMBERING or PFM_NUMBERINGSTART or PFM_NUMBERINGSTYLE or PFM_NUMBERINGTAB; if fmt_old.wNumbering <> 0 then fmt.wNumbering := fmt_old.wNumbering else fmt.wNumbering := 2; end; VK_TAB: begin fmt.dwMask := PFM_NUMBERING or PFM_NUMBERINGSTART or PFM_NUMBERINGSTYLE or PFM_NUMBERINGTAB or PFM_OFFSETINDENT or PFM_OFFSET; fmt.dxStartIndent := 300; fmt.dxOffset := 100; if fmt_old.wNumbering < 6 then fmt.wNumbering := fmt_old.wNumbering + 1 else fmt.wNumbering := 2; end; end; //perform RichEdit1.Perform(EM_SETPARAFORMAT, 0, LPARAM(@fmt)); end; |
Re: Aufzählung in RichEdit
Vielen Dank für den Quelltext, aber da habe ich das selbe Problem. Nochmal zur Verdeutlichung - kann sein, dass ich mich doof ausgedrückt habe.
Also, ich prüfe bei OnKeyDown ob die "TAB"-Taste gedrückt wurde. Wenn ja, wird eine tiefere Nummerierungsebene begonnen. Um diesen Effekt zu erreichen, musste ich im RichEdit "WantTabs" auf True setzen. Nun stell dir vor, dass ich in Ebene 5 will - also drücke ich 5 Mal die Tab-Taste. Danach bin ich auch in der 5. Ebene, habe aber auch 5 Tabs eingefügt bekommen. Hier nochmal als Bild
Code:
Setze ich "WantTabs" auf False, führt er alles richtig aus, verlässt aber logischerweise auch das Richedit.
1. Hallo
A. Wie I. Geht aa. Es aaa. Dir? Wenn ich statt der Tab-Taste Buttons mit Einrücken und Zurücksetzen erstelle, funktionier es einwandtfrei - ist aber weniger Benutzerfreundlich... Ich hatte schon gedacht, nach dem Umstellen der Nummerierungsebene, das letzte Zeichen im Richedit, also das TAB per WM_KEYDOWN zu löschen, aber das sieht der User. Aber sonst funktioniert alles ganz toll. |
Re: Aufzählung in RichEdit
Und nun hier noch die Lösung!
Also, ich wollte ja verhindern, dass er einen Tab in das RichEdit schreibt. Und ich habe auch schon abgefragt, ob ein TAB gedrückt wurde. OnKeyPress / OnKeyDown / OnKeyUp wird ausgeführt, bevor das Zeichen geschrieben wird.... Das bedeutet, nachdem ich das Zeichen (TAB) abgefangen habe, muss ich es auf meine Art und Weise verarbeiten und dann "vernichten", bevor es nochmal vom RichEdit (oder was auch immer verarbeitet wird). Und das geht einfach damit:
Delphi-Quellcode:
Die Variable "AktuellerParagraphIstEineAufzählung" gibt es bei mir natürlich nicht. Sie sollte nur zeigen, dass man darauf achten soll zu prüfen, ob man sich in einer Aufzählung befindet. Fehlt diese Prüfung, könnte der User keine TABs mehr setzen. Is ja auch doof ^^
if (Key = Char(VK_TAB)) then
begin //Tabulator vernichten, wenn nötig: if (AktuellerParagraphIstEineAufzählung) then begin Key:=#0; //Eigene Verarbeitung starten TieferGliedern(); end; end; So, ich verabschiede mich jetzt mal mit einem großem "Dankeschön"... Dankeschön und Tschüss |
Re: Aufzählung in RichEdit
Ich bin dies umgangen indem ich OnKeyUp genutzt habe.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz