Newsgroup: it.comp.lang.delphi
Titolo: Submenu popup custom

Ciao a tutti,
avrei la necessità di visualizzare un submenu con sfondo e bottoni
personalizzati. Mi spiego, attualmente ho una toolbar con al suo
interno vari bottoni toolbutton che dovrebbero aprirmi una finestra
popup contenente il sottomenu; il problema nasche dalla
personalizzazione della popup ovvero avrei la necessità di cambiare
l'intero background che di default è grigio e i vari colori di sfondo
dei bottoni. Esiste un modo per ottenere questo risultato? E'
possibile utilizzare un form in sostituzione del popup? In realtà non
so nemmeno io quale sia la soluzione migliore, ogni consiglio sarà
prezioso.
Grazie

Piccolo aggiornamento:
ho creato un form SDI in sostituzione del classico popup e credo che
la via sia quella corretta ma qui nasce il problema della chiusura con
la gestione degli eventi per "emulare" la classica finestra popup. Mi
sono documentato un po e la risposta a questo problema è la gestione
dell'evento OnDeactivate che però viene scatenato solo nelle form MDI
per cui sto ancora cercando di creare una procedura simile che possa
fare una cosa analoga per le SDI; su alcuni siti ho letto
dell'utilizzo dello screen.OnActiveControlChange ma ancora non sono
riuscito a capirne appieno il funzionamento. Se qualcuno ha qualche
indicazione da darmi ben venga.
Grazie

 E' possibile utilizzare un form in sostituzione del popup?
S�. Ma non credo sia opportuno "inframezzare" la gestione del popup con 
il Form: togli il popup e visualizza direttamente il Form quando 
l'utente fa clic sul pulsante specifico.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)


Si la soluzione più semplice è visualizzare il form al click del
pulsante ma l'effetto visivo non è piaciuto al cliente e quindi devo
per forza di cose poterlo gestire come il classico popup. Alternativa
al form è usare un TPanel che sostanzialmente farebbe lo stesso lavoro
senza problemi anche se forse il form è più personalizzabile e
permette di creare un fadein in visualizzazione che forse il TPanel
non ha; la gestione dell'evento per la chiusura del TPanel o del form
rimarrebbe comunque e ancora non ho trovato la corretta via per
gestirlo al meglio.
Metto un po di codice per chiarezza così nel caso potete darmi una
mano a risolvere.
Nel mio form principale dichiaro come public la procedure per rilevare
messaggi di sistema nel caso in cui viene rilevato un cambio focus
all'interno della applicazione:
procedure CMfocuschanged(var message: TCMfocuschanged); message
CM_Focuschanged;
e qui la sua implementazione:
procedure TFormMain.CMFocusChanged(var Message: TCMFocusChanged);
var
i:integer;
begin
  if NOT(message.sender is TFormSubMenu) AND (FormSubMenu.Showing)
then
  begin
    ShowMessage('FocusChanged');
  end;
end;
In questo modo però non gestisce gli eventi come vorrei, ovvero far in
modo che al click del mouse (quindi in teoria un cambio di focus) se
eseguito in un'area esterna al FormSubMenu quest'ultima deve
chiudersi, emulando così il comportamento di un popup. Se
funzionasse...
Purtroppo il focus non si sta rivelando la via corretta come invece
pensavo perchè se clicco semplicemente su un TPanel del form
principale il focus non cambia mentre in teoria il form contenente il
submenu a questo punto dovrebbe chiudersi. Se clicco invece su un
TEdit del form principale funziona correttamente ma se ad esempio
clicco sulla toolbar contenente il menu principale o direttamente una
voce di menu (toolbutton) il focus non cambia impedendo nuovamente la
chiusura del submenu.
Sapete dirmi a questo punto su quale spigolo posso sbattere la testa?
Grazie
P.S.
spero sia tutto chiaro.

Per chiarezza, non utilizzo alcuna popup e il FormSubMenu è un form
che teoricamente dovrebbe comportarsi come il classico popup.
Il custom drawing non va bene per le mie esigenze perchè se non ho
fatto ca@@ate io non è possibile modificare il background dell'intera
popup ma solo i singoli item creando una disomogeneità grafica tra i
vari oggetti che compongono il form risultando differenti tra loro.
Punto chiave del progetto è realizzare un'applicazione che sia anche
graficamente gradevole..marketing docet.

 per forza di cose poterlo gestire come il classico popup.
Chiaramente, il Form non va visualizzato al centro dello schermo, ma 
occorre posizionarlo al di sotto del pulsante, facendolo apparire senza 
la barra del titolo e senza i bordi ridimensionabili, cioè sfruttandolo 
in modo da farlo apparire come un'estensione naturale del menu, e non 
come una classica finestra.


   (
http://www.marco.breveglieri.name
)
Infatti è quello che ho fatto ma il problema è che il SubMenuForm
rimane aperto finchè non clicchi uno dei bottoni al suo interno e
quindi nel caso in cui l'utente decida di non cliccarci rimane attivo.
In pratica ho creato il SubMenuForm senza bordi, ho impostato come
parent il form principale e l'ho posiziono sotto al bottone che l'ha
richiamato ma devo anche dare la possibilità di chiudere il
SubMenuForm se l'utente clicca su un punto qualsiasi del form
principale che poi è lo stesso principio del popup. E' su questa
procedura che sto sclerando. Sto cercando di trovare una soluzione
utilizzando i messaggi di windows ma ancora non ho trovato quello che
fa al caso mio. WM_KILLFOCUS non si è rivelato efficace perchè
l'evento viene lanciato se cambia il focus dal SubMenuForm a un altro
componente che gestisce il focus (label, edit ecc.) ma se clicco su un
TPanel o un'immagine l'evento non si scatena. Alternativa a tutto è
lasciare un bottone all'interno del SubMenuForm che possa chiudere la
finestra in caso di necessità ma non è una bella soluzione.

 pulsante ma l'effetto visivo non è piaciuto al cliente 
fammi conoscere sto cliente che vuole i popup con sfondo arlecchinato e
poi si mette a disquisire sugli effetti visivi.. :///
Ma con chi caspita stai lavorando? :DDD
Ale


Guarda, è un progetto da mandare negli USA e il cliente in realtà è
solo un nostro collaboratore che segue la parte marketing. Di software
non ci capisce una mazza ma le idee sono buone ed effettivamente di
solito la parte grafica nei software viene messa un po da parte
privilegiando giustamente l'usabilità e le funzionalità del programma;
non so se concordi con me ma personalmente mi rattristano un po sti
programmi tutti grigi e tutti uguali e anche quelli con colori
gradevoli e di bell'aspetto ma che poi usandolo ti trovi i menu o
parti di altri oggetti con colori che non centrano nulla col resto del
software. Un pugno in un occhio. L'applicazione che sto sviluppando ha
tra i vari obbiettivi anche una presentazione gradevole a livello
visivo il che non significa farlo "arlecchinato" o pieno di inutili
fronzoli solo per fare scena ma seguire i colori del Logo per dare una
certa continuità al progetto. Il logo ovviamente non è grigio
purtroppo e quindi devo cercare di cambiare l'aspetto di quei
componenti che utilizzano i colori impostati dal tema di win. Il
problema principale è che il software è realizzato per una società che
nel suo ambiente è conosciuta parecchio e a livello mondiale da tanti
anni ma non tanto per il nome quanto appunto per il logo (nonostante
sia obbiettivamente repellente) e da qui nasce l'esigenza di dover
creare una sorta di "family feeling" nel software puntando quindi
all'immagine. I problemi così sono 3: sviluppare l'applicazione
funzionante, creare una grafica adatta e trovare il modo di ricreare
quei componenti che utilizzano i temi di win per poterli customizzare.
Se inoltre vogliamo rendere più gradevole tutto l'insieme, compreso
l'obrobrio del logo per farlo digerire meglio all'occhio, allora i
problemi diventano 4. Yaaaahooooooooo!!!
Comunque ho risolto in parte il problema submenu ma ancora non è come
lo vorrei io. Il WM_KILLFOCUS non svolge completamente il compito che
invece mi aspettavo. Se avete consigli sono tutto orecchie.
Grazie
Andrea


.. io ci provo :)
http://delphi.about.com/od/vclusing/a/owner_drawing.htm
G.

 componenti che utilizzano i colori impostati dal tema di win.
Non è che, date le premesse, pur non conoscendo a fondo il budget del 
progetto, sia meglio acquistare e impiegare componenti di terze parti, 
ad esempio le "skin" incluse nei package VCL creati da DevExpress?



Ho dato un'occhiata alle skin anche di altri produttori e sono molto
interessanti ma mi viene il dubbio che non siano customizzabili.
Utilizzo diversi componenti che hanno un loro tema ma non sono
customizzabili più di tanto e per customizzare intendo la modifica dei
colori utilizzati. Devo fare delle prove con le versioni trial e nel
caso sia una valida alternativa rispetto a quanto stiamo sviluppando
si può anche pensare di fare l'acquisto.
Grazie dell'info, molto utile.

 Grazie dell'info, molto utile.
Io ho usato in passato VCLSkin ed era fornito anche l'editor delle skin 
oltre che decine e decine di temi.
ciao
-- 
morde
D5,D6,D7
QT 4.7.0 - MingW- QT Creator 2.1


Grazie, darò un'occhiata anche a lui. Immagino siano a pagamento ma
non dovrebbe essere un problema questo, se ne vale la pena posso anche
proporre l'acquisto.

Ho fatto una ricerca veloce online e di skin builder ce ne sono
parecchi; mi sembrano tutti validi e sullo stesso piano ma non avendo
esperienza in merito non ho le competenze adatte per fare le
valutazioni del caso.
Sapete indicarmi qualche skin builder valido che avete già avuto modo
di provare e utilizzare? Pro e contro del prodotto?
Grazie mille