Hallo allerseits,
Ich möchte XbpMLE nur um Tabulatoren erweitern. Wenn man XbpMLE:ignoreTabs auf FALSE gesetzt hat, werden im Eingabefeld die Tabulatoren als "Standardtabulatoren" behandelt, ich vermute so alle 1 Zoll kommt ein linksbündiger Tab.
Gibt es eine Möglichkeit dem XbpMLE Tabulatoren vorzugeben (auch Rechtsbündige)?
Uli
XbpMLE und Tabulatoren
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Re: XbpMLE und Tabulatoren
Hallo Uli,
linksbündige Tabulaturen kannst du im XbpMLE über die Windows-Message EM_SETTABSTOPS setzen, zum Beispiel:
Die Tabstops sind in Dialogtemplate-Einheiten angegeben, die jeweils 1/4 der durchschnittlichen Zeichenbreite des verwendeten Fonts entsprechen. Der normale Tabulatorabstand beträgt 32 Einheiten und damit 8 Zeichen durchschnittlicher Breite.
Rechtsbündige Tabs kann XbpMLE im Richtext-Modus darstellen, wenn ein passend rtf-codierter String übergeben wird. Selbst als einfacher Richtext-Editor ist XbpMLE in diesem Modus aber leider unbrauchbar.
linksbündige Tabulaturen kannst du im XbpMLE über die Windows-Message EM_SETTABSTOPS setzen, zum Beispiel:
Code: Alles auswählen
#define EM_SETTABSTOPS 0x00CB
aTabStops := {10,30,60,100,150,210}
sTabStops := ""
FOR i := 1 TO len( aTabStops )
sTabStops += U2Bin( aTabStops[i] )
NEXT
rc := SendMessageA( oMLE:getHWND(), EM_SETTABSTOPS, len( aTabStops ), sTabStops )
/*
Edit:
anschließend ist
oMLE:invalidateRect()
nötig.
Um einen gleichmäßigen Tabulatorabstand zu setzen, reicht
SendMessageA( oMLE:getHWND(), EM_SETTABSTOPS, 1, U2Bin(nTababstand) )
Und um den Normalzustand wieder herzustellen,
SendMessageA( oMLE:getHWND(), EM_SETTABSTOPS, 0, 0 )
*/
DLLFUNCTION SendMessageA( hwnd, msg, wparam, lparam ) ;
USING STDCALL from user32.dll
Die Tabstops sind in Dialogtemplate-Einheiten angegeben, die jeweils 1/4 der durchschnittlichen Zeichenbreite des verwendeten Fonts entsprechen. Der normale Tabulatorabstand beträgt 32 Einheiten und damit 8 Zeichen durchschnittlicher Breite.
Rechtsbündige Tabs kann XbpMLE im Richtext-Modus darstellen, wenn ein passend rtf-codierter String übergeben wird. Selbst als einfacher Richtext-Editor ist XbpMLE in diesem Modus aber leider unbrauchbar.
Code: Alles auswählen
oMle := XbpMLE():New(...)
oMle:Format := 3 // Richtext-Modus
oMle:Create()
oMle:setData( MemoRead( "RtfDatei.rtf" ) )
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: XbpMLE und Tabulatoren
Genau das suchte ich.
Ergänzende Frage dazu:
Wenn ich den Inhalt drucken will, was muss ich tun, damit die Tabs auf dem Ausdruck berücksichtigt werden?
Ergänzende Frage dazu:
Wenn ich den Inhalt drucken will, was muss ich tun, damit die Tabs auf dem Ausdruck berücksichtigt werden?
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Re: XbpMLE und Tabulatoren
Hallo Herbert,
du rechnest die Tab-Positionen in Pixel um, zerlegst die Zeile in ihre (durch Tab getrennten) Einzelteile und
druckst die Teilstrings einzeln mit GraStringAt() an diesen Positionen, den ersten Teilstring an Position 0.
Wenn du links einen Rand lassen willst, verschieben sich die Positionen entsprechend.
Die durchschnittliche Zeichenbreite erhältst du nach http://support.microsoft.com/default.as ... -US;145994
mit
Dabei ist oPS der Presentation Space des Druckers mit bereits selektiertem Font.
Die Position der Tabs ist dann
Gruß,
Günter
du rechnest die Tab-Positionen in Pixel um, zerlegst die Zeile in ihre (durch Tab getrennten) Einzelteile und
druckst die Teilstrings einzeln mit GraStringAt() an diesen Positionen, den ersten Teilstring an Position 0.
Wenn du links einen Rand lassen willst, verschieben sich die Positionen entsprechend.
Die durchschnittliche Zeichenbreite erhältst du nach http://support.microsoft.com/default.as ... -US;145994
mit
Code: Alles auswählen
aPoints := GraQueryTextBox( oPS, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" )
nTextWidth := aPoints[3][1] - aPoints[2][1]
nDurchschnittsZeichenBreite := round( (nTextWidth / 26 + 1) / 2, 0)
Die Position der Tabs ist dann
Code: Alles auswählen
nTabPositionInPixels := round( nTabPositionInUnits * nDurchschnittsZeichenBreite / 4, 0 )
Günter
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: XbpMLE und Tabulatoren
Danke, danke
Ich dachte, es gäbe einen Trick, ohne die Rechnerei machen zu müssen.
Ich dachte, es gäbe einen Trick, ohne die Rechnerei machen zu müssen.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...