Newsgroup: it.comp.lang.visual-basic
Titolo: [!] x il gioco di Cesare

Scusa, ma ho visto solo oggi la tua richiesta d'aiuto.
Dunque, iniziamo dall'inizio (e con un'inutile ripetizione...)
Detto terra-terra (non me ne vogliate)
Le API sono delle funzioni contenute nelle dll di windows, scritte per lo
più in C ed a disposizione di chiunque le sappia usare.
VB riesce a sfruttare le API, scritte da altri, in modo da farle sue, anche
se nel suo "vocabolario" non sono contemplate.
Queste funzioni essendo le stesse su cui si basa Windows ti permettono dal
tuo VB di fare pressochè tutto quello che vedi che le altre applicazioni
fanno.
Considerazione 2: sotto Win qualsiasi cosa è considerata una finsetra, anche
i bottoni o le caselle di testo.
Tutto quanto è rettangolare è una finestra. (prova a cercare qualcosa che
non sia rettangolare in win e poi tira le conclusioni).
Win identifica le "finestre" tramite la loro proprietà hWnd.
Tutti i controlli ce l'anno, tranne le label, le shapes, e le images, che
non sono veri e propri controlli, ma solo dei metodi grafici quali possono
essere i comandi Line o Circle.
Adesso, TUTTE le API che lavorano sulle finestre hanno bisogno di sapere su
quale finestra lavorare, e qui entra in gioco l'hWnd.
Ad esempio, usuamo l'API WindowFromPoint()
Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint"
(ByVal xPoint As Long, ByVal yPoint As Long) As Long
Questa è la dichiarazione che deve comparire in un modulo per far si che VB
sappia che deve essere pronto ad usare la funzione WindowFromPoint (Alias)
definita nella dll user32 (Lib) e usarla con il nome WindowFromPoint
(Function).
Questa funzione ti restituische l'hWnd della finestra su cui cade il punto
di coordinate (xPoint; yPoint).
Rintracciare il controllo che ha queto hWnd è piuttosto semplice.
L'altra API che ti ho suggerito è
Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal x As Long,
ByVal y As Long) As Long
RECT è una struttura definita nel file Win32Api.txt insieme alle
dichiarazioni di tutte le API documentate.
Ti dice se il punto (x; y) cade all'interno del rettangolo RECT.
Pur restituendo un long in realtà restituisce 0 per false e <>0 per true
(come VB)
la sintassi per l'utilizzo delle API è ne più ne meno di una funzione
standard VB, es:
PuntoNelRettangolo = PtInRect(lpRect, x, y)
Spero di essere stato abbastanza chiaro, l'argomento è un "tantino" vasto e
la pratica vale più di tante parole.
Prova ad impratichirti ad es con le API GetCursor e/o con tutte quelle che
iniziano per Get, alcune sono molto intuibili.
Ciao.

(come VB)
Questo perche' in C (linguaggio con cui sono scritte le funzioni API di
sistema) non esiste il tipo Boolean, e viene utilizzato il Long.
Scusa Zanna, ma non sono riuscito a resistere... :-(
--
Roal Zanazzi
z...@iol.it

Ed ecco il grande Roal che ci ha illuminato di saggezza! ;o))

E ho una strana voglia di fare correzioni!!!!!!
[... snip...]
Avevo precisato che avrei parlato "facile"...
Ritengo comunque (anche se corretto) un caso anomalo l'utilizzo delle
regioni (quelli della M$ hanno voluto prenderci in giro. Ah, si? Che caso!).
Ciao.


Non lo vedo come un caso anomalo, semmai come una feature aggiuntiva (anche
se poco sfruttata dai programmatori) del motore grafico di Windows.
--
Roal Zanazzi
z...@iol.it