Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    problema primo piano form child

    Salve a tutti,
    premetto che sono nuovo del forum e che non ho alcuna intenzione di fare post doppi o danni al sito in qualsiasi modo, spero dunque di attenermi al regolamento e vi prego di riprendermi se sbaglio qualcosa.
    Veniamo dunque al problema che penso che per molti di voi sia piuttosto semplice:
    Sto programmando con VB6 un programmino abbastanza semplice che si articola attraverso l'uso di timer, ci sono 2 form una in cui consiste il programma vero e proprio e una che ha la funzione di poco più di una msgbox che viene chiamata dalla prima all'inizio del programma.
    il risultato che vorrei ottenere è che all'apertura del programma appare una form (form child)con un messaggio di avviso,e che dopo 4 secondi si distattiva e parte la seconda. Il problema è che al momento della chiamata che faccio in form_load la form appare in secondo piano. Ho provato già a cercare in giro per il sito e altri siti, ho provato con i comandi load form2, form2.show, form2.zorder con e senza "(0)" ma non c'è versi di farla apparire in primo piano.
    Ovviamente ho già pensato a cambiare i codici e a far della form2 la form padre ma se faccio così il gusto di programmare va a farsi benedire!
    Chiedo dunque aiuto a voi per trovare un ordine o un metodo efficente.
    Ringrazio anticipatamente tutti coloro che si prenderanno il disturbo di rispondermi.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    759

    Re: problema primo piano form child

    Originariamente inviato da omarmassa
    ...all'apertura del programma appare una form (form child)...
    Form "child" di chi? L'altra form è di tipo MDI? Altrimenti non ha senso.
    E quale delle due è la form di avvio?

  3. #3
    Scusa hai ragione si capisce male, allora la form1 è la form che contiene il programma ed è la form padre mentre la form child è la form2 che contiene una label con un messaggio e che non è MDI. In pratica ciò che ho fatto è stato creare a metà programma una seconda form (form2 non MDI) che anticipi la form padre attraverso una chiamata nella form_load.
    Spero di essere stato chiaro ti ringrazio della pazienza.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    759
    Mah, per me non è molto chiaro.
    Prova a mostrare il codice che hai scritto. E, se form1 è il form di avvio, cioè quello che parte per primo, è di tipo MDI o no? Perché se non lo è, ripeto, non ha senso parlare di padri e figli.

  5. #5
    Non ci sono form mdi.
    Il codice di chiamata del form2 è il seguente e si trova nel form1

    Private Sub Form_Load()
    Load Form2
    Form2.Show
    Form2.ZOrder
    Unload Form1
    End Sub

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: problema primo piano form child

    Originariamente inviato da omarmassa
    Salve a tutti,
    premetto che sono nuovo del forum e che non ho alcuna intenzione di fare post doppi o danni al sito in qualsiasi modo, spero dunque di attenermi al regolamento e vi prego di riprendermi se sbaglio qualcosa.
    Il Regolamento, per rispettarlo, bisogna leggerlo, cosa che evidentemente non hai fatto (o l'hai letto MOLTO superficialmente) perchè hai già iniziato con una violazione NON indicando nel titolo il linguaggio usato , quindi ti suggerisco di ri-leggerlo (il Regolamento) con più attenzione, così eviterai il rischio di una moderazione.

    Originariamente inviato da omarmassa
    Veniamo dunque al problema... [cut]
    Sto programmando con VB6 un programmino abbastanza semplice che si articola attraverso l'uso di timer, ci sono 2 form una in cui consiste il programma vero e proprio e una che ha la funzione di poco più di una msgbox che viene chiamata dalla prima all'inizio del programma.
    il risultato che vorrei ottenere è che all'apertura del programma appare una form (form child)con un messaggio di avviso,e che dopo 4 secondi si distattiva e parte la seconda. Il problema è che al momento della chiamata che faccio in form_load la form appare in secondo piano.
    Domanda 1: se dopo 4 secondi disattivi il primo form, come fa ad apparire la secondo form in secondo piano, visto che il prima non c'è più?

    Originariamente inviato da omarmassa
    Ho provato già a cercare in giro per il sito e altri siti, ho provato con i comandi load form2, form2.show, form2.zorder con e senza "(0)" ma non c'è versi di farla apparire in primo piano.
    Ovviamente ho già pensato a cambiare i codici e a far della form2 la form padre ma se faccio così il gusto di programmare va a farsi benedire!
    Domanda 2: e noi cosa possiamo dirti dato che non ci hai mostrato nemmeno una riga di codice, né del prima né del dopo averli cambiati?
    (Altra raccomandazione contenuta nel Regolamento... )

    Originariamente inviato da omarmassa
    Chiedo dunque aiuto a voi per trovare un ordine o un metodo efficente.
    Ringrazio anticipatamente tutti coloro che si prenderanno il disturbo di rispondermi.
    Se ci aiuti ad aiutarti, proviamo a farlo.

    Cosa intendi esattamente per disattivato?
    Visibile in primo piano ma non accessibile? Nascosto? Chiuso?
    Non si capisce in che modo vuoi usare il form di 'splash-screen'.

    Comunque, se fai partire il programma dalla Sub Main() la cosa è banale:

    codice:
    Public Sub Main()
      Load Form1
    
      'resterà sempre in primo piano rispetto a Form1
      frmSplash.Show , Form1   
    
      ' attendo 4 secondi
      Dim TimeDelay As Long
      TimeDelay = Timer
      Do While Timer < (TimeDelay + 4)
          DoEvents
      Loop
    
      ' ora mostro 'anche' il Form1
      Form1.Show
      
      Debug.Print "Eseguito in : " & Timer - TimeDelay & " secondi"
        
    End Sub
    Io ho usato il frmSplash scelto tra i modelli a disposizione di VB6.

    Con il codice sopra vedrai entrambi i form sullo schermo, ora non ti resta che scegliere come chiudere il form frmSplash.

    Puoi usare un Timer nel frmSplash per farlo chiudere automaticamente, oppure l'utente preme un tasto...

    Ad esempio, se usi il modello frmSplash di VB6, ha già tutto predisposto, ti basta aggiungervi un Timer ed usare questo codice che lo farà chiudere dopo 8 secondi, cioè dopo 4 secondi che si è aperto il Form1:
    codice:
    Private Sub Form_Load()
        ' al codice esistente aggiungi
        Timer1.Interval = 1000
    End Sub
    Private Sub Timer1_Timer()
        Static i As Long
        i = i + 1
        If i >= 8 Then
            tmr1.Enabled = False
            Unload Me
        End If
    End Sub


    P.S. MDI padre o MID child non c'entrano nulla con tutto questo.


  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    759
    Originariamente inviato da omarmassa
    Non ci sono form mdi.
    OK. Quindi eliminiamo dal discorso termini come child, padre, figlio che, come hai visto, possono generare qualche equivoco.

    Il codice di chiamata del form2 è il seguente e si trova nel form1

    Private Sub Form_Load()
    Load Form2
    Form2.Show
    Form2.ZOrder
    Unload Form1
    End Sub
    Questo frammento di codice non può mettere Form2 in secondo piano, per il semplice motivo che Form1 viene chiuso (Unload Form1) e quindi rimane visibile solo Form2.
    Provalo così com'è e te ne accorgerai. Evidentemente c'è qualche altra riga di codice (perché non mostrarla?) che riattiva Form1 e lo porta in primo piano.

    P.S.
    Quando posti del codice sarebbe opportuno rachiuderlo tra gli appositi tag CODE e /CODE ottenibili anche con il pulsante #.

  8. #8
    Vi ringrazio moltissimo tutti e chiedo scusa se non ho scritto il linguaggio, comunque è visual basic 6, vi ringrazio per avermelo fatto notare, adesso leggerò subito il regolamento più attentamente.
    Allora le form devono apparire simultaneamente una in primo piano e una in secondo, la form che deve apparire in primo piano è la form2.L'idea di chiudere la form1 per far apparire la form2 non funziona perchè così facendo quando la riapro dalla form2 riparte dal form_load e genera un ciclo infinito.L'unico modo plausibile mi sembra quello del frmsplash che però non ho idea di come si utilizzi.
    Di codice non ho un gran che da scrivervi ma eccolo qua lostesso

    codice:
    Option Explicit 
    Dim x As Integer 
    
    Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)    
    Randomize    
       x = Rnd() * 10000 
       Y = Rnd() * 10000    
       Command1.Move x, Y  
    End Sub  
    
    Private Sub Form_Load() 
       (qui io mettevo la chiamata)
       x = 10
       Label1.Caption = "restano" + Str(x) + " secondi" 
    End Sub  
    
    Private Sub Timer1_Timer() 
       Timer1.Interval = 1000
       x = x - 1 
       Label1.Caption = "restano" + Str(x) + " secondi" 
       If x = 0 Then 
          Timer1.Interval = 0 
          Unload Form1 
       End If 
    End Sub
    in pratica questo è un programmino abbastanza stupido in cui il pulsante "scappa" per 10 secondi.
    I comandi di chiamata che avevo trascritto prima li ho eliminati tanto non funzionavano.
    Dunque la mia domanda è: dove inserireste la chiamata e con quali ordini in modo da far apparire la form2 in primo piano??

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    759
    Nell'evento Load della Form1 forza l'apparizione della Form1 stessa con Form1.Show (o anche Me.Show).
    Inserisci, subito dopo, un' istruzione DoEvents in modo da attendere che Form1 sia completamente visibile.
    Infine fai apparire Form2 con Form2.Show.


  10. #10
    Scusa per l'ignoranza ma come si usa il DoEvents?? non riesco a trovare una spiegazione!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.