Newsgroup: it.comp.lang.delphi
Titolo: Console Application & TWinControl

La domanda può sembrare assurda e nasce dal mio post precedente: cosa mi
vieta di creare in una Console Application un oggetto derivato da
TWinControl (es un TButton) passando nel Create come Owner nil ?
Quali ripercussioni può avere nell'esecuzione dell'applicazione ?
Esiste un modo, magari giocando con SetConsole... di disabilitare TUTTI gli
output di una Console Application ?
RiGrazie
Andrea


Mars University: «Knowledge brings Fear»

Ciao Marco
Me ne faccio semplicemente perchè devo realizzare una Console Application
per stampare su determinati moduli e l'unica strada che ho trovato è l'uso
di due componenti, uno derivato da TComponent che richiede un'altro
componente derivato da TWinControl ... diciamo che il primo crea il modulo
basandosi sul canvas del secondo il quale può fornire un output grafico
(tipo preview) che a me non interessa e NON voglio avere e permette anche di
stampare il modulo (e questo è ciò che voglio sfruttare).
Nella creazione non ci sono problemi in quanto posso mettere nil come Owner
nel Create() degli oggetti, però in esecuzione l'applicazione DOS che chiama
questa piccola applicazione perde il controllo e Winsozz mi porta in primo
piano il desktop ... come se ci fosse una finestra da visualizzare.
Un amico, nel post precedente mi suggeriva di usare un Data Module, però non
è possibile con l'oggetto derivato da TWinControl.
Sto diventando matto nell'evitare che l'applicazione DOS perda il controllo
dell'esecuzione: alla fine della Console Application posso sempre forzare
l'applicazione DOS in primo piano, però ho un inter-regno nero di circa 2
secondi che fa decisamente schifo .... e che con tutte le altre console
application che ho fatto (sempre per lo stesso programma DOS) non ho, cioè
all'utente questi "salti mortali" rimangono trasparenti ... la differenza è
che tutte le altre applicazioni che ho realizzato non contenevano componenti
grafici (essenzialmente uso TPrinter).
Ciao
Andrea

 però non è possibile con l'oggetto derivato da TWinControl.
Prova a creare dinamicamente un TWinControl da usare come Owner/Parent
del controllo grafico che implementa le funzionalità che ti servono.


Certo, ma a questo punto mi conviene creare direttamente il mio controllo
passandogli nil nel Create anzichè creare un TWinControl mettendogli nil nel
suo create e usando come Owner del mio controllo ....
Posso sempre crearmi al volo la MainForm, settare ShowMainForm=FALSE ed
usare la MainForm come Owner di tutti miei controlli ...
Già provato, però non riesco ad impedire che l'applicazione Console faccia
perdere il controllo all'applicazione DOS che la lancia... non capisco
perchè visto che non visualizzo NULLA ... e non ci vedo nulla di diverso
dalle alte Console App che ho fatto e che non mi hanno MAI dato questo
problema ...
"Marco Breveglieri" <ma...@NOSPAMabls.it> ha scritto nel messaggio
news:0Ip%b.26040$gk.10...@news3.tin.it...


 piano il desktop ... come se ci fosse una finestra da visualizzare.
Cerco di indagare sul problema...
Se ho ben capito, hai un'applicazione DOS (Console) che lancia un'altra
applicazione (Console).
La seconda applicazione è di tua produzione...anche la prima lo è?
Hai verificato che la seconda applicazione, quella che procede alla
stampa, funzioni correttamente se non richiamata dall'applicazione
Console esterna, quella che vedi bloccarsi?
Come fa la prima applicazione Console a richiamare la seconda? Quali
metodi o funzioni usa?


 metodi o funzioni usa?
Usa una funzione del C Spawnl(), analoga a ShellExecute: Spawn() attende che
il processo chiamato termini e poi riporta il controllo al processo
chiamante.
Questa funzione "funziona" egregiamente e non mi ha mai dato problemi: il
problema (chiamiamolo così, ma è puramente estetico) è relativo
all'applicazione creata in Delphi.
Io temo sia dovuto alla presenza di componenti derivati da TWinControl ...

 TWinControl ...
A questo punto, se non lo hai già fatto, accantona la creazione di
un'applicazione Console e crea una applicazione Windows, magari
disabilitando la MainForm ed eseguendo tutto il codice relativo alla
stampa all'interno del blocco di codice che costituisce il programma
(quello nel file DPR, per intenderci).


Già fatto, già fatto.
Ho usato la MainForm per appoggiarci sopra i componenti però ... nada de
nada.
Io cedo le armi ...