Newsgroup: it.comp.lang.visual-basic
Titolo: Spostare il form

Ciao a tutti.
Tempo fa avevo trovato del codice che mi permetteva di spostare il form
anche se non aveva la titlebar. Bastava tenere cliccato il form e
trascinarlo e lui si spostava.
Il codice eera questo:
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)
'permette lo spostamento del form con il cursore del mouse
Dim ReturnVal As Long
If Button = 1 Then
     X = ReleaseCapture()
     ReturnVal = SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
 End If
End Sub
Ora però volevo sapere come portare questa cosa in vb.NET Ho cercato su
allapi ma non danno nessun equivalente di .net per quelle due api usate.
Sapete dirmi nulla?
Grazie a tutti
JW

 Sapete dirmi nulla?
Questo non risponde al tuo quesito, però ti ripeto, non usare funzioni
dell'API con .NET!
E' un approccio errato e neanche a .NET piace.
Dimenticati l'API!
Devi trovare la soluzione altrove: con .NET devi rivedere tutto il "modus
operandi", dimenticati tutti i "trucchetti" che usavi in VB perchè .NET li
ha già integrati.
Dove siano è un'altro discorso :)
Ciao
--
y = f(
http://neodatatype.interfree.it/index.html
)

 ha scritto nel messaggio
news:F6769.204801$Jj7.4...@news1.tin.it...


 ha già integrati.
La costruzione di una Cartella , utilizzando 
VB.NET
 , con le API funziona
benissimo.
1- Costruisci un modulp di classe . Nome clsWin32API
1.1- Aggiungi il seguente codice:
Option Strict On
Imports System.Runtime.InteropServices
Public Class clsWin32API
    <StructLayout(LayoutKind.Sequential)> _
    Public Structure SECURITY_ATTRIBUTES
        Public nLength As Integer
        Public lpSecurityDescriptor As Integer
        Public bInheritHandle As Integer
    End Structure
    Public Declare Function CreateDirectory Lib "kernel32" _
       Alias "CreateDirectoryA" (ByVal lpPathName As String, _
                                 ByVal lpSecurityAttributes _
                                     As SECURITY_ATTRIBUTES) As Boolean
End Class
2- in una maschera aggiungi:
2.1- una casella di testo. Nome txtDirectory
2.2 Un pulsante. Nome butCostruisciCartella
2.3 All'evento click del pulsante aggiungi il seguente codice:
Private Sub butCostruisciCartella_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles butCostruisciCartella.Click
        Dim security As New clsWin32API.SECURITY_ATTRIBUTES()
        If clsWin32API.CreateDirectory(txtDirectory.Text, security) Then
            MessageBox.Show("Directory costruita.")
        Else
            MessageBox.Show("Directory non costruita.")
        End If
    End Sub
3-Avvia l'applicazione
4- Nella casella di testo digita: c:\Hello
5- clic sul pulsante e avrai costruito la nuova cartella.
Se desideri una sotto cartella aggiungi alla casella di testo:
c:\Hello\Mondo migliore
e click sul pulsante ..... e così di seguito.
giuseppeD

 benissimo.
Anche rompere una noce con un martello pneumatico funziona benissimo: la
noce si rompe... ma da qui a dire che è il modo giusto... :)
Credo siano da evitare consigli di questo tipo.
Se il post fosse stato "[?] come usare le funzioni API in 
VB.NET
" la tua
risposta sarebbe corretta, ma comunque *non* consigliabile.


Tutte le API che utilizzi in passato le puoi tranquillamente utilizzare
anche con .Net, il fatto è che spesso le funzionalità delle API sono esposte
direttamente dal CLR.
Nel caso da te indicato, il principio da utilizzare è lo stesso
(subclassing) quello che cambia è che il subclassing in .Net è fornito
direttamente dal framework.
La classe form espone una subrountine protected WndProc, quindi ereditando
tale sub puoi effettuare il subclassing del form in modo semplice e d
immediato.
nel tuo caso devi intercettare il messaggio WM_NCHITTEST (0x84) test della
posizione del cursore e sostituire il valore 1 (il cursore è nella client
are) con 2 (il cursore è sulla title bar) prendendo, di fatto, in giro
windows.
   Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
      MyBase.WndProc(m)
      If m.Msg = &H84 Then
         If m.Result.ToInt32 = 1 Then m.Result = New IntPtr(2)
      End If
   End Sub
HTH
PS: Rendi il soggetto più chiaro, in particolar modo il fatto che stai
chiedendo info su .Net
--
Corrado Cavalli
UGIdotNET - 
http://www.ugidotnet.org

Grazie per l'info..
A proposito di .NET che manuale italiano mi consiglieresti riguardo a
VB.NET
?
Grazie e Ciao