Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[VB] - Muovere una Finestra

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[VB] - Muovere una Finestra

Messaggioda SuperRomu » mar dic 21, 2004 3:24 pm

Ciao a tutti!!!

come posso muovere una finestra che non una titlebar ??
vi prego se sapete qualcosa postatelo è di vitale importanza!!!
ho trovato tanti esempi ma nessuno funziona.

Grazie ciao !!!
Avatar utente
SuperRomu
Aficionado
Aficionado
 
Messaggi: 147
Iscritto il: mar ago 24, 2004 9:52 pm

Re: [VB] - Muovere una Finestra

Messaggioda badpazzword » ven gen 14, 2005 6:12 pm

SuperRomu ha scritto:come posso muovere una finestra che non una titlebar ?? vi prego se sapete qualcosa postatelo è di vitale importanza!!! ho trovato tanti esempi ma nessuno funziona.


Dovresti lavorare di api... Nell'evento MouseDown chiami l'api GetCursorPos...
Codice: Seleziona tutto
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
...e memorizzare le coordinate in qualche variabile. Usa anche una variabile a libello di form quale "IsDragging"

Poi con l'evento mousemove (se IsDragging è true) chiami ancora GetCursorPos e sposti il form dei pixel che ti servono

Infine con mousedown setti a no IsDragging e sei a posto.

Ecco il tipo di dati restituito da GetCursorPos:

Codice: Seleziona tutto
Type POINTAPI
    X As Long
    Y As Long
End Type


"Basta" ora scrivere il codice.
I didn't say it was my fault. I said I was going to blame it on you.
Avatar utente
badpazzword
Aficionado
Aficionado
 
Messaggi: 31
Iscritto il: ven gen 14, 2005 5:28 pm

Re: [VB] - Muovere una Finestra

Messaggioda Silver Black » sab gen 15, 2005 10:43 am

SuperRomu ha scritto:come posso muovere una finestra che non una titlebar ??
vi prego se sapete qualcosa postatelo è di vitale importanza!!!
ho trovato tanti esempi ma nessuno funziona.


In realtà ti serve utilizzare la SendMessage, in pratica devi inviare alla finestra il messaggio generato da Windows qundo si esegue il drag&drop dalla barra del titolo. Usando la SendMessage puoi inviare questo messaggio quando vuoi tu, per esempio trascinandola dal suo interno.
Vediamo come.

Dichiarazioni API:

Codice: Seleziona tutto
'--------------------------------------------------------
' API - Invio messaggi Windows (per muovere le finestre)
'--------------------------------------------------------
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
Public Declare Function ReleaseCapture Lib "user32" () As Long
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
Public Const EM_GETLINECOUNT = &HBA


Funzioni:

Codice: Seleziona tutto
Public Sub MoveFormByDragDrop(MouseButton As Integer, objForm As Form)
'-------------------------------------------------------------------------
' Muove una finestra come se si ussse il drag&drop sulla barra del titolo
'-------------------------------------------------------------------------

    If fMoveableForms Then 'in base al parametro nello script
        If MouseButton = vbLeftButton Then
            ReleaseCapture
            SendMessage objForm.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
        End If
    End If
   
End Sub


Ed infine la chiamata, per esempio quando di preme il pulsante del mouse e si trascina sulla form stessa:

Codice: Seleziona tutto
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

  MoveFormByDragDrop Button, Me

End Sub


Puoi ripetere quest'ultima chiamata da tutti gli oggetti che vuoi, se vuoi che l'utente possa utilizzare più "maniglie" per muovere la finestra.

Ciao!
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising