Newsgroup: it.comp.lang.visual-basic
Titolo: API che non volano...

Prima di tutto devo ringraziare tutti coloro che pazientemente mi
aiutano!
spero soltanto che con le mie domande e soprattutto le vostre risposte
servino alla crescita professionale di tutti.
Tornando alle "API"
ho un programmino o meglio l'inizio di un programmino molto piu' grande
pero' ho trovato "a parer mio" una limitazione sulle api di windows...
nel senso che ho usato due dichiarazioni per leggere il colore dei pixel
che scorrono sotto il mouse e fino a qui tutto ok!
pero il mio prg, dovrebbe leggere i colori presenti in una picturebox e
anche qui tutto ok! invece di usare la chiamata alle api per la X e Y
del mouse ho usato la propieta' dell'evento mouse move della picturebox
e fino a qui tutto ok! purtroppo e' qui che non capisco come mai
funziona soltanto quando il form in esecuzione viene posizionato il piu'
possibile in alto a sx del monitor!!!
cmq, qui di seguito ho allegato il codice per una migliore comprensione!
Dim sTmp As String
Dim tPOS As POINTAPI
Dim lColor As Long
Dim lDC As Long
'Private Type POINTAPI
'    X As Long
'    Y As Long
'End Type
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal
X As Long, ByVal Y As Long) As Long
'Private Declare Function GetCursorPos Lib "user32" (lpPoint As
POINTAPI) As Long
'dichiarazione che ho omesso in quanto recupero la stessa cosa
nell'evento mousemove della picturebox!
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long)
As Long
Private Sub Form_Load()
End Sub
Private Sub Picture1_Click()
DrawLine 'chaimata ad altra funzione!!!
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
miaX = X
miaY = Y
    lDC = GetWindowDC(0)
    Call GetCursorPos(tPOS)
    lColor = GetPixel(lDC, miaX, miaY)
    Label10.BackColor = lColor
 
    sTmp = Right$("000000" & Hex(lColor), 6)
    Form1.Caption = "Color: H" & sTmp & "   Dec:" & Val("&H" & sTmp)
    Label1.Caption = "X:" & miaX & " - " & "Y:" & miaY  
End Sub

scusate il sorgente giusto e' il seguente:
Option Explicit
Dim miaX As Single
Dim miaY As Single
Dim sTmp As String
Dim lColor As Long
Dim lDC As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal
X As Long, ByVal Y As Long) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long)
As Long
Private Sub Command1_Click() ' redraw picturebox
Picture1.BackColor = vbBlue
Picture1.BackColor = vbBlack
Label2.Caption = ""
Label3.Caption = ""
Label4.Caption = ""
Label5.Caption = ""
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
miaX = X
miaY = Y
    lDC = GetWindowDC(0)


Il tuo problema č che prendi il dispositivo di contesto sbagliato:
GetWindowDC(0)
Prova a sostituire
    lDC = GetWindowDC(0)
con
    lDC = Picture.hDC

Ciao Antonio,
l'errore sta nel fatto che le coordinate a cui tu fai
riferimento sono dell'oggetto picture e, di default, gestite
in twips... prova a mettere questo pezzetto nel tuo codice:
Private Sub Form_Load()
    Picture1.ScaleMode = vbPixels
End Sub
Ciao Ciao

------------------------------------------
Posted via web GlobalNews
www.globalnews.it
------------------------------------------

 Il tuo problema è che prendi il dispositivo di contesto sbagliato:


Il tuo problema č che prendi il dispositivo di contesto sbagliato:


 siiiiiiii!!!! funziona!!!!!!!!
In effetti
 GetWindowDC(0)
è il DC dello schermo.
Ecco spiegato il mistero :)
Ciao

 Ciao
ciao
Antonio.

 vogliono dire???
No, fammi capire...
Tu usi le funzioni API senza sapere cos'è una funzione?
1) Lo "0" non è _dopo_, ma _dentro_ le parentesi: è un parametro di
GetWindowDC().
2) Per sapere cos'è GetWindowDC() basta premere F1.
Ciao


E bravo a Dario
Ciao Roberto - Syd

 Tu usi le funzioni API senza sapere cos'è una funzione?
in parte si.... nel senso che so usare una funzione ma con questo non
vuol dire che so tutto!!!
altrimenti non farei le domande in NG!!!!
Antonio.



Due errori in una sola frase :P
Sapere "tutto" e' impossibile, nessuno di quelli che posta qui sa "tutto",
chi pensa di saperlo in genere non sa niente, e proprio per questo anche chi
risponde a volte puo' domandare.
Comunque, tu sai usare una funzione nel modo in cui chi prepara le ricette
seguendo un libro di cucina sa cucinare...
E il rischio in questi casi e' cadere nell'equivalenza: se per un piatto per
quattro persone devo far cuocere dieci minuti a duecento gradi, per un
piatto per otto persone devo far cuoceve venti minuti a quattrocento
gradi...
Nel tuo caso, nella ricetta c'era scritto di usare un etto di zucchero
quando a te serviva un cucchiaino di sale, ma le tue conoscenze non erano
tali da consentirti di capirlo, e il risultato era una torta al pomodoro
anziche' una pizza :)
Ti consiglierei di studiare almeno le basi della programmazione (istruzioni,
funzioni, variabili, strutture...) altrimenti rischi di fare altre torte al
pomodoro :)
Studiate quelle puoi passare a leggerti la documentazione dell'API di
windows, che ti spieghera' piu' o meno bene gran parte di quello che c'e' da
sapere per capire
1) cosa sia un Device Context (DC)
2) cosa sia un handle, e nello specifico un HDC
3) parecchie altre cose che hai messo per cookbook programming :)
Dato che ad occhio (riguardandomi alcune linee del tuo programma) sei
abbastanza agli inizi, ti sconsiglierei VB come linguaggio di approccio...
Hai buone scelte in C (che e' piu' o meno meditare per un'ora sotto una
cascata proveniente da un ghiacciaio per temprare corpo e spirito), Pascal
(che e' piu' o meno come un corso di karate, nel senso che fai quello che ti
dice l'istruttore altrimenti sono cacchi tua) e in java (che e' un vero
linguaggio OO e per strano che possa sembrare e' molto piu' simile a VB che
a C/C++)...
Ciaotutti,
*

Ok ottima spiegazione! pero' devo aggiungere che purtroppo non conosco
nessuno che mi spiega qualcosa e/o fa verifiche... 
fortunatamente in questo NG trovo molte persone che mi aiutano!
semplicemente mandamomi la soluzione e altre volte facendomi notare la
mia scarsa e lacunosa conoscenza nei linguaggi di programmazione.
cosa devo dire! se mi fai una domanda del tipo:
definizione di label e textbox!!! 
oddio! ti posso dire con molta umilta' e semplicita' che la label puo'
solo restituire una "stringa" e la textbox puo' anche accettare una
"stringa"
per domande del tipo:
cos'e' un handle, e nello specifico un HDC???
ti rispondo boh!!!!
con questo non dico che non lo voglio capire e/o studiare...
semplicemente:
Se voglio realizzare un'applicazione che fa una chiamata alle API di
windows e (per semplificare)
mi ritrovo in mezzo questo "HDC"
be saro' tonto e tardo ma ci metto un po' di tempo....
diciamo che adesso che mi/hai/avete fatto notare l'importanza del "HDC"
sicuramente vedro' di aggiornarmi!!!
per concludere.....
cosa posso dire se la "persona" piu' informatica che conosco si vanta di
avere tutte le twin lite (non so se e' corretto il nome...) e se poi gli
domandi un programma di risponde:
acc... mi manca propio quel cd... [stendiamo un velo pietoso....]
scusate lo sfogo.....
spero di aver concluso....
Antonio.



Se ho capito di cosa parli si chiamano twilight, sono CD di programmi
piratati che non sono parte del bagaglio del buon informatico e, volendo,
nemmeno di quello del buon hacker.
Al limite fanno parte del bagaglio del piccolo cracker o dell'adolescente
"wannabe"...
Nell'MSDN inclusa in visual studio dovrebbe esserci un corso di VB o
quantomeno di VBscript che parte proprio dalle basi ed e' stato giudicato
ben scritto proprio qui sul NG tempo fa...
Dacci un'occhiata, magari ti torna utile...
Ciaotutti,
*

 
Figurarsi se non sbagliavo pure nelle risposte.....
cmq, ti ringrazio e apprezzo le tue risposte anche se a volte sono un
po' criptiche!
saluti
Antonio.


Ecco, ti consiglio l'hacker jargon file, cerca jargon file o jargon.htm su
qualunque motore di ricerca :)
E' una bella lettura :)
Ciaotutti,
*

 E' una bella lettura :)
Ecco un modo per deviare le menti giovani :PPP
Ciao

 Antonio.
No, intendiamoci. Io dò molta importanza alle parole usate.
Quando dico "Tu usi le funzioni API senza sapere cos'è una funzione?"
intendo proprio: "sai cos'è e a cosa serve una funzione?", altrimenti ti
avrei chiesto "sai a cosa serve _quella_ funzione?".
In questo caso basta guardare MSDN.
Nel primo caso sarebbe un po' più grave, perchè significherebbe probrammare
senza sapere minimamente cosa sia la programmazione.
Ovviamente nessuno sa tutto, l'importante è acquisire conoscienze in ordine
di importanza.
Ciao


ai... ai.... vada per il "deviare" ma "le menti giovani" propio no!!!!
purtroppo ho qualche anno di troppo!
Antonio.

 Ciao
ciao
Antonio.

 in questo caso) sono preso da un progetto mooolto interessante???????
Purtroppo la documentazione sulla "programmazione" a prescindere dal
linguaggio (1^ cosa da imparare) è piuttosto difficile da trovare :(
Cioè: è inutile conoscere l'help di VB a memoria se poi non si conoscono
tecniche di base come trovare il valore minimo in un array o scambiare il
valore tra due variabili.
Non so se mi sono spiegato.
Ciao


perfettamente!!!
Antonio.