Newsgroup: it.comp.lang.vo-clipper
Titolo: Dialog + DataDialog in Win2000

Forse è una stupidaggine, ma ho DOVUTO cambiare alcune logiche di programma
per questo, o forse è un vecchio problema già risolto.
Dal menu principale della procedura, proprietà di StandardShellWindow, apro
una Dialog, la cui conferma (tasto) apre una DataDialog contenente un
browse.
Win2000 non fa una piega, Win98 va in errore "questo programma ha eseguito
una operazione non valida".
Tentativi già effettuati ed infruttuosi:
1. proprietario della seconda finestra self:owner (cioè la
StandardShellWindow)
2. proprietario della seconda finestra self (cioè la Dialog)
3. vedi punto 2 chiudendo o NON chiudendo la Dialog, prima o dopo il Show()
della Datadialog
... + altri senza molto senso
Alla fine ho modificato la DataDialog in DataWindow, ed è tutto OK, ma
questo mi ha costretto a gestire l'activate() ed i menu della datawindow, in
quanto le nostre procedure lavorano con un unico menu principale, dove le
voci relative alle finestre già attive sono "dimmed", e le finestre sono
autonome al loro show() / Close() nell'aggiornare il menu principale.
La DataDialog mi assicurava di essere l'unica finestra attiva fino alla sua
chiusura, il menu principale è disattivato, e l'unico menu attivo è il suo,
impostato come contextmenu e come sua toolbar.
Un sacco di codice sprecato e tante cose da gestire in più, che non volevo.
Inoltre, l'obbligo di testare tutte le combinazioni di aperture finestre in
ambienti diversi :-(
Qualcuno ha colto il problema nonostante la mia pessima spiegazione?
La miglior risposta? Che sono stanco e che il problema non esiste.
Vado a dormire
Ciao
Massimo

Puoi rendere modale la tua datawindow a run time con il seguente codice :
METHOD SetModal (lModal) CLASS DataWindow
   LOCAL nHandle AS PTR
   nHandle := GetWindow (SELF:handle(), GW_HWNDFIRST)
   DO WHILE nHandle != 0
      EnableWindow (nHandle,  .NOT. lModal)
      nHandle := GetWindow (nHandle, GW_HWNDNEXT)
   ENDDO
   EnableWindow (SELF:handle(), TRUE)
In un metodo della nostra finestra possiamo rendere tale finestra Modale
semplicemente scrivendo :
SELF:SetModal(TRUE)
Dopo le operazioni necessarie ricordiamoci però di riportarla
successivamente al suo modo originario :
SELF:SetModal(FALSE)
(Forte VO eh ???)
Ciao ciao
Enio

 (Forte VO eh ???)
Forte perché non offre preconfezionata neanche una funzionalità
comunissima come le dialogs modali? Mah...
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 ha scritto nel messaggio
news:97tQ7.4349$NB6.1...@news2.tin.it...


 ha scritto nel
messaggio news:3C129397...@emagsoftware.it...


 settare la mia IN modale, quando era già così bella e pronta.
No, la proposta di Enio non imposta "non modali" tutte le altre finestre
bensì le disabilita per simulare la "modalità" dell'unica che deve
restare usabile.


 "ponte" è fragile.
No, c'è stato un fraintendimento: io non consiglio affatto l'uso diretto
delle API, se non necessario. Le citavo solo per chiarire il fatto che
una "vera" dialog modale si ottiene (internamente) in modo diverso da
ciò che Enio propone (DialogBoxParam() e compagnia).


 ...


 nuovo.
Condivido perfettamente.
