AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Aufzählung in RichEdit

Ein Thema von FriFra · begonnen am 29. Jul 2003 · letzter Beitrag vom 1. Jun 2009
Antwort Antwort
Seite 2 von 4     12 34      
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Aufzählung in RichEdit

  Alt 26. Mai 2009, 20:27
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.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#12

Re: Aufzählung in RichEdit

  Alt 26. Mai 2009, 20:48
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]
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Aufzählung in RichEdit

  Alt 26. Mai 2009, 20:53
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...)
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#14

Re: Aufzählung in RichEdit

  Alt 26. Mai 2009, 20:56
Ja. Das stimmt schon. Nur ich möchte ja auch die Nummerierungsart pro Ebene ändern. Also I, A, 1, aa, aaa etc
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Aufzählung in RichEdit

  Alt 26. Mai 2009, 20:58
Dann musst du natürlich abfragen
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#16

Re: Aufzählung in RichEdit

  Alt 26. Mai 2009, 21:00
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.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Aufzählung in RichEdit

  Alt 26. Mai 2009, 21:53
Keine Ahnung wo dein Problem liegt.
Folgendes funktioniert bei mir einwandfrei
Delphi-Quellcode:
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;
Grüße
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#18

Re: Aufzählung in RichEdit

  Alt 26. Mai 2009, 23:58
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:
1. Hallo
   A.    Wie
      I.         Geht
         aa.              Es
            aaa.                   Dir?
Setze ich "WantTabs" auf False, führt er alles richtig aus, verlässt aber logischerweise auch das Richedit.

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.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#19

Re: Aufzählung in RichEdit

  Alt 27. Mai 2009, 00:28
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:
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;
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 ^^

So, ich verabschiede mich jetzt mal mit einem großem "Dankeschön"...

Dankeschön und Tschüss
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Aufzählung in RichEdit

  Alt 27. Mai 2009, 05:36
Ich bin dies umgangen indem ich OnKeyUp genutzt habe.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz