Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   boton de comando en la celda de un DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=58022)

alquimista 05-07-2008 10:20:02

boton de comando en la celda de un DBGrid
 
Es posible añadir un boton que aparezca siempre(parecido al botón de los tres puntos (Elypsis) , pero que se pueda poner texto), en una celda de un DBgrid, que al pulsarlo actualice la celda con un valor de tipo string o similar?

Pero que aparezca en todas las celdas de una columna y este siempre visible.

coso 05-07-2008 10:47:50

hola. Debes usar el evento OnDrawColumnCell o el OnCellDraw

Código Delphi [-]
procedure T_lcli.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
        if (gdSelected in State) and (lowercase(Column.FieldName) = 'nombre')    then
        begin
               BitBtn1.Height := Rect.Bottom - Rect.Top;
               BitBtn1.Width  := BitBtn1.Height;

               BitBtn1.Left := Rect.Right - BitBtn1.Height;
               BitBtn1.Top  := Rect.Top;
        end;
end;

PD: este te lo pone en solo una celda. Necesitaras tantos bitbtns como celdas donde lo quieras, bien creados en tiempo de diseño, bien en tiempo de ejecucion

saludos

alquimista 05-07-2008 11:02:09

Gracias...
Para poner texto al boton como se haría?

No existe algún componente free que haga
eso?

Al pulsar el botón ¿se utiliza el mismo evento que el botón de 3 puntos?

Gracias

coso 05-07-2008 11:03:34

Bueno, es un BitBtn normal y corriente... le asignas el evento OnClick a lo que tu quieras y cambias la caption tambien conforme lo que quieras... saludos

alquimista 05-07-2008 11:26:20

Lo probare.Gracias por la pronta respuesta

alquimista 05-07-2008 17:16:48

No me funciona. No se que hago mal pero me reduce el DBgrid o algo parecido.

Por si no me he explicado, lo que pretendo es lo siguiente:
______________________________________
I___ID___I_____Columna_Tiempo_______I___
I____1___I___10:23___ I__Botón_Stop__ I___
I____2___I___12:21___ I__Botón_Stop__ I___

Que se muestre un botón en cada columna que haya (Botón Stop) y que al pulsar grabe en el campo , por ejemplo tiempo un valor de un reloj.

Gracias de antemano.

coso 05-07-2008 17:18:49

????? te reduce el dbgrid???

alquimista 05-07-2008 18:48:58

Bueno, parece que hace eso me deja un cuadradito o algo parecido al pinchar en la celda de tiempo, da la sensación que reduce el dbgrid..
He hecho un copy,paste cambiando el nombre de la columna por 'tiempo'
en el primer evento, el otro me dice que Tfield no es valido.

coso 05-07-2008 18:51:46

Creo que deberias entender el codigo. Lo que te he puesto es un ejemplo. Si miras la ayuda de delphi, el evento OnDrawColumnCell, te explicara para que sirve cada argumento, y podras asi adaptar el codigo a tus necesidades.

alquimista 05-07-2008 19:03:56

La verdad es que no entendía mucho el código.
Ok. Lo miraré con mas calma y veré si me vale.
Gracias... tengo un problema de poco tiempo ahora.
por eso me interesaba algo rápido.

alquimista 07-07-2008 10:14:24

No consigo hacerlo funcionar dentro de la columna.
No se si creo bien el componente.

BitBtn2:=TBitBtn.Create(Self);

No se si es correcto. También lo pongo enabled y visible a true
He mirado la ayuda pero no encuentro mucha cosas.
Rect me imagino que es el rectangulo de la columna??

Gracias...

tcp_ip_es 07-07-2008 11:47:03

Crea el botón en tiempo de diseño, colócalo donde quieras dentro del formulario. Luego en el evento onDrawColumnCell lo cambias de tamaño y posición a tu gusto. En el evento OnClick de ese mismo botón colocas el código que quieras.

Saludos, Tony

alquimista 07-07-2008 11:50:21

Ya empiezo a entender algo.

El ejemplo es para colocar un botón encima de la columna del DBGrid.
Yo pensaba que el botón pertenecía a la columna.

Lo que queria es un boton en cada celda.
Si hay n celdas con datos metidos un botón (visible) en cada una de las n celdas en las que pueda pulsar y al pulsar rellenar esa celda con un dato sacado de otro sitio. Por ejemplo una cadena de texto.

Aparte intentaba crear en runtime (seguramente bastante mal) un bitbtn y no me funcionaba.
El problema es que tengo que pinchar en la columna y aparece el botón.
pero como se la referencia de columna relativa y como interacciono para cambiar el dato de esa columna?

He estado buscando por ahí y no encuentro casi nada de botones en columna de DBGrid.

A ver si podeis ayudarme un poco mas, por favor
El problema es que no soy nada experto en Delphi.
Y por este foro parece que hay muchos super expertos.



Muchas gracias.

tcp_ip_es 07-07-2008 12:16:23

Yo tampoco soy muy experto ... pero te digo que en vez de utilizar un boton por celda yo utilizaría uno fuera del DBGrid. Y los cambios que quieras hacer sobre el registro seleccionado lo hagas en el evento OnClick de ese boton.

Para saber el registro que esta seleccionado simplemente tienes que ver donde esta el cursor del dataset que estes mostrando en el dbgrid, de manera que si por ejemplo quieres sacar un dato de un campo de ese dataset o modificarlo sería .....

Código:

if table1.state in [dsInsert,dsEdit] then
begin
 Table1.fieldbyname('Apellidos').asstring:='HERNANDEZ FERNANDEZ';
 Table1.post;
end;

Saludos, Tony

alquimista 07-07-2008 17:09:33

no depende de mi.

A efectos de insertar en la celda no requiere que primero se seleccione la celda y luego se pulse el botón.
Con un botón por celda es mucho más rápida la inserción de ese campo.

Gracias por la ayuda.


La franja horaria es GMT +2. Ahora son las 12:01:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi