Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-09-2016
carlosCalle carlosCalle is offline
Registrado
NULL
 
Registrado: sep 2016
Posts: 8
Poder: 0
carlosCalle Va por buen camino
DBgrid sin el foco pero resaltando una fila

hola a todos¡¡¡¡

espero que lean estas líneas........estoy tratando de hacer un Form que permita el ingreso de productos para hacer una venta.
la idea .. es .... usar un DBgrid enlazado a un dataset (uso Zeos con Mysql), mas abajo un TEdit, el cual debe tener el foco en todo momento, la idea es que este reciba los datos ingresados por un lector, pero en la grilla debe resaltar el ultimo registro ingresado y además al usar las teclas arriba y abajo se debe desplazar dentro de la grilla.... sin que pierda el foco el TEdit.

estoy usando Embarcadero® Delphi 10.1 Berlin (descarga gratuita) con win 7
Responder Con Cita
  #2  
Antiguo 17-09-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola carlosCalle, bienvenido a los foros de Club Delphi

Como es costumbre, te invitamos a leer nuestra guía de estilo

Según entiendo los requisitos que solicitas son:
  1. El Edit debe tener el foco en todo momento
  2. Cuando el Edit recibe datos estos deben añadirse a la tabla y el cursor quedar posicionado allí.
  3. Los usuarios deberán poder desplazarse por los registros con las teclas arriba/abajo.
Ejemplo de un modo en que podrías hacerlo:
Código Delphi [-]
...
interface

procedure TForm1.FormCreate(Sender: TObject);
begin
  el_Edit.TabOrder := 0;
  //  si hay otros controles, evitar el cambio de foco con Tab 
  // Ctrl1.TabStop := False;
  // Ctrl2...
  DBGrid1.Enabled := False; 
end;

// no saldrán del edit con el mouse
procedure TForm1.FormActivate(Sender: TObject);
var
  R : TRect;
begin
  R := el_Edit.BoundsRect;
  MapWindowPoints(Handle, 0, R, 2);
  ClipCursor(@R);
end;

// controlar la teclas presionadas
procedure TForm1.el_EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of
    VK_DOWN   : DataSet.Next;
    VK_UP     : DataSet.Prior;
    VK_RETURN : begin  // se reciben datos
                  DataSet.Append;
                  DataSet.FieldByName('Campo-para-el_Edit').Value := el_Edit.Text; //(o la conversión correspondiente)
                //DataSet.FieldByName...
                //...    
                  DataSet.Post;
                end;
     VK_ESCAPE : Close; // Salir
  end;
end;

// restaurar área del mouse
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ClipCursor(nil);
end;
La situación no me quedó del todo clara, por lo que no voy a sugerirte algún método alternativo para la acción.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 17-09-2016
carlosCalle carlosCalle is offline
Registrado
NULL
 
Registrado: sep 2016
Posts: 8
Poder: 0
carlosCalle Va por buen camino
gracias por reponder y por la bienvenida.....voy hacer las pruebas¡¡¡¡
Responder Con Cita
  #4  
Antiguo 17-09-2016
carlosCalle carlosCalle is offline
Registrado
NULL
 
Registrado: sep 2016
Posts: 8
Poder: 0
carlosCalle Va por buen camino
gracias ECFISA ..en parte esta bien...es lo que se quiere hacer....pero por dos pequeñas obsevaciones.
al hacer next o prior al dataset atravez del las teclas ...se logra el objetivo... pero el registro el cual se mueve el indice (no se si es la palabra tecnica) dentro del datase.....no se resalta en el dbgrid.....(es cuando dbgrid tiene el foco y la opcion dgRowSelect esta true,, por defecto toda la fila esta resaltada en azul).
lo otro es cuando tedit contiene algun dato......el | se mueve dentro de la cadena de caracteres (no es tan importante).

chao y gracias ante mano !!!!!!
Responder Con Cita
  #5  
Antiguo 18-09-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola carlosCalle.

A ver, fijate si te sirve con estos cambios:
Código Delphi [-]
...
interface

procedure TForm1.FormCreate(Sender: TObject);
begin
  elEdit.TabOrder := 0;
  // desactivar cambio de foco con Tab en otros controles.
  // foo_Ctrl1.TabStop := False;
  // ...
  DBGrid1.Enabled := False;
end;

// no van a salir del edit con el mouse...
procedure TForm1.FormActivate(Sender: TObject);
var
  R : TRect;
begin
  R := elEdit.BoundsRect;
  MapWindowPoints(Handle, 0, R, 2);
  ClipCursor(@R);
end;

// OnDrawColumnCell 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  gr: TDBGrid;
begin
  gr := TDBGrid(Sender);
  if gdSelected in State then
  begin
    gr.Canvas.Brush.Color := clBlue;
    gr.Canvas.Font.Color  := clWhite;
    gr.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;

// controlar que tecla se presionó
procedure TForm1.elEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of
    VK_DOWN   : begin
                  DataSet.Next;
                  Key := 0;
                end;
    VK_UP     : begin
                  DataSet.Prior;
                  Key := 0;
                end;
    VK_RETURN : begin  // recibe datos
                 DataSet.FieldByName('Campo-para-el_Edit').Value := el_Edit.Text; //(o la conversión correspondiente)
                //DataSet.FieldByName...
                //...    
                  DataSet.Post;
                end;
     VK_ESCAPE : Close; // Salir
  end;
end;

// restaurar área del mouse
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ClipCursor(nil);
end;
(recuerda que es un ejemplo y que seguramente tengas que adaptarlo)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 20-09-2016
carlosCalle carlosCalle is offline
Registrado
NULL
 
Registrado: sep 2016
Posts: 8
Poder: 0
carlosCalle Va por buen camino
genial resulto a la primera !!!!!!

te agradesco tu ayuda.......ahi te pido mas ayuda!!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
DBGRID ¿como seleccionar fila y obtener datos de la fila ? JXJ Varios 5 18-04-2017 02:50:14
Situar el foco de un dbgrid a una fila determinada Vales08 Varios 9 02-12-2011 23:17:00
tomar una fila de un DBGrid y traspasarlo a otro DBGrid micky mouse Varios 2 05-06-2008 16:24:18
TEdit con foco pero sin cursor Zubat OOP 1 13-06-2007 16:58:04
TEdit selecciona todo al recibir el foco pero se pierde con el click Sirkius Varios 4 29-08-2005 11:02:33


La franja horaria es GMT +2. Ahora son las 05:42:40.


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
Copyright 1996-2007 Club Delphi