Newsgroup: it.comp.lang.delphi
Titolo: Visualizzare componente personalizzato

Ciao a tutti,
ho creato un nuovo oggetto ereditando le proprietà di un TCustomPanel (A
proposito che differenze ci sono tra un TCustomPanel e un TPanel? ho usato
il primo perchè ho letto essere più consigliato per questo tipo di cose) e
aggiungendo i metodi per rilevare il passaggio e l'uscita del mouse dallo
stesso; niente di particolarmente difficile quindi (il pannello di espande e
di ritrae in base al mouse): Grazie al ng (google) per questo :p
Il mio problema è che dovrei metterci dentro (al "Panel personalizzato) un
po' di cose da ordinare in modo decente e "disegnando con il codice" (quindi
settando i valori a mano) è un po' scomodo oltre che lungo...
mi chiedevo se c'è un modo per visualizzare a design-time (quanto mi piace
questo termine :p) il nuovo "CustomPanel". (Devo "isolare" il codice e
metterlo come singolo componente (tipo quelli che dalla barra di strumenti
di delphi si trascinano nella form)? Se si mi spiegate come fare? Non l'ho
mai fatto (e penso si capisca :p)
Grazie ancora per il vostro impagabile supporto :)


Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)

 Ciao!
Ciao a te e grazie ancora :)

Ummm... ho fatto progressi :p
Mi sono scopiazzato un po' il TJvPanel (ho scoperto che aveva già quello che
mi serviva, ma vuoi mettere la soddifazione di usare una cosa modificata da
se? ^_^ - per la cronaca cmq sia non userò il jvpanel, anche perchè c'è
molto (troppo) in più di quello che mi serve...) delle JediVCL e ho messo
nel mio codice queste procedure (insieme ai relativi ed altri metodi nel
type):
procedure TInOutPanel.CMMouseEnter(var Msg: TMessage);
begin
  if not FOver then
  begin
    FSaved := Application.HintColor;
    // for D7...
    if csDesigning in ComponentState then
      Exit;
    Application.HintColor := FHintColor;
    FOver := True;
  end;
  if Assigned(FOnMouseEnter) then
    FOnMouseEnter(Self);
end;
procedure TInOutPanel.CMMouseLeave(var Msg: TMessage);
begin
  if FOver then
  begin
    Application.HintColor := FSaved;
    FOver := False;
  end;
  if Assigned(FOnMouseLeave) then
    FOnMouseLeave(Self);
end;
Con "property" ero riuscito a far visualizzare i metodi tra gli eventi a
designtime, ma scrivendo il codice all'interno delle relative procedure non
succedeva nulla. Usando questo codice tutto funziona alla grande, ma non ho
idea del perchè (non mi sono messo a studiare questo codice ancora, ma
vedendo alcune cose dubito riuscirò a comprenderlo a fondo).
Se c'è cmq un'altra via (più facile e comprensibile) è ben accetta ^_^
In secondo luogo mi sono reso conto di aver scritto una baggianata riguardo
al fatto che dovevo disinstallare e reinstallare il componente
personalizzato ad ogni modifica, in quando non sapevo (l'ho scoperto per
intuizione) che basta modificare il .pas del componente per ottenere le
modifiche... ero convinto in precedenza che il .pas una volta compilato
dall'installer non venisse più letto :)
Meglio così e grazie ancora per l'aiuto datomi!
Ciao

Rieccomi...
Ho un altro problema ora... quando passo sopra ad un oggetto contenuto nel
Pannello presonalizzato il prog mi rileva come se fossi uscito dal pannello
stesso attivandomi quindi la OnMouseLeave...
Questo mi accade con tutto, ma con bottoni/form di testo c'è solo uno
sfarfallio, con un combobox invece c'è proprio la scomparsa del pannello!
Resta visibile solo la tendina del menu "abbassata".
Questa volta non so come risolverla...
Grazie dell'attenzione :)

 Questa volta non so come risolverla...
Ho seguito a fatica i tuoi progressi e riassumendo posso dirti che i
metodi preposti alla gestione dei messaggi (a cui viene aggiunta la
clausola "message") non possono contenere altri parametri, ma solo
quello che contiene il messaggio ricevuto.
Ho realizzato pannelli simili ai tuoi, ma con la differenza che la
compressione e l'espansione avvengono tramite un clic del mouse
all'interno di un'apposita area predisposta, esclusa dall'area client
del controllo (quindi tutti i controlli allineati al client occupano
l'area senza ricoprire la barra), pertanto quando avviene il MouseLeave,
sono certo che il mouse non sia più posizionato sulla barra del titolo,
quindi posso ridisegnare il controllo visualizzando il pulsante
«spento».


 il pulsante «spento».
Quindi non posso gestire tutto dal primo (ed unico) pannello, ma devo
trovare delle specie di scappatoie...
Ora per esempio ho messo alla base del pannello un secondo pannello. Il
primo gestisce il MouseEnter (e quindi "apre"), il secondo gestisce il
MouseLeave (e quindi "chiude" il primo pannello)
Grazie ancora per la pazienza e le disponibilità,
spesso (forse purtroppo) si impara più sul campo e chiedendo così che non
all'università...
Ciao

 non all'università...
Non si può generalizzare, ma credo sia normale che l'Università dia la
preparazione necessaria...poi, è ovvio che casi particolari come questo
emergano nell'applicazione pratica ed effettiva.
Ciao!


 Ciao!