Italian community of Lazarus and Free Pascal
Programmazione => LCL => Topic aperto da: mmxngg - Febbraio 16, 2012, 04:31:15 pm
-
L'idea è di visualizzare un form ma lasciare il focus sul chiamante. Non ho visto paremetri particolari quindi ho provato con ShowWindow(Form.Handle, SW_SHOWNOACTIVATE) prima di renderlo visibile ma il risultato non è proprio l'ideale visto che non si vedono i componenti all'interno! Un metodo alternativo e funzionante (che non sia il .SetFocus sul chiamante dopo la visualizzazione) ?
-
scusa la domanda. perchè non vuoi usare il setfocus?
-
Perchè nel momento in cui mostro l'altra finestra (FromStyle = fsStayOnTop) questa prende il focus e ridarlo immediatamente a quella principale crea uno sgradevole sfarfallio a video. Non è certo un problemone ma se c'era un metodo per evitarlo era meglio.
A questo punto mi viene una domanda alternativa che potrebbe funzionare. C'è un modo per bloccare i messaggi da processare ? In sostanza il contrario di Application.ProcessMessages.
-
Non ne ho mai avuto bisogno quindi ho aperto un 3d apposito sul forum ufficiale
http://www.lazarus.freepascal.org/index.php/topic,16071.msg86977/topicseen.html#new
vediamo cosa riusciamo a trovare al riguardo.
-
Visto grazie. Hanno suggerito Sleep (che non ho avuto ancora il tempo di provare), ma ho l'impressione che questo sospenda i messaggi da processare ma non li scarti (in pratica rimangono in coda e verrano comunque eseguiti).
-
Penso anche io. Però veramente non capisco l'utilità di aprire una finestra e poi non usarla! Tantovale aprirla in modo che sia invisibile!
-
Ti passo direttamente l'esempio. Per creare il caso basta andare sul frame di destra, cliccare con il destro e dal menù scegliere prima Pixel e successivamente Box (sono le uniche opzioni che hanno una finestra per ora). In fase di aggiunta va benissimo che la finestra abbia il focus ma quando riseleziono l'oggetto (cliccando quindi su quelli creati e non dal menu) vorrei che venisse solo mostrata ma senza focus.
http://www.wupload.it/file/2664966787/VRT.rar (http://www.wupload.it/file/2664966787/VRT.rar)
P.S.
Se hai un antivirus particolarmente invasivo e stupido (quello che ho in ufficio) può segnalarti un alert sulla DLL per via di come vengono effettuate le chiamare alle routine.
P.P.S.
Se Lazarus avesse i float pannel (in stile Visual Studio) farei volentieri a meno delle finestre :-[
-
Capito, io ho fatto una prova velocissima dell'uso del SetFocus sulla form principale. Ma non vedo sfarfallii. Spiegami come funziona quell'oggetto di Visual Studio!
-
Non ne ho provato il comportamento, ma ho trovato questo che forse può servire:
http://www.delphipages.com/forum/showpost.php?p=59129&postcount=11 (http://www.delphipages.com/forum/showpost.php?p=59129&postcount=11)
-
Fa finta che siano dei frame solo che hanno la possibilità di essere spostati all'interno della finestra (sopra, sotto o sotto di un altro pannello ecc. ecc.) o in alternativa si possono "staccare" dalla finestra principale e diventare a loro volta delle finestre. Son comodi perchè permettono di avere un'interfaccia personalizzata. Inizialmente, al posto della finestra, avevo usato un frame e il page control ma quest'ultimo è solo bianco e non c'è modo di personalizzarlo (o meglio...il modo c'è ma si perdono le impostazioni di default degli altri componenti rispetto al tema di windows)...insomma veniva uno schifo quindi...finestra esterna.
-
Hai provato a guardare se qui, tra le varie cose disponibili c'è quello che cerchi?! Magari qualcuno lo ha fatto: http://wiki.lazarus.freepascal.org/Components_and_Code_examples
Fammi sapere
-
Allora :
- L'elenco dei componenti aggiuntivi l'avevo già controllato. Li di carino c'è Spook's Panel e BGRAControls ma null'altro. Altra gente aveva chiesto (sul forum principale) la possibilità di aggiungere altri componenti (credo che il Delphi li abbia) ma non c'è stata risposta.
- Provo a modificare quell'esempio li per vedere se riesco a bloccare il focus (senza creare un TForm in più magari altrimenti dove ricompilare l'IDE).
-
Niente, il form prendre sempre e comunque il focus. Qualcosa mi dice che dovrei crearmi un componente ad hoc per cambiarne il comportamento ma non ne vale la pena...ci posso convivere :)
-
Già credo anche io! :)