Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Form1.Moveable
Forum - Visual Basic 6 - Form1.Moveable

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
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

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6390
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:45
Martedì, 05/06/2012
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à.
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:47
Martedì, 05/06/2012
programmo in VB6

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6390
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:57
Martedì, 05/06/2012
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à.
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 0:04
Mercoledì, 06/06/2012
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

PM Quote
Avatar
PcBase (Normal User)
Newbie


Messaggi: 20
Iscritto: 19/04/2011

Segnala al moderatore
Postato alle 0:25
Mercoledì, 06/06/2012
Ciao

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

http://www.sendspace.com/file/4lcr40

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:20
Giovedì, 07/06/2012
Testo quotato

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?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:41
Giovedì, 07/06/2012
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

  1. Option Explicit
  2. Dim altezza, lunghezza As String
  3. Private Sub Command1_Click()
  4. ' Ottenere la posizione desiderata in pixel.
  5.     DesiredX = ScaleX((Left), vbTwips, vbPixels)
  6.     DesiredY = ScaleY((Top), vbTwips, vbPixels)
  7. 'Installare il nuovo WindowProc.
  8.     OldWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf NewWindowProc)
  9. End Sub
  10. Private Sub Command2_Click()
  11. ' Ottenere la posizione desiderata in pixel.
  12.     DesiredX = "0"
  13.     DesiredY = "0"
  14. End Sub
  15. Private Sub Form_Load()
  16. 'visualizza contenuto file altezza
  17.     SetAttr App.Path & "\alt.txt", vbNormal
  18.     Open App.Path & "\alt.txt" For Input As #2
  19.     Line Input #2, altezza
  20.     Close #2
  21.     SetAttr App.Path & "\alt.txt", vbHidden
  22. 'visualizza contenuto file lunghezza
  23.     SetAttr App.Path & "\lun.txt", vbNormal
  24.     Open App.Path & "\lun.txt" For Input As #2
  25.     Line Input #2, lunghezza
  26.     Close #2
  27.     SetAttr App.Path & "\lun.txt", vbHidden
  28.     Form1.Top = (altezza)
  29.     Form1.Left = (lunghezza)
  30. End Sub



APIStuff.bas
Codice sorgente - presumibilmente VB.NET

  1. Option Explicit
  2. Public OldWindowProc As Long
  3. 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
  4. Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  5. Public Const GWL_WNDPROC = (-4)
  6. Public Const WM_WINDOWPOSCHANGING = &H46
  7. Public Const WM_WINDOWPOSCHANGED = &H47
  8. Public DesiredX As Long
  9. Public DesiredY As Long
  10. Type WINDOWPOS
  11.  
  12.     x As Long
  13.     y As Long
  14. End Type
  15. Public Function NewWindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As WINDOWPOS) As Long
  16. 'Mantenere le proporzioni.
  17.     If msg = WM_WINDOWPOSCHANGING Then
  18.         ' Reset the position.
  19.         lParam.x = DesiredX
  20.         lParam.y = DesiredY
  21.     End If
  22. 'Continua l'elaborazione normale. MOLTO IMPORTANTE!
  23.     NewWindowProc = CallWindowProc(OldWindowProc, hwnd, msg, wParam, lParam)
  24. 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?



ha allegato un file: prova.zip (6202 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da il 07/06/2012 alle 19:52
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6390
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:35
Giovedì, 07/06/2012
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à.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo