Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DBgrid y PopupMenu (https://www.clubdelphi.com/foros/showthread.php?t=74814)

gsilvei 12-07-2011 23:16:49

DBgrid y PopupMenu
 
Hola a todos,
Estoy trabajando en un Form con un DBGrid que lee informaciones de una tabla firebird,
y un componente PopupMenu con 2 opciones (Seleccionar, No Seleccionar),
y estoy necesitando que quando clico con el boton derecho del mouse, mi opcion "Seleccionar", cambie el color o colocar Enabled a una linea de registro de mi DBGrid,
agradeceria mucho si alguien me pudiera dar algun ejemplo de como puedo resolver,
y que mantenga esas alteraciones si cierro y vuelvo abrir el form.
Saludos

ecfisa 13-07-2011 00:20:18

Hola gsilvei.

La verdad es que no sé si entiendo lo que buscas hacer. Pero si te interpreté bién, este código te marcará o desmarcará la fila actual del DBGrid de acuerdo a la opción que elijas en el PopupMenu:
Código Delphi [-]
...
procedure TForm1.MenuItemMarcarClick(Sender: TObject);
begin
  DBGrid1.Options:= DBGrid1.Options + [dgRowSelect]
end;

procedure TForm1.MenuItemDesmarcarClick(Sender: TObject);
begin
   DBGrid1.Options:= DBGrid1.Options - [dgRowSelect]
end;
...

Saludos.

gsilvei 13-07-2011 00:27:11

Hola ecfisa,
voy a probarlo,
gracias por el momento

gsilvei 13-07-2011 01:09:25

Hola ecfisa,
Queria alguna coisa asi:
Código Delphi [-]
procedure TFormPrincipal.Selecionar1Click(Sender: TObject);
var
  Rect: TRect;
  Field: TField;
  State: TGridDrawState;
begin
if gdFocused in State then
with (Sender as TDBGrid).Canvas do
begin
Brush.Color:=clRed;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, Field.AsString);
end;
end;
Saludos

ecfisa 13-07-2011 01:57:16

Hola gsilvei.

Sigo sin tener en claro la finalidad de esa 'Selección', ya que la misma sólo permanece hasta que cambies de línea.

Pero bueno, esto cambia el color de la línea seleccionada a rojo con letras blancas hasta que se haga click en el MenuItem 'No seleccionar':

Código Delphi [-]
...
procedure TForm1.FormShow(Sender: TObject);
begin
  FSelec:= False;  // Variable privada de tipo Boolean
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
   if (gdSelected in State) and FSelec then
     DBGrid1.Canvas.Brush.Color:= clRed;
  DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;

procedure TForm1.MenuItemSeleccionadoClick(Sender: TObject);
begin
  DBGrid1.Options:= DBGrid1.Options + [dgRowSelect];
  FSelec:= True;
  DBGrid1.Invalidate;
end;

procedure TForm1.MenuItemNoseleccionadoClick(Sender: TObject);
begin
  DBGrid1.Options:= DBGrid1.Options - [dgRowSelect];
  FSelec:= False;
  DBGrid1.Invalidate;
end;
...

Saludos.

gsilvei 13-07-2011 02:00:59

Hola ecfisa,
tengo un cliente que quiere en el dbgrid hacer clic con el boton derecho del mouse y en el popupmenu tenga esas 2 opciones de seleccionar y no seleccionar
marcar los registros del dbgrid para recordar que estan pendientes.
Saludos

ecfisa 13-07-2011 04:27:43

Hola gsilvei.

Para hacer eso necesitarías contar con un campo bivalente a ese efecto, es decir, para que tu cliente lo marque como pendiente.
De ese modo podrías evaluar el valor del campo en el evento OnDrawColumnCell y así pintar del color que gustes aquellas filas que cumplan esa condición.

saludos.

jafera 13-07-2011 09:48:40

Yo tambien me inclino con la opcion de Ecfisa, es más yo uso este sistema en un grid donde si el valor de un campo es S lo deja en blanco y si es N lo pinta en color.

Tal y como comenta Ecfisa necesitas un valor que se guarde en la tabla, lo puedes mostrar o no en el grid, pero si no tienes este valor de referencia en cuanto salgas del grid y vuelvas a entrar habrán desaparecido todos lo colores y formatos asignados.

Saludos


La franja horaria es GMT +2. Ahora son las 02:09:09.

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