Italian community of Lazarus and Free Pascal

Programmazione => LCL => Topic aperto da: mmxngg - Febbraio 16, 2012, 04:31:15 pm

Titolo: Visualizzare un form senza focus
Inserito 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) ?
Titolo: Re:Visualizzare un form senza focus
Inserito da: xinyiman - Febbraio 16, 2012, 04:34:01 pm
scusa la domanda. perchè non vuoi usare il setfocus?
Titolo: Re:Visualizzare un form senza focus
Inserito da: mmxngg - Febbraio 17, 2012, 01:38:45 am
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.
Titolo: Re:Visualizzare un form senza focus
Inserito da: xinyiman - Febbraio 19, 2012, 11:57:22 am
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.
Titolo: Re:Visualizzare un form senza focus
Inserito da: mmxngg - Febbraio 20, 2012, 08:53:43 am
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).
Titolo: Re:Visualizzare un form senza focus
Inserito da: xinyiman - Febbraio 20, 2012, 09:08:45 am
Penso anche io. Però veramente non capisco l'utilità di aprire una finestra e poi non usarla! Tantovale aprirla in modo che sia invisibile!
Titolo: Re:Visualizzare un form senza focus
Inserito da: mmxngg - Febbraio 20, 2012, 09:31:24 am
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  :-[
Titolo: Re:Visualizzare un form senza focus
Inserito da: xinyiman - Febbraio 20, 2012, 09:56:47 am
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!
Titolo: Re:Visualizzare un form senza focus
Inserito da: Legolas - Febbraio 20, 2012, 10:04:29 am
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)
Titolo: Re:Visualizzare un form senza focus
Inserito da: mmxngg - Febbraio 20, 2012, 10:10:22 am
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.
Titolo: Re:Visualizzare un form senza focus
Inserito da: xinyiman - Febbraio 20, 2012, 10:25:57 am
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
Titolo: Re:Visualizzare un form senza focus
Inserito da: mmxngg - Febbraio 20, 2012, 10:54:55 am
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).
Titolo: Re:Visualizzare un form senza focus
Inserito da: mmxngg - Febbraio 21, 2012, 09:49:15 am
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  :)
Titolo: Re:Visualizzare un form senza focus
Inserito da: xinyiman - Febbraio 21, 2012, 10:16:14 am
Già credo anche io!  :)