Newsgroup: it.comp.lang.delphi
Titolo: Ancora DBGrid con Bottone

Ho trovato sul web esempi a iosa per introdurre i più vari componenti nel 
DBGrid, ma non un bottone. Allora, ispirandomi a ciò che ho imparato dagli 
esempi visti con il mio poco sapere, ho provato da me. Nel test che ho 
fatto, il bottone viene disegnato nella colonna, ma il clic ha un 
comportamento che non voglio e cioè il bottone cliccato rimane pushed e si 
rialza solo premendo un altro bottone. Come si rimedia ? Vi mostro la parte 
della proc OnDraw che uso (il valore del campo non interessa):
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with Sender as TDBGrid do
  begin
     if Column.Field.DataType = ftBoolean then   // in effetti, una 
qualsiasi colonna andrebbe bene ...
     begin
       Canvas.FillRect(Rect);
       DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH);
    end;
 end;
end; 
 

 esempi visti con il mio poco sapere, ho provato da me.
 
 
 
Provare e' importante.
Il "poco sapere" lo si risolve documentandosi.
 
Hai gia visto questa pagina qua sotto?
 
http://msdn.microsoft.com/en-us/library/aa930489.aspx
 
 
 
A.
 

 rimane pushed e si rialza solo premendo un altro bottone. 
 
ma perchè volere a tutti i costi rendere esotica l'interfaccia utente
riempiendo di pulsanti una griglia? che utilità avrebbero rispetto ad
una più classica (e comprensibile) checkbox?
 
-- 
Alessandra
 
Credo che ci siano due tipi di persone al mondo: quelle che hanno
credenze mistiche, e quelle che non ce l'hanno. Questi ultimi credono
che la vita sia tutto ciò che abbiamo, e che dobbiamo godercela e
aiutare gli altri a godersela. Gli altri pensano che la vita futura sia
più importante di quella presente, e temo che faranno saltare in aria
il mondo - Harold Kroto, premio Nobel per la chimica del 1996

Il 12/02/2012 12.05, Stark ha scritto:
 
La property "ButtonStyle" = cbsEllipsis di TColumn non va bene? puoi 
gestirla attraverso l'evento OnEditbuttonClick della DBGrid.
 
Ciao.

 Alessandra
Non voglio renderla esotica. L'utente ha davanti un certo numero di items 
(le righe del DBGrid) e deve sceglierne uno solo sul quale scatenare una 
certa azione. Ecco perchè mi sembra più intuitivo un bottone, piuttosto che 
un checkBox che implicherebbe una possibile scelta multipla. Il bottone 
potrebbe anche essere esterno alla griglia, oppure potrebbe esserci un unico 
bottone, cliccabile dopo la scelta di una delle righe. Ma mi sembrava 
semplicemente più intuitivo unificare la scelta all'effetto..
Pensavo fosse facile. 
 

 unificare la scelta all'effetto..  Pensavo fosse facile.
 
mettilo esterno, sto pulsante, e non se ne parla più. Così ci puoi
inserire una caption opportuna, che faccia capire, anche, che è un
pulsante di azione rispetto al rigo selezionato.
La tua idea era quella di far apparire un pulsante sul rigo selezionato
della griglia, per confermare/fare qualcosa? mah.. mai vista una cosa
del genere, va contro gli standard comunemente accettati di usabilità.
Piuttosto, associa l'azione al doppio click sulla griglia, se non vuoi
far perdere tempo all'utente, oppure ad un hotkey.
 
-- 
Alessandra
 
Caro Gesù Bambino, ti ringrazio per aver esaudito i miei desideri
dell'anno scorso. Ti avevo chiesto di eliminare la fame nel mondo, ed
infatti quelli che avevano fame sono quasi tutti morti. - Giobbe Covatta

 ha scritto nel messaggio 
news:4f38f005$0$1377$4faf...@reader2.news.tin.it...

Non ci avevo pensato, forse perchè non è proprio quello che vorrei. Però ho 
provato subito. Sono andato sulla proprietà Columns del DBGrid, ho aggiunto 
le colonne e sulla prima di queste ho messo lo style cbsEllipsis, ma non 
funziona. C'è qualcos'altro che dovrei fare ? 
 

Provare e' importante.
Il "poco sapere" lo si risolve documentandosi.
 
Hai gia visto questa pagina qua sotto?
 
http://msdn.microsoft.com/en-us/library/aa930489.aspx
 
 
Si, č lě che ho trovato i parametri di DrawFrameControl. Li ho provati un pň 
tutti. 
 

 cbsEllipsis, ma non funziona. C'è qualcos'altro che dovrei fare ?
 
Non capisco cosa significa "non funziona" ;)
Il pulsante è visibile se ti trovi nella colonna e puoi premerlo come ti 
pare. Devi gestirlo tramite l'evento OnEditButtonClick della DBGrid.
 
Ciao.
 
dall'help:
Occurs when the user presses the ellipsis button in a grid column.
 
property OnEditButtonClick: TNotifyEvent;
 
Description
 
Write an OnEditButtonClick event handler to bring up an appropriate list 
or dialog when the user presses the ellipsis button in a grid cell. The 
OnEditButtonClick event handler can set the value of the field based on 
the user response to the list or dialog. Use the SelectedField property 
to access the TField component whose value should be set.

 Non capisco cosa significa "non funziona" ;)
 
Come sei buono! :-D
Io avrei scritto qualcosa di molto piu' pungente......
 
 
A.

 far perdere tempo all'utente, oppure ad un hotkey.
 
Sottoscrivo in toto!
 
-- 
Trasformare i sudditi in cittadini è miracolo che solo la scuola può 
compiere. (Piero Calamandrei)
 
 

Vi do retta. Mi pare sensato quello che dite e io mi ero solo intestardito 
con un problema tecnico.. Grazie a tutti 
 

Non era la gestione dell'evento che non capivo, ma non vedevo il pulsante, 
perchè non basta portarsi sulla cella con il mouse, ma occorre un secondo 
click. Scusa 
 


Puoi sempre selezionare dgAlwaysShowEditor tra le options del DBGrid.
 
Ciao.