Rocksolid Light

groups  faq  privacy  How to post  login

Message-ID:  

You own a dog, but you can only feed a cat.


rocksolid / de.comp.lang.vbclassic / Tabs in der Rich Textbox

SubjectAuthor
* Tabs in der Rich TextboxKlaus Ketelaer
`* Re: Tabs in der Rich TextboxWendelin Uez
 +- Re: Tabs in der Rich TextboxKlaus Ketelaer
 `- Re: Tabs in der Rich TextboxKlaus Ketelaer

1
Subject: Tabs in der Rich Textbox
From: Klaus Ketelaer
Newsgroups: de.comp.lang.vbclassic
Date: Thu, 14 Sep 2023 13:09 UTC
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From: use...@ketelaer.de (Klaus Ketelaer)
Newsgroups: de.comp.lang.vbclassic
Subject: Tabs in der Rich Textbox
Date: Thu, 14 Sep 2023 15:09:26 +0200
Message-ID: <udv0m6$4vgk$1@solani.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Thu, 14 Sep 2023 13:09:26 -0000 (UTC)
Injection-Info: solani.org;
logging-data="163348"; mail-complaints-to="abuse@news.solani.org"
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.19)
Gecko/20081209 Lightning/0.9 Thunderbird/2.0.0.19
Cancel-Lock: sha1:rqGMrO3X83IRnAo8YQ4c+9hjG4s=
X-User-ID: eJwFwQkBwDAIA0BLQHg6OS0Q/xJ2F0jNLs9IDwavsD9fudavsZ4jb3wVs3Y4hrCEclk+0FM/NH8RhQ==
View all headers

Hallo zusammen,

ich hätte 2 Fragen zur Ritch Textbox.

Wenn ich in der Rich Textbox keine Tabulatoren eingerichtet habe,
dann habe ich eine Standard-Tabulatorgröße von 6 Zeichen. Wie kann
ich diesen Wert abfragen und ggf. ändern, ohne neue Tabulatoren
einzurichten?

Gibt es eine Möglichkeit die korrekte Spaltenposition in einer Zeile
zu berechnen, ohne sich einen abzubrechen?

Berechnungen wie EM_GETSEL - EM_LINEINDEX liefern nur Quark weil
Tabulatoren nur als 1 Zeichen gewertet werden.

Ich habe jetzt die folgende Funktion programmiert, die einwandfrei
funktioniert; Aber das kann's ja wohl nicht sein, dass man so einen
Aufwand betreiben muss, der auch alles andere als performant ist.

Public Function CurrentCol() As Long
Dim lSel As Long
Dim lRow As Long
Dim lCol As Long

Dim lPos As Long
Dim i As Long

Call SendMessage(m_RTF.hwnd, EM_GETSEL, 0&, lSel)
lRow = SendMessage(m_RTF.hwnd, EM_LINEFROMCHAR, lSel, ByVal 0&) + 1
lCol = SendMessage(m_RTF.hwnd, EM_LINEINDEX, lRow - 1, 0&) + 1

lPos = 0
For i = lCol To lSel
If Mid$(m_RTF.Text, i, 1) = vbTab Then
lPos = lPos + 1
Do Until (lPos Mod 6) = 0
lPos = lPos + 1
Loop
Else
lPos = lPos + 1
End If
Next i

CurrentCol = lPos + 1

' CurrentCol = m_RTF.SelStart - SendMessage(m_RTF.hwnd, EM_LINEINDEX,
CurrentRow() - 1, 0&) + 1
End Function

Gruß Klaus

Subject: Re: Tabs in der Rich Textbox
From: Wendelin Uez
Newsgroups: de.comp.lang.vbclassic
Organization: A noiseless patient Spider
Date: Fri, 15 Sep 2023 15:21 UTC
References: 1
Path: i2pn2.org!i2pn.org!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: wue...@online.de (Wendelin Uez)
Newsgroups: de.comp.lang.vbclassic
Subject: Re: Tabs in der Rich Textbox
Date: Fri, 15 Sep 2023 17:21:10 +0200
Organization: A noiseless patient Spider
Lines: 12
Message-ID: <ue1svn$3a51r$5@dont-email.me>
References: <udv0m6$4vgk$1@solani.org>
MIME-Version: 1.0
Content-Type: text/plain;
format=flowed;
charset="UTF-8";
reply-type=response
Content-Transfer-Encoding: 8bit
Injection-Date: Fri, 15 Sep 2023 15:24:39 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="422120ecfd50d1711b32b5c1a8f50b48";
logging-data="3478587"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19MLyOFa9lR/a2apASB4uXn"
Cancel-Lock: sha1:mdjVv9A8E+ZI2LGZrATr3D2VEZ0=
X-MimeOLE: Produced By Microsoft MimeOLE V6.3.9600.20671
X-Priority: 3
X-Newsreader: Microsoft Windows Mail 6.0.6002.18005
In-Reply-To: <udv0m6$4vgk$1@solani.org>
X-MSMail-Priority: Normal
View all headers

Soweit ich weiß kann das RTB-Control zwar vbTABs zwar expandieren, hat aber
keine Funktionen um diese Tabs auszulesen oder zu setzen.

Solange die Schrift über einen String konstant bleibt kann man dessen sich
aus der Expansion ergebende Länge über TextWidth ermitteln, d.h. TextWidth
expandiert vbTABs.

In user32.dll gibt es eine Funktion TabbedTextOut, der man u.a. Device
Kontext, x/y-Position, Ausgabestring und eine Liste mit Tab-Definitionen
übergeben und damit eine Textausgabe mit Expansion auf userdefinierte
Tab-Positionen erreichen kann.

Subject: Re: Tabs in der Rich Textbox
From: Klaus Ketelaer
Newsgroups: de.comp.lang.vbclassic
Date: Sat, 16 Sep 2023 00:09 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From: use...@ketelaer.de (Klaus Ketelaer)
Newsgroups: de.comp.lang.vbclassic
Subject: Re: Tabs in der Rich Textbox
Date: Sat, 16 Sep 2023 02:09:33 +0200
Message-ID: <ue2rnu$6tpf$1@solani.org>
References: <udv0m6$4vgk$1@solani.org> <ue1svn$3a51r$5@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 16 Sep 2023 00:09:34 -0000 (UTC)
Injection-Info: solani.org;
logging-data="227119"; mail-complaints-to="abuse@news.solani.org"
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.19)
Gecko/20081209 Lightning/0.9 Thunderbird/2.0.0.19
Cancel-Lock: sha1:I7WQKmQbKDtpcqz24fGFGTNpPCo=
X-User-ID: eJwFwQkBACAIA8BK8gwkzkTpH8E7WEh0eiAcg6lK4EJoth555ALizCy2wt6UzG5ojFG91gcROBCi
In-Reply-To: <ue1svn$3a51r$5@dont-email.me>
View all headers

Am 15.09.2023 um 17:21 schrieb Wendelin Uez:
> Soweit ich weiß kann das RTB-Control zwar vbTABs zwar expandieren, hat
> aber keine Funktionen um diese Tabs auszulesen oder zu setzen.

Tabs kann man mit SelTabs setzen und auslesen

> Solange die Schrift über einen String konstant bleibt kann man dessen
> sich aus der Expansion ergebende Länge über TextWidth ermitteln, d.h.
> TextWidth expandiert vbTABs.

Das Control ist Zeichenbasiert und verfügt über solche Methoden nicht.
Selbst wenn es diese Methoden hätte, was sollte ich damit erreichen?
Die Breite des Textes hilft mir nicht weiter.

> In user32.dll gibt es eine Funktion TabbedTextOut, der man u.a. Device
> Kontext, x/y-Position, Ausgabestring und eine Liste mit Tab-Definitionen
> übergeben und damit eine Textausgabe mit Expansion auf userdefinierte
> Tab-Positionen erreichen kann.

Im Grunde möchte ich nur wissen, ob es eine Funktion gibt, die mir die
logische Cursor-Position und nicht die physische Position zurück gibt.

Wie gesagt, das Problem ist gelöst. Ich hätte es nur gerne besser
gelöst, weil ich den Code irgendwie idiotisch finde ....

Gruß Klaus

Subject: Re: Tabs in der Rich Textbox
From: Klaus Ketelaer
Newsgroups: de.comp.lang.vbclassic
Date: Sat, 16 Sep 2023 15:04 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From: use...@ketelaer.de (Klaus Ketelaer)
Newsgroups: de.comp.lang.vbclassic
Subject: Re: Tabs in der Rich Textbox
Date: Sat, 16 Sep 2023 17:04:20 +0200
Message-ID: <ue4g5k$7tv2$1@solani.org>
References: <udv0m6$4vgk$1@solani.org> <ue1svn$3a51r$5@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 16 Sep 2023 15:04:20 -0000 (UTC)
Injection-Info: solani.org;
logging-data="260066"; mail-complaints-to="abuse@news.solani.org"
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.19)
Gecko/20081209 Lightning/0.9 Thunderbird/2.0.0.19
Cancel-Lock: sha1:LESYmmE5vVQ/o3IbDkvFL2MwSpE=
X-User-ID: eJwNycERACEIA8CW9JBAysEw9F+Ct991w4biwHF8fBTTaRnU3eVB1LQ5/6a+ib5S14pjBJHLHiQaEPg=
In-Reply-To: <ue1svn$3a51r$5@dont-email.me>
View all headers

Am 15.09.2023 um 17:21 schrieb Wendelin Uez:
> Soweit ich weiß kann das RTB-Control zwar vbTABs zwar expandieren, hat
> aber keine Funktionen um diese Tabs auszulesen oder zu setzen.
>
> Solange die Schrift über einen String konstant bleibt kann man dessen
> sich aus der Expansion ergebende Länge über TextWidth ermitteln, d.h.
> TextWidth expandiert vbTABs.
>
> In user32.dll gibt es eine Funktion TabbedTextOut, der man u.a. Device
> Kontext, x/y-Position, Ausgabestring und eine Liste mit Tab-Definitionen
> übergeben und damit eine Textausgabe mit Expansion auf userdefinierte
> Tab-Positionen erreichen kann.

Hier noch einmal die dokumentierte Version, damit Du siehst,
worum es geht:

' Liefert die logische Position des Cursors
Public Function CurrentCol() As Long
Dim lSel As Long ' Selektiertes Zeichen
Dim lRow As Long ' Zeile in der das Zeichen liegt
Dim lCol As Long ' Erste Spalte der zeile
Dim lPos As Long ' Errechnete logische Position der spalte
Dim i As Long

Call SendMessage(m_RTF.hwnd, EM_GETSEL, 0&, lSel) '
Position der Spalte im Dokument
lRow = SendMessage(m_RTF.hwnd, EM_LINEFROMCHAR, lSel, 0&) ' Zeile
in der die Spalte liegt
lCol = SendMessage(m_RTF.hwnd, EM_LINEINDEX, lRow, 0&) + 1 ' Erste
Spalte der Zeile

lPos = 0
' Zeile bis zur aktuellen Position durchlaufen
For i = lCol To lSel
' Prüfe ob das aktukelle Zeichen ein Tab ist
If Mid$(m_RTF.Text, i, 1) = vbTab Then
' Wenn ja, Anzahl Zeichen bis zum nächsten Tab berechnen
lPos = lPos + (m_TabWidth - (lPos Mod m_TabWidth))
Else
' Ein normales Zeichen
lPos = lPos + 1
End If
Next i

' Logische Position des Cursors
CurrentCol = lPos + 1
End Function


rocksolid / de.comp.lang.vbclassic / Tabs in der Rich Textbox

1
server_pubkey.txt

rocksolid light 0.9.136
clearnet tor