Čtení po řádcích v TextBox   zodpovězená otázka

VB6/VBA

1.

Chtěl bych po řádcích načítat text v TextBox tento následně progarmově zpracovat a výsledek uložit (po řádcích) v jiném TextBoxu. Poradí mi někdo kod pro načítání po řádcích?

2.

K tlačítku CommandButton mám přiřazen kod:

MsgBox "Počet řádků v prvku Text1: " & SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0, 0)

Po stisknutí tlačítka chybová hláška:

Sub or Function not defined.

Jaká je správná deklarace pro výše uvedený kod:

Jak se spouští funkce API Send Message se zprávou EM_GETLINECOUNT

ve VB5 ?

Děkuji za radu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const EM_GETLINECOUNT = &HBA

co tak použít nějaký ApiViewer

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Kompletní kód

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const EM_LINEINDEX = &HBB
Public Const EM_GETLINECOUNT = &HBA
Public Const EM_GETLINE = &HC4
Public Const EM_LINELENGTH = &HC1

Public Sub CtiText(ByRef TextBox As Object)
    Dim I As Integer, xPocet as Integer, xTabul() as String
    xPocet = SendMessage(TextBox.hwnd, EM_GETLINECOUNT, 0, 0)
    ReDim xTabul(xPocet)
    For I = 1 To SendMessage(TextBox.hwnd, EM_GETLINECOUNT, 0, 0)
        SendMessage TextBox.hwnd, EM_LINEINDEX, I - 1, 0
        xTabul(I) = CtiTextGetline(I - 1, TextBox.hwnd)
    Next I
End Sub

Private Function CtiTextGetline(ByVal iLine As Long, ByVal lHwnd As Long) As String
    Dim bLine() As Byte, lngLen As Long
    lngLen = SendMessage(lHwnd, EM_LINELENGTH, SendMessage(lHwnd, _
             EM_LINEINDEX, iLine, 0), 0)
    ReDim bLine(lngLen + 1)
    bLine(0) = lngLen And 255
    bLine(1) = lngLen \ 256
    SendMessage lHwnd, EM_GETLINE, iLine, bLine(0)
    CtiTextGetline = Left(StrConv(bLine, vbUnicode), lngLen)
End Function

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jsem začátečník.

Mohl byste mi prosím poradit jak přiřadit kód ovládacím prvkům ?

Chtěl bych na stiknutí tlačítka načíst řádek v prvním TextBox, vlastním kódem jej zpracovat a výsledek ulužit do druhého TextBox. A to na jedno stisknutí pro všechny řádky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Upravený kód

Do modulu vložte deklaraci a obě upravené procedury

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const EM_LINEINDEX = &HBB
Public Const EM_GETLINECOUNT = &HBA
Public Const EM_GETLINE = &HC4
Public Const EM_LINELENGTH = &HC1

Public I As Integer, xPocet as Integer, xTabul() as String

Public Sub CtiText(ByRef TextBox As Object)
    xPocet = SendMessage(TextBox.hwnd, EM_GETLINECOUNT, 0, 0)
    ReDim xTabul(xPocet)
    For I = 1 To SendMessage(TextBox.hwnd, EM_GETLINECOUNT, 0, 0)
        SendMessage TextBox.hwnd, EM_LINEINDEX, I - 1, 0
        xTabul(I) = CtiTextGetline(I - 1, TextBox.hwnd)
    Next I
End Sub

Private Function CtiTextGetline(ByVal iLine As Long, ByVal lHwnd As Long) As String
    Dim bLine() As Byte, lngLen As Long
    lngLen = SendMessage(lHwnd, EM_LINELENGTH, SendMessage(lHwnd, _
             EM_LINEINDEX, iLine, 0), 0)
    ReDim bLine(lngLen + 1)
    bLine(0) = lngLen And 255
    bLine(1) = lngLen \ 256
    SendMessage lHwnd, EM_GETLINE, iLine, bLine(0)
    CtiTextGetline = Left(StrConv(bLine, vbUnicode), lngLen)
End Function

Do výkonného formuláře se jménem Form1, který např. obsahuje TextBox1 a CommandButton1

Private Sub CommandButton1_Click()
    CtiText TextBox1
    'naplní proměnnou xPocet - počet řádků tabulky xTabul,
    'která obsahuje jednotlivé řádky TextBox1
    For I = 1 To xPocet
        'práce s jednotlivými xTabul(I)
    Next I

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Děkuji za köd.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback