Newsgroup: it.comp.lang.delphi
Titolo: form MDI

salve a tutti,
vorrei un consiglio: il mio programma gestisce sostenzialmente due tipi di  
problemi,
ciascuno con un'interfaccia propria (Paintbox, label e quant'altro).
quindi sul form principale ho due panel ciascuno contenente i controlli  
appropriati per lo specifico
problema.
il codice di gestione resta pero' tutto nel form principale; percio' per  
fare un po' di
ordine volevo sostituire i 2 panel con 2 form MDIChild.
la domanda e': c'e' qualche controindicazione sui progetti MDI? ho letto  
sul libro di Cantu'
su D2006 che la tecnologia MDI e' stata abbandonata dalla Microsoft, e non  
vorrei
che in futuro debba riscrivere il programma...
ciao e grazie
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/

 [...]
Se dovessi affrontare un problema di questo tipo, io eviterei l'uso di 
interfacce MDI e concentrerei la "logica" che gestisce queste interfacce 
grafiche all'interno di *controlli visuali personalizzati* o, tutt'al 
più, all'interno di *Frames*, strumenti a disposizione degli 
sviluppatori Delphi da lungo tempo proprio per consentire loro di creare 
porzioni di interfacce utente simili a Form da riutilizzare più volte 
all'interno dello stesso progetto. :-)
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

puoi farmi un esempio di controllo visuale personalizzato?
per esempio se uso un panel (come faccio adesso) la logica, cioe' il  
codice,
va tutto nel calderone della main form... che e' cio' che volevo evitare!


-- 


 va tutto nel calderone della main form... che e' cio' che volevo evitare!
Crea un nuovo "Frame" dal menu [New|Other...] e inserisci al suo interno 
tutta la logica relativa alla parte dell'interfaccia che si possa 
gestire in modo atomico e separato dal resto, progettandolo come si 
trattasse di un classico Form.


 ha scritto nel messaggio
news:44571717$1...@newsgate.x-privat.org...


 Mi basta qualche piccolo esempio per capire come funziona la cosa.
Anche sul mio sito, sezione "Articoli & Tips". :-)



-- 


 nel frame definisco un gestore, preso dal tuo esempio
Se fosse così, i Frame risulterebbero totalmente inutili. :-)
All'interno di ciascun Frame puoi inserire controlli visuali e 
intercettare eventi che agiscono opzionalmente su altri controlli dello 
stesso Frame.
Selezionando "Frames" dalla Palette dei Componenti e creando più istanze 
di un determinato Frame all'interno di un Form, ad esempio, ciascuna di 
queste risponde correttamente agli eventi e agisce sui controlli 
visuali, riferendosi chiaramente a quelli presenti nell'istanza di 
riferimento del Frame.
C'è senz'altro un problema nel modo in cui hai implementato il codice di 
risposta agli eventi.
Faccio un'ipotesi... avrai mica usato le variabili create 
automaticamente da Delphi per i Frame allo scopo di accedere ai 
controlli visuali in essi contenuti, vero? ;-)


hai ragione, ho fatto un test con un progetto nuovo e funziona come dici  
tu,
ora riprovo a implementarlo nel mio programmone, caso mai ti interpello  
ancora
intanto grazie mille!
ciao
Luca

-- 


all'interno dello stesso progetto. :-)
Ho prelevato dal tuo blog il tuo progetto di esempio, l'ho provato 
trovandolo molto interessante.
Mi è sorta però una domanda a cui non sono riuscito a dare una risposta e 
per la quale chiedo il tuo aiuto / consiglio.
Nel caso intenda implementare nel tuo progetto form che rimangano sempre 
visibili, come posso fare?
Immagina di essere in gestione documenti e di dover consultare le 
anagrafiche articoli: come faccio ad ottenere questa funzionalità che mi 
veniva offerta da MDI?
Ciao
Umberto
--- posted by geoForum on 
http://www.delphiedintorni.it

 veniva offerta da MDI?
Io in genere aggiro il problema. Mi spiego: supponiamo che tu sia nella 
pagina che visualizza l'elenco delle fatture e tu stia inserendo, 
attraverso una finestra, un nuovo documento; supponiamo ancora che 
nell'anagrafica manca proprio il cliente di riferimento.
Con un'interfaccia di tipo MDI, potresti avere due finestre allineate, 
quella con il nuovo documento in fase di costruzione e quella con 
l'anagrafica clienti; inserire un nuovo record nella seconda senza 
perdere la prima è un gioco da ragazzi.
Tuttavia, usando i Frame, puoi tranquillamente avere un approccio 
analogo anche con un'interfaccia a pagine e l'uso di finestre di dialogo 
modali.
Ad esempio, potrei racchiudere il Frame dei clienti all'interno di una 
finestra modale, richiamabile dalla finestra di inserimento di una nuova 
fattura, e richiamare la prima da quest'ultima; il Frame riproduce 
quindi le stesse funzionalità - se predisposto e progettato 
correttamente - sia nella pagina a sé stante, sia nella finestra di 
dialogo richiamata al volo da una finestra secondaria che ha bisogno di 
un dato definibile solo attraverso la prima.
E' più difficile da spiegare che da implementare, probabilmente.
Riassumendo, uno dei vantaggi dell'MDI è quello di consentire all'utente 
di muoversi da una finestra ad un'altra; pur evitando l'MDI, non è detto 
che non sia possibile comunque proporre all'utente due finestre, o più 
genericamente, interfacce contemporaneamente, sfruttando la creazione 
dinamica e la disposizione di Frame al posto dei Form.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)
Inviato da X-Privat.Org - Registrazione gratuita 
http://www.x-privat.org/join.php

dinamica e la disposizione di Frame al posto dei Form.
In tanto grazie di tutto.
Ho fatto delle prove perň non sono riuscito ad aprire un frame in una 
finestra modale.
Sapresti darmi un esempio di codice, magari riferito al tuo progetto di 
esempio, per aprire, per esempio, il tue frame di impostazione password 
anche in modale?


 anche in modale?
Al momento non sono in grado di fornirti istantaneamente un esempio di 
codice (sto lavorando sulla concorrenza Microsoft...aaaargh!). :-)
Nel frattempo però ti fornisco qualche indicazione che può esserti 
utile, magari riesci a risolvere autonomamente il problema.
Creare l'istanza di un Frame non è né più né meno complicato rispetto 
alla creazione di un qualsiasi controllo visuale... con la differenza 
che un Frame è facilmente progettabile poiché gode del supporto visuale. ;-)
Quindi, all'interno di un Form, potresti tranquillamente inserire 
nell'evento /OnCreate/ il codice necessario per creare dinamicamente il 
Frame, chiamando il costruttore /Create/ della classe del Frame e 
assegnando il riferimento ad una variabile, per definire poi via codice 
la posizione, un'eventuale allineamento, il /Parent/ (indispensabile) e 
così via.
Ovviamente, questo se hai a che fare con un Form che, esperimenti a 
parte, è destinato a creare più tipi di Frame; in caso contrario, per 
istanziare il Frame una volta che l'hai creato, ti basta scegliere 
"Frames" dalla Palette dei Componenti, fare clic sul Form e selezionare 
quello che desideri.
