()
Newbie
Messaggi:
Iscritto:
|
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
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6390
Iscritto: 03/01/2010
|
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à. |
|
()
Newbie
Messaggi:
Iscritto:
|
programmo in VB6
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6390
Iscritto: 03/01/2010
|
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 il 06/06/2012 alle 0: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à. |
|
()
Newbie
Messaggi:
Iscritto:
|
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
|
|
PcBase (Normal User)
Newbie
Messaggi: 20
Iscritto: 19/04/2011
|
|
|
()
Newbie
Messaggi:
Iscritto:
|
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? |
|
()
Newbie
Messaggi:
Iscritto:
|
ho quasi risolto però ho un altro piccolo problema, ora vi posto il codice e poi vi dico qual è...
Form1.frm
Codice sorgente - presumibilmente VB.NET |
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
Codice sorgente - presumibilmente VB.NET |
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 il 07/06/2012 alle 19:52 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6390
Iscritto: 03/01/2010
|
Come fa a sbloccarsi con Command2 se non c'è il codice per rimettere a posto la OldWindowProc ?
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à. |
|