- 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 |