| - Ottenere il numero di linee di una casella 
	di testo - | |||
| COSA SERVE PER QUESTO TUTORIAL | |||
| Download | Chiedi sul FORUM | Glossario | Microsoft Visual Basic 6 - Conoscenze basiche di VB | ||
| Introduzione alle chiamate API in VB6: SendMessage e EM_GETLINECOUNT | |||
| OTTENERE IL NUMERO DI LINEE DI UNA CASELLA DI TESTO TRAMITE LE API La funzione SendMessage di user32.dll e il messaggio EM_GETLINECOUNT In questo documento verrà illustrato come in Visual Basic attraverso le API (=Application Programming Interface) di Windows, cioè l'insieme delle costanti (dichiarazioni di valori costanti), i tipi (o strutture in C), le dichiarazioni di funzioni presenti nei principali DLL di Windows (come user32.dll, advapi32.dll, gdi32.dll ecc.), si possa ottenere o impostare un'informazione (ad esempio il testo di una casella di testo, il suo colore e il suo carattere) di un controllo (un pulsante, una barra degli strumenti, una casella di testo...) o di un form (una finestra). Si supponga di avere una casella di testo della quale si deve sapere il numero di righe. Per prima cosa è necessario creare con VB un EXE standard e inserire una TextBox con le seguenti proprietà: 
 Questa è la casella di testo della quale si cercherà di
        scoprire il numero di righe (anche se già è noto che sono cinque). 
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 
Ecco in dettaglio il significato di questa riga: 
 La funzione appena dichiarata servirà per inviare a un controllo o a un form la richiesta di restituire o impostare l'informazione che ci interessa (in questo caso il numero di righe). La funzione in questione prende come secondo parametro un valore numerico indicante il messaggio da inviare. La costante numerica che identifica il messaggio per ottenere il numero di linee è EM_GETLINECOUNT (valore esadecimale 0xBA ovvero 186). Public Const EM_GETLINECOUNT = &HBA Le possibili operazioni sono migliaia e
        ognuna ha un suo valore. Il nome, che è comunque possibile cambiare a
        piacimento, e i valori di queste costanti si possono
        trovare nel file winuser.h o su MSDN ma lo
        strumento più semplice da usare è certamente l'API
        Viewer che si trova nella cartella degli
        strumenti di Visual Studio. Una volta avviato, dal menu File
        selezionare Carica file di testo e poi
        win32api.txt. Per convertire un numero dal formato esadecimale a
        decimale la calcolatrice di Windows in modalità scientifica è più che 
		sufficiente: selezionare Hex
        incollare il numero da trasformare e poi tornate su Dec 
Private Sub Agisci_Click()
    NumRighe.Text = SendMessage(Prova.hwnd, EM_GETLINECOUNT, 0, 0)
End Sub
In queste righe impostiamo il testo della caselle NumRighe sul valore 
		restituito dalla chiamata a SendMessage (funzione in user32.dll 
		precedentemente dichiarata nel modulo). A SendMessage viene passato come 
		primo parametro l'handle (ovvero un numero Long che fa identificatore 
		univoco) della casella di testo su cui vogliamo agire (ma potrebbe 
		trattarsi di un qualsiasi altro controllo, finestra o anche del desktop 
		stesso); in Visual Basic per ottenere l'handle di un controllo si 
		utilizza la proprietà hWnd; come secondo parametro abbiamo invece 
		passato la costante EM_GETLINECOUNT dichiarata nel modulo 
		precedentemente, così da comunicare alla funzione che ciò che ci 
		interessa ottenere (e che verrà quindi restituito da SendMessage) 
		è il numero di linee della casella di testo in questione; i due 
		parametri rimanenti sono entrambi impostati a zero perché per 
		EM_GETLINECOUNT non sono necessari ulteriori dettagli (al contrario 
		di quello che vedremo tra poco per altri messaggi). | |||
| << INDIETRO | by VeNoM00 | ||