Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Zeilenanzahl eines Textfeldes auslesen

Begonnen von cyberchris, Oktober 27, 2012, 21:46:40

⏪ vorheriges - nächstes ⏩

cyberchris

Guten Abend,

ich benötige von einem Textfeld mit Zeilenumbruch in einem Formular die Anzahl der vorhanden Zeilen des Textes. Leider bekomme ich das nicht hin. Hier mein Versuch (aus dem I-Net / http://www.shadoware.de/vb/linecount.html):

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Const EM_GETLINECOUNT = &HBA
Const EM_LINELENGTH = &HC1
Const EM_LINEINDEX = &HBB
Const EM_LINEFROMCHAR = &HC9
Const EM_GETLINE = &HC4
Const EM_GETFIRSTVISIBLELINE = &HCE

Function LineCount(Ctrl As Control) As Long
   LineCount = SendMessage(Ctrl.hWnd, EM_GETLINECOUNT, 0, 0)
End Function


Das versuche ich wie folgt aufzurufen:
MsgBox LineCount(textfeld.value)

Bekomme dann einen Fehler bei Zeile:    LineCount = SendMessage(Ctrl.hWnd, EM_GETLINECOUNT, 0, 0)

Laufzeitfehler 438
Objekt unsterstützt diese Eigenschaft oder Methode nicht.


Oder gibt es vielleicht eine andere Lösung?

Vielen Dank
gruß Christoph

daolix

Hallo

mit diesem Code kommst du nicht weiter da die Accesscontrols kein Handle liefern welches du dann in der SendMessagefunktion verwenden kanst.

probiers mal so ( ungetestet ):

Function LineCount() As Long
   dim s as string
   dim sf() as string
   s = me.DeineTextbox
   sf() = split(s, vbcrlf)
   LineCount= ubound(sf()) + 1
End Function

DF6GL

Hallo,

(noch 'ne) andere Lösung:


Public Function fctRowCount ( strString as String) as Long
fctRowCount =  Len(strString) - Len(Replace(strString, vbCrLf, " "))
End Function



Evtl.  noch 1 addieren, wenn nicht auch die letzte Zeile mit einem Zeilenumbruch abgeschlossen wird..

cyberchris

Hi,

danke für dein Hinweis und das Beispiel.

Habs ausprobiert. Geht - bedingt.

Ich bekomme nur die Zeilen raus, die im Text schon als Umruch sind. Jedoch nicht, wenn z.b. ein längerer Text von der Textbox umgebrochen werden, da das feld nicht so breit ist.

Gruß Christoph

PS: Antwort betrifft den Eintrag von daolix. Die andere Variante teste ich auch gleich mal.

DF6GL

Hallol,

virtuelle Zeilenumbrüche festzustellen, dürfte schwierig werden. Da reden der benutzte Font und die Windows-Einstellungen bzgl. Auflösung und Zoomfaktor ein Wörtchen mit....


Was ist der Sinn, der dahinter steckt?

cyberchris

Da die Datenbank nicht mehr als Vollbild läuft, sondern nur auf einer Hälfte des Bildschirms  (27" Monitor) habe ich Probleme mit den MsgBoxen. Diese werden weiterhin Mittig auf dem Bildschirm angezeigt. Komme dann mit anderen Tools in Konflikt.

Deshalb habe ich eine Form-MesgBox gebastelt (Popup). Und alle Meldungen möchte ich darüber ausgeben. Problem ist nur nur, dass die Inhalte extrem abweichen können.

Ich möchte kein riesiges Form für kurze Meldungen. Weiterhin brauche ich aber auch manchmal etwas größer.

Mit Me.Insideheight =... kann ich die Höhe des Detailbereichs festlegen. z.B. zeilenzahl * x

Gruß Christoph