Newsgroup: it.comp.lang.visual-basic
Titolo: Ragazzi non so piu' dove sbattere la testa !!! Chi mi aiuta ???VI PREGOOOOOOOOOOOOOOOO

Allora cercherò di essere chiaro, con questo script :
Const HTCAPTION = 2
Const WM_NCLBUTTONDOWN = &HA1
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wmsg As Long, ByVal wparam As Long, _
      lparam As Long) As Long
      Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, Y
As Single)
Dim ReturnVal As Long
If Button = 1 Then
   x = ReleaseCapture()
   ReturnVal = SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
End If
End Sub
riesco a spostare il form e di conseguenza l'intera finestra facendo click
in un punto qualsiasi della finestra, ma io ho la nescessita di avere dentro
la finestra un controllo Shockwave Flash, e dunque devo spostare la finestra
cliccando in un punto qualsiasi del filmato flash ... ho pensato di cambiare
lo script in questo modo:
Const HTCAPTION = 2
Const WM_NCLBUTTONDOWN = &HA1
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wmsg As Long, ByVal wparam As Long, _
      lparam As Long) As Long
      Sub ShockwaveFlash_MouseDown(Button As Integer, Shift As Integer, x As
Single, Y As Single) <----Parte modificata|
Dim ReturnVal As Long
If Button = 1 Then
   x = ReleaseCapture()
   ReturnVal = SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
End If
End Sub
ma non succede nulla.
Insomma come faccio a spostare una finestra in cui dentro è presente un
controllo flash facendo click sul controllo flash ?????

 ha scritto nel messaggio
news:9sg591$hvv$1...@nreadb.inwind.it...


 ha scritto nel messaggio
news:9sgd8r$rnh$1...@nreada.inwind.it...


* Manifesto del Ng: 
http://www.it-lang-vb.net/docs/Manifesto.txt

 > nell'evento:


 ha scritto nel messaggio
news:3bebe279$1...@news.cis.it...


Insomma se ho capito bene ... il tutto dovrebbe apparire cosě:
Const HTCAPTION = 2
Const WM_NCLBUTTONDOWN = &HA1
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wmsg As Long, ByVal wparam As Long, _
      lparam As Long) As Long
      Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, Y
As Single)
Dim ReturnVal As Long
If Button = 1 Then
   x = ReleaseCapture()
   ReturnVal = SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
End If
End Sub
Private Sub ShockwaveFlash_MouseDown(Button As Integer, Shift As Integer, x
As Single, Y As Single)
    Form_MouseDown Button, Shift, x, Y
End Sub
Giusto ??? Perchč non funziona ? Dove sbaglio ancora ?

 Giusto ??? Perchč non funziona ? Dove sbaglio ancora ?
Ripeto ancora: esiste l'evento MouseDown per l'oggetto Flash?
Funziona nella stessa scala del form? (pixel/twips...)
Ma soprattutto... il codice ora che lo guardo bene mi sembra incompleto,
senza contare che dovrebbe andare nel MouseMove (fai la ReleaseCapture, ma
la GetCapture non la fai mai?).
Ciao

 > Giusto ??? Perchè non funziona ? Dove sbaglio ancora ?


 controllo flash ???
Allora: sarebbe ora che tu leggessi il manifesto del NG e usassi subject
migliori :)
Iniziamo dal principio.
Il codice che usi è corretto:
Private Sub Form_MouseDown(...)
    If Button = vbLeftButton Then
        Call ReleaseCapture
        Call SendMessage(Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
    End If
End Sub
L'oggetto flash da quanto vedo NON ha eventi legati al mouse.
Purtroppo non ha nemmeno l'hWnd, quindi si elimina anche la possibilità di
subclassing :(
Mi spiace, l'unica cosa che puoi fare è lasciare un bordo intorno
all'oggetto Flash :(
(A meno che non si possa "trasferire" l'immagine Flash direttamente sul Form
in qualche modo, ma non credo)
Ciao.

subclassing :(
Una soluzione sporca ci sarebbe: mettere il controllo flash dentro un frame,
da solo.
A questo punto, trovare l' handle e' una banalita':
Private Const GW_CHILD = 5
Private Declare Function GetWindow Lib "user32" ( _
                               ByVal hwnd As Long, ByVal wCmd As Long _
                                ) As Long
hWndFlash = GetWindow(Frame1.hwnd, GW_CHILD)
-- 
hth, hal

 ha scritto nel messaggio
news:jzRG7.51033$sq5.2...@news.infostrada.it...


 A questo punto, trovare l' handle e' una banalita':
Ma funziona?
Se Flash non espone l'hWnd non è più probabile che sia un controllo
"windowless" e che quindi non possa essere "rintracciato"?
Ciao

"windowless" e che quindi non possa essere "rintracciato"?
Prova e vedrai ;-)
-- 
ciao, hal

>"windowless" e che quindi non possa essere "rintracciato"?
(Ho cliccato su "Post" troppo presto per sbaglio)
Flash _non puo'_ essere un controllo windowless: se ci pensi un attimo
te ne puoi rendere conto.
La soluzione "giusta" sarebbe stata quella di chiamare FindWindow passando
la classe di finestra, ma quei bastardi sembra che generino un nome casuale
nel formato "ATL:xxxxxxxx", dove x e' un numero.
-- 
ciao, hal

 ha scritto nel messaggio
news:9bXG7.29708$zl4.8...@news2.tin.it...


era filato :P
Molti (fra cui il sottoscritto) filtrano parole come aiuto, help, urgente, ecc.
Io mi sono inserito perche' ti ha risposto Zanna (che non filtro mai perche'
mi insegna un sacco di cose ;-)
-- 
ciao, hal

 nel formato "ATL:xxxxxxxx", dove x e' un numero.
E poi sono io a insegnarti un sacco di cose... ma se ne sai molte più di me
(il che, essendo quasi impossibile... :PPPP)
La verità che che non mi hai filtrato perchè ho cambiato il subject :)
Ciao

 ha scritto nel messaggio
news:9shlud$13deu8$1...@ID-56381.news.dfncis.de...


 A questo punto mi serve l'ultimo aiutino [...]
;-|

dove devo inserire l'ultima parte di codice che mi hai passato ???
Ah, quello e' solo l' inizio :-(
Mi ero agganciato al suggerimento di Zanna circa il subclassing del controllo.
Per farlo ti serve l' handle della sua finestra e questo e' un modo per ottenerlo.
Ora ti rimane il resto del lavoro: scrivere una window procedure che intercetti 
i messaggi di mouse per consentire all' utente di spostare il controllo a suo 
piacimento.
Sotto la firma segue il codice di esempio.
-- 
hth, hal
----------------------------- inizio codice ----------------------
Avvertenza per i deboli di cuore:
Non interrompere il codice nell' ide di vb e non terminare il processo
con End. Uomo avvisato ...
Ingredienti:
1. un form;
2. una picturebox;
3. uno shockwaveflash _dentro_ la picturebox;
Codice da copiare nel form:
''''''''' begin block ''''''''''''''''
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
                            ByVal hWnd As Long, ByVal wMsg As Long, _
                            ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "user32" ()
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
Private Const GW_CHILD = 5
Private m_hwndFlash As Long
Private Declare Function GetWindow Lib "user32" ( _
                                ByVal hWnd As Long, ByVal wCmd As Long _
                                 ) As Long
Private Sub Form_Load()
    m_hwndFlash = GetWindow(fraTrick.hWnd, GW_CHILD)
    Hook m_hwndFlash
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Unhook m_hwndFlash
End Sub
Public Sub MoveFrame()
    ReleaseCapture
    Call SendMessage(fraTrick.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, ByVal 0&)
End Sub
''''''' end block ''''''''
Codice da copiare in un modulo .bas:
'''''''''' begin block '''''''''
Option Explicit
Private Declare Function CallWindowProc Lib "user32" Alias _
  "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
  ByVal hWnd As Long, ByVal Msg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  (ByVal hWnd As Long, ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long
Private Const WM_ACTIVATEAPP = &H1C
Private Const GWL_WNDPROC = -4
Private Const WM_LBUTTONDOWN = &H201
Private m_lpPrevWndProc As Long
Private m_hWndHooked As Long
Public Sub Hook(ByVal a_hWnd As Long)
   m_lpPrevWndProc = SetWindowLong(a_hWnd, GWL_WNDPROC, AddressOf WindowProc)
   If (m_lpPrevWndProc) Then m_hWndHooked = a_hWnd
End Sub
Public Sub Unhook(ByVal a_hWnd As Long)
    If (m_hWndHooked <> a_hWnd) Then Exit Sub
    If (m_lpPrevWndProc <> 0) And (m_hWndHooked <> 0) Then
        Call SetWindowLong(m_hWndHooked, GWL_WNDPROC, m_lpPrevWndProc)
        m_lpPrevWndProc = 0
        m_hWndHooked = 0
    End If
End Sub
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, _
            ByVal wParam As Long, ByVal lParam As Long) As Long
 
    If (hw = m_hWndHooked) Then
        If uMsg = WM_LBUTTONDOWN Then
            Form1.MoveFrame
        End If
 
   End If
 
   'Pass message on to the original window message handler
   WindowProc = CallWindowProc(m_lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function
'''''''''' end block ''''''''''
Have fun !

;-|
Cerchiamo di essere ottimisti :-)
Speriamo, piuttosto, che comincino a rendersene conto anche gli altri
che hanno questo vizio (preso dai testi di marketing for dummies?)
-- 
ciao, hal.advertising

Ciao sono sempre brivido, da casa di un amico.................
grazie infinite per il magnifico codice, MA ;) quando compilo o avvio
nell'ide mi da questo errore nel seguente blocco:
Private Sub Form_Load()
    m_hwndFlash = GetWindow(fraTrick.hWnd, GW_CHILD)
    Hook m_hwndFlash
End Sub
Dove "fraTrick.hWnd" mi dice che non e` una variabile
definita................. xke`?
Granzie infinitissimevolissimevolmente..............

definita.................
Gia', ho dimenticato di specificarlo, e' il nome della picture box ;-)
-- 
ciao, hal
p.s. odio le "k" perche' rendono piu' difficile la lettura.

Hal  sei stato veramente gentile...ti ringrazio tantissimo ... stavo
pensando che sarebbe utile mettere questo piccolo sorgente nel sito comune
... chissà che un giorno a qualcuno non serva una cosa simile ???
Che ne pensate lo invio ?
Ciao e a presto.

 controllo flash facendo click sul controllo flash ?????
di solito per interagire con un swf bisogna intercettare dei messaggi
provenienti dal filmato stesso (ma forse lo sapevi già?).
ciao

 ha scritto nel messaggio
news:9so6r4$rbl$1...@nreada.inwind.it...
