Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
La funzione SendMessage: Tutorial completo
Innanzitutto bisogna sapere che i messaggi vengono lanciati dal sistema operativo ai controlli della nostra applicazione, informandoli di quali azioni compiere. Parallelamente i messaggi possono essere anche trasmessi dai controlli al sistema operativo, con un'operazione inversa, oppure da un controllo verso uno o più altri controlli. Per fare tutto questo basterà quindi usare la funzione SendMessage presente nella libreria "user32.dll". Vediamo più nel dettaglio tale funzione. Innanzitutto la funzione deve essere dichiarata. Si può limitare il suo scopo alla form che si sta utilizzando, ed in questo caso si dichiarerà come Private oppure estenderne lo scopo fino a farlo diventare generale, ed in questo caso la dichiarazione non sarà più inserita nella form bensì all'interno di un modulo e diventerà Public. Ecco i due casi in pratica:

'come dichiarazione preliminare della form in uso
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any ) As Long
Option Explicit


'come dichiarazione preliminare inserita in un modulo .bas
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
Option Explicit



Tutto quello che c'è da sapere per inviare un messaggio ad un controllo è la proprietà hWnd del controllo stesso ed il tipo di comando che si vuole mandare. Cominciamo a vedere i comandi basilari che permettono di mandare messaggi ad una TextBox o ad una RichTextBox del tipo Copia, Taglia, Incolla, Cancella ed Annulla (il cosiddetto Undo):

'taglia il testo selezionato e lo copia nella Clipboard
Const WM_CUT = &H300
'copia il testo selezionato nella Clipboard
ConstConst WM_COPY = &H301
'incolla il testo nella TextBox o nella RichTextBox prendendolo direttamente dalla Clipboard
ConstConst WM_PASTE = &H302
'cancella il testo selezionato
ConstConst WM_CLEAR = &H303
'annulla l'ultima operazione compiuta sul testo
ConstConst WM_UNDO = &H304

Per richiamare la funzione SendMessage sarà sufficiente aggiungere questa linea di codice:

SendMessage(**NomeDellaTextbox**.hWnd, **Costante**, 0, 0& )

dove naturalmente **NomeDellaTextBox** è il nome che avete assegnato alla TextBox o alla RichTextBox e **Costante** è la costante che identifica l'operazione che volete compiere, ossia una tra: WM_CUT, WM_COPY, WM_PASTE, WM_CLEAR, WM_UNDO.
Facciamo un esempio. Se vogliamo che alla pressione del tasto cmdTaglia il testo selezionato all'interno di Text1 venga tagliato dal controllo TextBox ed incollato nella Clipboard, dovremo agire in questo modo:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any ) As Long
Const WM_CUT = &H300
Option Explicit

Private Sub cmdTaglia_Click()
SendMessage Text1.hwnd, WM_CUT, True, 0&
End Sub


Come si può ben vedere la funzione è molto semplice. Questo però non significa che non abbia sufficienti potenzialità. Ecco infatti la lista di alcuni comandi che possono essere inviati ad un controllo specifico:

EM_CANUNDO ritorna True se le operazioni svolte sul testo possono essere annullate tramite il messaggio WM_UNDO
EM_CHARFROMPOS ritorna l'indice del carattere e della linea più prossimi ad un punto specificato
EM_EMPTYUNDOBUFFER svuota il buffer annulla e ritorna il messaggio WM_CANUNDO a False. Ossia inibisce la possibilità di effettuare l'annullamento delle operazioni appena effettuate sul testo
EM_FMTLINES aggiunge o rimuove il carattere che indica un testo andato a capo in un controllo TextBox con proprietà Multiline o in una RichTextBox
EM_GETFIRSTVISIBLELINE ritorna l'indice (in base 0) del primo carattere visibile in un controllo con proprietà Multiline settata su False oppure l'indice (sempre in base 0) della linea di testo superiore all'interno di un controllo con proprietà Multiline = True
EM_GETHANDLE ritorna il valore univoco legato al buffer contenente il controllo di testo la cui proprietà Multiline sia True
EM_GETLIMITTEXT ritorna il limite del testo in caratteri
EM_GETLINE=&HC4 ritorna il numero di caratteri in un controllo Multiline o il numero di caratteri di una riga specifica in un controllo non Multiline
EM_GETLINECOUNT ritorna il numero di righe
EM_GETMARGINS ritorna la lunghezza del margine sinistro e destro
EM_GETMODIFY indica se il contenuto del controllo è stato modificato o meno
EM_GETPASSWORDCHAR ritorna il carattere equivalente a quello ritornato se si utilizza la costante ES_PASSWORD
EM_GETRECT ritorna le coordinate di un rettangolo nel controllo
EM_GETSEL ritorna la posizione del primo e dell'ultimo carattere del testo selezionato
EM_GETTHUMB ritorna la posizione della scrollbox
EM_LINEFROMCHAR ritorna l'indice della riga che contiene l'indice di un determinato carattere
EM_LINEINDEX ritorna il carattere di una linea
EM_LINELENGTH ritorna la lunghezza in caratteri di una linea specifica
EM_LINESCROLL scorre il testo orizzontalmente se il controllo è singol-line o verticalmente se è Multiline
EM_POSFROMCHAR ritorna le coordinate di uno specifico carattere
EM_REPLACESEL sostituisce il testo selezionato con quello contenuto nella Clipboard
EM_SCROLL scorre il testo di un carattere orizzontalmente se il controllo è single-line o verticalmente se è Multiline
EM_SETLIMITTEXT imposta la lunghezza massima che può avere un testo
EM_SETMARGINS impostai margini detro e sinistro di un testo
EM_SETMODIFY indica se un controllo di tipo testuale è stato modificato o meno
EM_SETPASSWORDCHAR definisce i caratteri da usare in associazione con quelli di ES_PASSWORD
EM_SETREADONLY imposta o annulla lo stile read only
EM_SETRECT imposta o annulla lo stile read only

Archivio:
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it