Oppure

Loading
25/08/09 10:27
fusebyte
Con questa SUB riesco ad allineare una applicazione dentro un FORM,in pratica a video risulta una cosa sola.

Private Sub Form_Load()
       Dim Pid As Long
    'Execute notepad.Exe
    Pid = Shell("c:\windows\notepad.exe", vbNormalFocus)
    If Pid = 0 Then MsgBox "Error starting the app"
    'retrieve the handle of the window
    mWnd = InstanceToWnd(Pid)
    'Set the notepad's parent
    SetParent mWnd, Me.hwnd
   jWnd = MoveWindow(mWnd,  0,   0, 630, 450, True)  ' <--- muove l'EXE in posizione 0,0 
    'Put the focus On notepad
    Putfocus mWnd
   End Sub

Naturalmente ho delle API dichiarate ed la funzione INSTANCEtoWND di supporto

Utilizzando un EXE che apre piu processi ( controllo nel TASK),sono costretto a cambiare il FORM LOAD in questo modo ( suggeritomi da TheProgrammer che ringrazio)e funziona.


Private Sub Form_Load()
  
    Shell "FattExpressPro.exe", vbDefault
     DoEvents
     
    Do While mWnd = 0
     mWnd = FindWindow(ByVal 0&, "Fatturazione Professionale v1.1")
      DoEvents
    Loop
    
    SetParent mWnd, Me.hWnd
    
    jWnd = MoveWindow(mWnd, 0,  0, 790, 535, True)'<-- non muove l'EXE in posizione 0,0   
    Putfocus mWnd
    

End Sub


Anche qui le API necessarie sono dichiarate.
Cosi' riesco a caricare l'applicazione dentro un FORM, ma a differenza dell'altro FORM LOAD,il comando MOVEWINDOW non funziona,l'applicazione resta in basso
a destra seppur dentro il FORM.

Vorrei capire perche' nel primo caso funziona e nel secondo no e come posso risolvere nel secondo caso.



Ciao Grazie
Ultima modifica effettuata da fusebyte 05/09/09 11:05
aaa
26/08/09 10:36
fusebyte
jWnd = MoveWindow(mWnd, 0, 0, 790, 535, True) ' <--non muove l'EXE in pos. 0,0


MoveWindow funziona egregiamente su EXE come NOTEPAD,ma su altri EXE sembra non funzionare
adeguatamente.
Ho risolto usando

Dichiarato la API SetWindowsPos e nella SUB
SetWindowPos mWnd, 0, -5, -30, 900, 500, SWP_SHOWWINDOW Or SWP_NOREPOSITION 'Or SWP_NOSIZE


L'exe si apre perfettamente allineato al FORM padre ,ma c'è un problemino,dopo pochi secondi torna in basso a DX.
Ho provato ad aggiungere il FLAG NOREPOSITION senza risultati.

Potreste per cortesia aiutarmi a risolvere questo piccolo problema?

Grazie
aaa
26/08/09 16:36
fusebyte
SetWindowPos mWnd, 0, -5, -30, 900, 550, SWP_SHOWWINDOW Or SWP_ASYNCWINDOWPOS


Cosi' si apre molto meglio l'applicazione EXE riempie tutto il FORM in posizione esatta,ma
rimane questo problema che dopo qualche secondo l'applicazione assume una posizione
verso il basso.
Non riesco a capire il perche' di questo cambio di posizione.



Ciao
aaa
26/08/09 17:06
GrG
ciao, sono contento che stai piano piano riuscendo a risolvere e che posti i tuoi progressi qua, spero che tu risolva presto... ti vorrei essere di aiuto, ma non saprei aiutarti :( :(
aaa
26/08/09 19:19
fusebyte
Grazie,ce la sto mettendo tutta,certo che possa servire anche ad altri.
Certo pero' che...."Piero.Tofy"...non sappia risolvere un cosi' piccolo problema...
questo è un Forum prestigioso,dove chi ne fa parte sa il fatto suo.


Cmq andiamo avanti...qualche Santo provvedera'....:-)

Ciao
aaa
26/08/09 19:59
GrG
E lo so, in realtà è colpa mia, dovrei essere io ad aiutarti essendo mod... comunque qualcuno che di sicuro può aiutarti c'è e che soprannominerei Dio onnipotente che sa tutto di tutto, peccato per te che ultimamente non lo vedo più sul forum...
aaa
27/08/09 7:57
fusebyte
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Const SWP_SHOWWINDOW = &H40
'Const SWP_NOSENDCHANGING = &H400




Private Sub Form_Load() 
   
    Shell "FattExpressPro.exe", vbDefault 
     DoEvents 
     
    Do While mWnd = 0 
     mWnd = FindWindow(ByVal 0&, "Fatturazione Professionale v1.1") 
      DoEvents 
    Loop 
     
    SetParent mWnd, Me.hWnd 
      SetWindowPos mWnd, 0, -5, -30, 800, 530, SWP_SHOWWINDOW 'Or SWP_NOSENDCHANGING 
    Putfocus mWnd 
     
End Sub


Ho provato ad aggiungere dopo SWP_SHOWWINDOW,tutto quello che ho trovato NOREDRAW,NOREPOSITION,ASINWINDOWPOS,NOMOVE,NOSENDCHANGING(che ho remmato),ecc ecc...senza ottenere risultati.
L'exe si apre perfettamente dentro al FORM,ma rimane in quella posizione per 5 secondi circa poi passa in una posizione diversa.(Ma quello che mi fa diventare matto è,quale comando gli fa cambiare posizione se dopo il SETPARENT c'è solo il SETWINDOWSPOS)
Le ho provate di tutte,non so piu' a che Santo votarmi.
Speriamo in qualche aiuto perche' davvero non riesco ad andare avanti.

Ciao
aaa
27/08/09 10:32
GrG
mm... puoi postare per intero il codice che usi così provo anche io?

p.s. Si fa prima, altrimenti mi dovrei andare a cercare una per una tutte le dichiarazioni delle API che usi...
aaa