...DesktopWindow non mi ritorna i nomi delle finestre.
Devi utilizzare la proprietà ".VisibleName" anziché ".Name". Ciò, però, comporta anche che devi modificare i valori stringa di ciascun "Case" nel "Select Case", contenuto nella routine "Form_Open( )". Quindi ad esempio nel primo "Case" avrai "ARTICOLI".
Ad ogni buon fine modificherei la Classe "FMenu.class" come segue:
Private $sName As String
Public Sub Form_Open()
Dim w As DesktopWindow
For Each w In Desktop.Windows
Select Case w.VisibleName
Case "ARTICOLI"
ListView1.Add("1", "Finestra Articoli")
Case "CLIENTI"
ListView1.Add("2", "Finestra Clienti")
Case "FORNITORI"
ListView1.Add("3", "Finestra Fornitori")
Case "INTERROGAZIONI"
ListView1.Add("4", "Finestra Interrogazioni")
Case "ORDINI"
ListView1.Add("5", "Finestra Ordini")
Case "STATISTICA"
ListView1.Add("6", "Finestra Statistica")
End Select
Next
End
Public Sub ReturnName() As String
Me.ShowModal()
End
Public Sub ListView1_Click()
Dim s As String
s = ListView1.Key
Select Case s
Case "1"
$sName = "Articoli"
Case "2"
$sName = "Clienti"
Case "3"
$sName = "Fornitori"
Case "4"
$sName = "Interrogazioni"
Case "5"
$sName = "Ordini"
Case "6"
$sName = "Statistica"
End Select
' Individua l'handle della finestra, scelta dalla lista della "ListView", e la imposta come finestra "Attiva":
Desktop.ActiveWindow = Desktop.FindWindow($sName, Null, Null)[0]
End
Public Sub btnOK_Click()
Me.Close(True)
End
Public Sub btnCancel_Click()
Me.Close
End
Vi è da precisare che nel mio ultimo codice c'è un'errore nel codice:
Public Sub Form_Open()
Dim w As DesktopWindow
For Each w In Desktop.Windows
Print w.VisibleName
Select Case w.VisibleName
Case "ARTICOLI"
ListView1.Add("1", "Finestra Articoli")
Case "CLIENTI"
ListView1.Add("2", "Finestra Clienti")
Case "FORNITORI"
ListView1.Add("3", "Finestra Fornitori")
Case "INTERROGAZIONI"
ListView1.Add("4", "Finestra Interrogazioni")
Case "ORDINI"
ListView1.Add("5", "Finestra Ordini")
Case "STATISTICA"
ListView1.Add("6", "Finestra Statistica")
End Select
Next
End
Ho invertito due voci, questo è quello di Vuott (giusto).
La distrazione è la mia prerogativa ;D
Chiudendo delle finestre e poi dando Esc in console appaiono errori tipo questi:
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
Ricevo, ma non sempre, l'errore Out of bound da Desktop.FindWindow(s, Null, Null)[0] quando, dopo le chiusure, le finestre rimangono due. Forse ci vorrebbe un refresh... :-\
Comunque anche io penso che concettualmente il codice postato faccia quello che chiedi.
:ciao:
Ricevo, ma non sempre, l'errore Out of bound da Desktop.FindWindow(s, Null, Null)[0]
Potresti anche provare ad integrare il primo parametro del Metodo ".FindWindow( )" con un paio di asterischi, come quando si usa l'operatore Like.
...Desktop.FindWindow("*" & s & "*", ....
Mi sembra che non cambi niente, comunque se mettiamo un Try davanti a Desktop.ActiveWindow = così:
If Not IsNull(s) Then Try Desktop.ActiveWindow = Desktop.FindWindow("*" & s & "*", Null, Null)[0]
Sembra funzionare e non mi da più errore.
Rimangono gli :
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00015
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00015
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00015
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00015
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00011
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00011
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00015
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00015
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00011
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00011
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00015
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00015
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00019
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c00019
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0001d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x20455355
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x2052554f
in console.
Si aggiungono ogni volta che si chiude la finestra attiva e si da Esc (ho provato a mettere dei Try sul caricamento del menu ma senza risultato) :-\
:ciao: :ciao:
Chiudendo delle finestre e poi dando Esc in console appaiono errori tipo questi:
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
X Error: BadWindow (invalid Window parameter) 3
Major opcode: 20 (X_GetProperty)
Resource id: 0x3c0000d
I valori espresi in rappresentazione esadecimale sono gli identificativi di ciascuna finestra chiusa, dopo che - come hai sottolineato tu - sia stata già chiusa la finestra "MENU".
Per verificare ciò, è sufficiente porre alla fine della routine "Sub ListView1_Click( )" questa riga di codice:
Print Hex(Desktop.FindWindow($sName, Null, Null)[0], 8), $sName
e compiere quindi tutta la sequenza del test.
Guarda un po se ti va bene, essendo la FMain a Below devi ridurre a icona la IDE altrimenti non vedi la finestra.
:ciao: :ciao:
P.S. Solo una cosa: Se la finestra principale non ha il focus CTRL+Q non funziona, se ti interessa devi aggiungere queste righe
Else If Key.code = Key["Q"] And Key.Control Then
FMain.Close()
alla routine KeyPress di MMain.
P.S. 2. Mi sono accorto che c'è un errore che forse potrebbe essere riparato caricando subito tutte le form per poi nasconderle e giocare su visible.true o false per mostrarle o no.
Purtroppo ora non ho tempo di farlo, ci aggiorniamo a domani.
Buonasera a tutti,
...Ora mi dà un'errore che non riesco a decifrare per poter
eventualmente modificare il codice.
Credo che tu debba togliere l'evento dal modulo start (in effetti i moduli non dovrebbero generare eventi) e spostare il codice in ogni form:
Public Sub Form_KeyPress()
Dim i As Integer
If Key.Code = Key.Esc Then
i = FMnuAttenzione.ReturnId()
If Not IsNull(i) Then Desktop.ActiveWindow = i
Endif
End
Ti rammento che l'uso di Workspace del componente gb.form.mdi è creato per fare queste cose, vale a dire mostrare in primo piano la finestra che si desidera senza tanti sbattimenti.
:ciao: