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: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
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