Asunto: Mostrar botón en campo MEMO de DBGrid en Delphi
Tengo un programa de facturación hecho en Delphi, tengo un DBGrid en el que no añado las columnas en tiempo de diseño, sino que dejo que se añadan automáticamente en tiempo de ejecución. Pero ahora me encuentro con un pequeño problema, quiero que en los campos de tipo de datos MEMO aparezca un botón para que el usuario pueda ver el contenido en otra ventana. El problema es que si no agrego las columnas en tiempo de diseño para indicar que en algunas aparezca en ButtonStyle "cbsEllipsis" ¿cómo se puede hacer esto?
Publicado:
Jue Ene 08, 2009 2:38 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Mostrar botón en campo MEMO de DBGrid en Delphi
Anuncios
varios escribió:
Tengo un programa de facturación hecho en Delphi, tengo un DBGrid en el que no añado las columnas en tiempo de diseño, sino que dejo que se añadan automáticamente en tiempo de ejecución. Pero ahora me encuentro con un pequeño problema, quiero que en los campos de tipo de datos MEMO aparezca un botón para que el usuario pueda ver el contenido en otra ventana. El problema es que si no agrego las columnas en tiempo de diseño para indicar que en algunas aparezca en ButtonStyle "cbsEllipsis" ¿cómo se puede hacer esto?
Puedes poner el siguiente código Delphi en la propiedad OnDrawColumnCell:
Código:
procedure TformMenuPrincipal.gridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
try
if Column.Field.DataType = ftmemo then
Column.ButtonStyle := cbsEllipsis;
except
end;
end;
Con esto conseguiremos que cuando la columna sea de tipo "ftmemo", con el código Column.ButtonStyle := cbsEllipsis; le indicamos que ponga un botón con tres puntos "...".
Nota: "grid" es el nombre que le hemos dado al TDBGrid de Delphi.
Ultima edición por alonsojpd el Jue Ene 08, 2009 2:54 pm, editado 1 vez
Publicado:
Jue Ene 08, 2009 2:43 pm
varios Magnífico usuario
Registrado: Oct 10, 2006 Mensajes: 2092
Asunto: Re: Mostrar botón en campo MEMO de DBGrid en Delphi
Anuncios
alonsojpd escribió:
Puedes poner el siguiente código Delphi en la propiedad OnDrawColumnCell:
Código:
procedure TformMenuPrincipal.gridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
try
if Column.Field.DataType = ftmemo then
Column.ButtonStyle := cbsEllipsis;
except
end;
end;
Con esto conseguiremos que cuando la columna sea de tipo "ftmemo", con el código Column.ButtonStyle := cbsEllipsis; le indicamos que ponga un botón con tres puntos "...".
Ok, funciona estupendamente, ahora tengo la otra duda ¿cómo muestro en otra ventana el contenido del campo MEMO donde el usuario ha pulsado el botón con los tres puntos? ¿cómo puedo saber en qué campo está el usuario?
Publicado:
Jue Ene 08, 2009 2:46 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Mostrar botón en campo MEMO de DBGrid en Delphi
Anuncios
varios escribió:
Ok, funciona estupendamente, ahora tengo la otra duda ¿cómo muestro en otra ventana el contenido del campo MEMO donde el usuario ha pulsado el botón con los tres puntos? ¿cómo puedo saber en qué campo está el usuario?
1. Añade un nuevo formulario a tu aplicación, llámalo, por ejemplo formMostrarMemo, añade a este formulario un componente de tipo TMemo, llámalo, por ejemplo, txtMemo.
2. En el formulario donde tienes el TDBGrid, agrega al evento EditButtonClick del TDBGrid el siguiente código:
Código:
procedure TformMenuPrincipal.gridEditButtonClick(Sender: TObject);
var
f : TForm;
begin
F := application.findcomponent('formMostrarMemo') as TForm;
if Assigned(F) then
begin
formMostrarMemo.txtMemo.Text := grid.SelectedField.AsString;
f.showmodal;
end
else
begin
application.createform(tformMostrarMemo, formMostrarMemo);
formMostrarMemo.txtMemo.Text := grid.SelectedField.AsString;
formMostrarMemo.showmodal;
end;
end;
Con esto conseguirás que cuando el usuario pulse el botón ... en un campo de tipo MEMO del TDBGrid muestre la ventana formMostrarmemo y con "grid.SelectedField.asString" le asignará el valor del MEMO actual.
Nota: en toda esta explicación "grid" es el nombre que le hemos dado al TDBGrid.
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A