Oppure

Loading
05/06/12 21:13
ciao ho un problema, ho un form (Form1) e tramite 2 tasti (Comman1 e Command2) impostare che il form si possa spostare o meno. io ho provato per esempio cosi:

Option Explicit

Private Sub Command1_Click()
Form1.Moveable = True
End Sub

Private Sub Command2_Click()
Form1.Moveable = False
End Sub

però mi dice errore di compilazione, chi mi può aiutare? grazie
05/06/12 21:45
nessuno
Ma programmi con VB6 o con VB.NET ?

Hai visto cosa tratta questa sezione del forum?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
05/06/12 21:47
programmo in VB6
05/06/12 21:57
nessuno
Ok ma *non* hai un errore in compilazione, semmai a runtime perchè la proprietà Moveable è utilizzabile solo a design time, non da codice.

Da codice penso sia possibile solamente con il subclassing, intercettando il messaggio WM_MOVE
Ultima modifica effettuata da nessuno 05/06/12 22:00
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
05/06/12 22:04
Il programma che sto facendo ha:
BorderStyle = 4. FixedToolWindows
ControlBox = True
MaxButton = False
MinButton = False

però quello che mi serve è che il form non si deve poter spostare se non dopo aver premuto un tasto
05/06/12 22:25
PcBase
Ciao

Un esempio in Vb6 scaricato tempo fà dalla rete con commenti del metodo.

sendspace.com/file/…
aaa
07/06/12 12:20
Postato originariamente da nessuno:

Ok ma *non* hai un errore in compilazione, semmai a runtime perchè la proprietà Moveable è utilizzabile solo a design time, non da codice.

Da codice penso sia possibile solamente con il subclassing, intercettando il messaggio WM_MOVE


Quindi non posso scrivere il codice ma posso solo impostare il form?
07/06/12 17:41
ho quasi risolto però ho un altro piccolo problema, ora vi posto il codice e poi vi dico qual è...

Form1.frm
Option Explicit
Dim altezza, lunghezza As String
Private Sub Command1_Click()
' Ottenere la posizione desiderata in pixel.
    DesiredX = ScaleX((Left), vbTwips, vbPixels)
    DesiredY = ScaleY((Top), vbTwips, vbPixels)
'Installare il nuovo WindowProc.
    OldWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf NewWindowProc)
End Sub
Private Sub Command2_Click()
' Ottenere la posizione desiderata in pixel.
    DesiredX = "0"
    DesiredY = "0"
End Sub
Private Sub Form_Load()
'visualizza contenuto file altezza
    SetAttr App.Path & "\alt.txt", vbNormal
    Open App.Path & "\alt.txt" For Input As #2
    Line Input #2, altezza
    Close #2
    SetAttr App.Path & "\alt.txt", vbHidden
'visualizza contenuto file lunghezza
    SetAttr App.Path & "\lun.txt", vbNormal
    Open App.Path & "\lun.txt" For Input As #2
    Line Input #2, lunghezza
    Close #2
    SetAttr App.Path & "\lun.txt", vbHidden
    Form1.Top = (altezza)
    Form1.Left = (lunghezza)
End Sub


APIStuff.bas
Option Explicit
Public OldWindowProc As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As WINDOWPOS) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_WINDOWPOSCHANGING = &H46
Public Const WM_WINDOWPOSCHANGED = &H47
Public DesiredX As Long
Public DesiredY As Long
Type WINDOWPOS

    x As Long
    y As Long
End Type
Public Function NewWindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As WINDOWPOS) As Long
'Mantenere le proporzioni.
    If msg = WM_WINDOWPOSCHANGING Then
        ' Reset the position.
        lParam.x = DesiredX
        lParam.y = DesiredY
    End If
'Continua l'elaborazione normale. MOLTO IMPORTANTE!
    NewWindowProc = CallWindowProc(OldWindowProc, hwnd, msg, wParam, lParam)
End Function


ora:
premo sul Command1 il form si "blocca"
premo sul Command2 si "sblocca"
ma se ripremo sul Command1 per bloccarlo di nuovo mi esce il messaggio "Errore 28: spazio dello stack esaurito". come risolvo?

Ultima modifica effettuata da 07/06/12 17:52