Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   DbLookUpCombobox (https://www.clubdelphi.com/foros/showthread.php?t=71074)

Caminante 27-11-2010 19:13:56

DbLookUpCombobox
 
Hola a todos los del foro. Aca de vuelta con otra duda.
Trabajo con Interbase y Delphi7
Estoy haciendo practicas con un programa y en la ventana en la que registro una factura tengo un JvDBgrid en donde mediante un cuadro de dialogo selecciono un producto, despues de seleccionado el producto en las demas columnas se muestra la unidad de medida del producto y el precio unitario.
Mi duda esta en que me piden que la unidad de medida pueda ser modificada por el usuario digamos que esta seleccionada la opcion KG (kilos) pero si sobre ese campo presiono la tecla "U" cambia a Unidades (por ejemplo).
las unidades de medida estan almacenadas en otra tabla asi que pense en utilizar en DBlookupcombobox o jvDBlookupcombobox en mi caso; pero su comportamiento no es el que necesito ya que me obliga a desplegar la lista y seleccionar la opcion en vez de responder al teclado de la forma q describi. No se si alguien sabe de algun componente o alguna otra manera de realizar lo que necesito.
De antemano muchas gracias...

ecfisa 27-11-2010 20:41:53

Hola Caminante.

Si queres hacer verificar si se presionó la letra 'U' o 'u', se complica ya que cuando la presiones, el DBGrid va a entrar en modo edición. ('u' es una letra más...).
Más fácil me parece detectar por ejemplo la combinación 'Ctrl+U'.
Lo podés hacer hacer así:
Código Delphi [-]
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((ssCtrl in Shift) and (Lo(Key) in[Ord('U'),Ord('u')]))and
    (DBGrid1.SelectedField.FullName = 'Nombre_del_campo')  then
  begin
    ...
    // CAMBIAR LAS UNIDADES
    ...
  end;
end;

Saludos. :)

Caminante 27-11-2010 21:12:38

Dblookupcombobox
 
Gracias por responder.
Bueno lo que yo necesito es que al presionar una tecla al estar situado en el JVdblookupcombobox se seleccione la unidad de medida mas parecida (Busqueda incremental). mi problema es que al estar el control dentro del JvDBgrid no me permite hacerlo sino que tengo que desplegar la lista con el mouse y lo que yo necesito es que el elemento se seleccione al presionar una tecla. En un combobox normal con la opcion Style a csDropDownList si puedo hacerlo. Al presionar una tecla se selecciona el item que inicia con dicha letra. Necesito realizar lo mismo pero en un JvDbLookupCombobox.
Gracias

ecfisa 27-11-2010 23:56:37

Hola Caminante.
Ahora entiendo lo que buscas.
Podrías utilizar un ComboBox insertándolo en el campo correspondiente de la grilla.
No uso el JVdblookupcombobox, pero esto funciona correctamente en un TDBGrid, probá si te funciona con ese componente

Código Delphi [-]
...
interface
procedure TForm1.FormShow(Sender: TObject);
begin
  ComboBox1.Clear;
  ComboBox1.Items.Add('Unidades');
  ComboBox1.Items.Add('Kilogramos');
  ComboBox1.Style:= csDropDownList; // o el estilo que quieras
  ComboBox1.Visible:= False;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (gdFocused in State)and(Column.Field.FieldName = 'Campo_de_Unidades') then
  begin
    ComboBox1.Left := Rect.Left + DBGrid1.Left + 2;
    ComboBox1.Top := Rect.Top + DBGrid1.top + 2;
    ComboBox1.Width := Rect.Right - Rect.Left;
    ComboBox1.Height := Rect.Bottom - Rect.Top;
    ComboBox1.Visible := True;
  end;
end;

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
   if DBGrid1.SelectedField.FieldName = 'Campo_de_Unidades' then
    ComboBox1.Visible:= False;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Caption:= (Sender as TComboBox).Text;
  if (Sender as TComboBox).Text = 'Unidades' then
   // PASAR A UNIDADES
  else
   // PASAR A KILOGRAMO
end;

Ajusté los campos y la propiedad visible en el evento OnShow para mayor legibilidad, pero lo podrías asignar en tiempo de diseño.

Saludos. :)

Caminante 28-11-2010 00:27:19

Dblookupcombobox
 
Gracias por la respuesta voy a probarlo


La franja horaria es GMT +2. Ahora son las 08:29:32.

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