Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   DBLookUpComboBox mostrar el siguiente KeyValue (https://www.clubdelphi.com/foros/showthread.php?t=92999)

Delphi01 16-04-2018 04:00:18

DBLookUpComboBox mostrar el siguiente KeyValue
 
Hola,
Tengo problema con DBLookUpComboBox .

Ejemplo:
Código Delphi [-]
DBLookUpComboBox1.KeyValue :='X' ;
el texto que muestra DBLookUpComboBox1 es 'X'

yo quiero un código para ir o mostrar el siguiente keyValue o el siguiente item de la lista de mi DBLookUpComboBox1.

Muchas Gracias .

ecfisa 16-04-2018 16:14:33

Hola.
Cita:

Empezado por Delphi01 (Mensaje 525693)
...
yo quiero un código para ir o mostrar el siguiente keyValue o el siguiente item de la lista de mi DBLookUpComboBox1.

Tendrías que accionar sobre el dataset asociado.
Código Delphi [-]
// DS: DataSet asociado - DBL: Combo - fldname: Nombre del campo - fldValue: valor buscado v.gr.: 'X'
procedure LookupComboLocateNext(DS: TDataSet; DBL: TDBLookupComboBox; const fldName, fldValue: string);
begin
  if DS.Locate(fldName, fldValue, []) then
  begin
    DS.Next;
    DBL.KeyValue := fldName;
  end;
end;

Ejemplo del uso:
Código Delphi [-]
...
  LookupComboLocateNext(tu_DataSet , tu_DBLookupComboBox, 'tu_FIELD_NAME', 'tu_FIELD_VALUE');

Saludos :)

Delphi01 16-04-2018 20:17:46

Cita:

Empezado por ecfisa (Mensaje 525700)
Hola.

Tendrías que accionar sobre el dataset asociado.
Código Delphi [-]// DS: DataSet asociado - DBL: Combo - fldname: Nombre del campo - fldValue: valor buscado v.gr.: 'X' procedure LookupComboLocateNext(DS: TDataSet; DBL: TDBLookupComboBox; const fldName, fldValue: string); begin if DS.Locate(fldName, fldValue, []) then begin DS.Next; DBL.KeyValue := fldName; end; end;


Ejemplo del uso:
Código Delphi [-]... LookupComboLocateNext(tu_DataSet , tu_DBLookupComboBox, 'tu_FIELD_NAME', 'tu_FIELD_VALUE');


Saludos :)

Hola!:) ecfisa, muy amable de tu parte maestro contestar mi pregunta tan rápido ^\||/.
Pero , yo no quiero localizar o buscar y despues hacer el next, sino yo tengo un texto seleccionado cualquier texto de los items de mi DBLookupCombox quiero pasar al siguiente y mostrarlo ,

DBLookupCombox no tiene el itemindex pero sí tiene la propiedad ListFieldIndex. se puede utilizar ListFieldIndex en mi caso ? Cómo será el código ?
Saludos cordiales .:)

ecfisa 16-04-2018 21:21:17

Hola Delphi01.

Cita:

Empezado por Delphi01 (Mensaje 525702)
DBLookupCombox no tiene el itemindex pero sí tiene la propiedad ListFieldIndex. se puede utilizar ListFieldIndex en mi caso ? Cómo será el código ?

En realidad ListFieldIndex sirve para especificar que campo de la propiedad ListField se va a usar para la búsqueda incremental y no veo como podría ayudarte en este caso.

Pero a ver si ahora entendí lo que buscas y te sirve de este modo:
Código Delphi [-]
procedure LookupComboNextItem(LCB: TDBLookupComboBox);
  procedure VKeyPress(const aKey: Word);
  var
    ti: TInput;
  begin
    ZeroMemory(@ti, SizeOf(ti));
    ti.Itype      := INPUT_KEYBOARD;
    ti.ki.wVk     := aKey;
    ti.ki.dwFlags := 0;
    SendInput(1, ti, SizeOf(ti));
  end;
begin
  LCB.DropDown;
  VKeyPress(VK_DOWN);
  VKeyPress(VK_RETURN);
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
  DBLookupComboBox1.SetFocus;
  LookupComboNextItem(DBLookupComboBox1);
end;
Sin embargo, el código solo simula el accionar de un usuario y no elude el echo de que el cursor del TDataSet asociado se desplace.

Saludos :)

Delphi01 16-04-2018 21:46:46

Cita:

Empezado por ecfisa (Mensaje 525704)
Hola Delphi01.


En realidad ListFieldIndex sirve para especificar que campo de la propiedad ListField se va a usar para la búsqueda incremental y no veo como podría ayudarte en este caso.

Pero a ver si ahora entendí lo que buscas y te sirve de este modo:
Código Delphi [-]
procedure LookupComboNextItem(LCB: TDBLookupComboBox);
  procedure VKeyPress(const aKey: Word);
  var
    ti: TInput;
  begin
    ZeroMemory(@ti, SizeOf(ti));
    ti.Itype      := INPUT_KEYBOARD;
    ti.ki.wVk     := aKey;
    ti.ki.dwFlags := 0;
    SendInput(1, ti, SizeOf(ti));
  end;
begin
  LCB.DropDown;
  VKeyPress(VK_DOWN);
  VKeyPress(VK_RETURN);
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
  DBLookupComboBox1.SetFocus;
  LookupComboNextItem(DBLookupComboBox1);
end;
Sin embargo, el código solo simula el accionar de un usuario y no elude el echo de que el cursor del TDataSet asociado se desplace.

Saludos :)

Hola otra vez :):
Muchas gracias ! ,
tengo el DBLookupComboBox con las lineas :
X1
x2
x3
x4...

yo he visto cuando escribo
DBLookupComboBox.keyvalue:='x1'; muestra 'X1'
y asi ..
DBLookupComboBox.keyvalue:='x2'; muestra 'X2'
DBLookupComboBox.keyvalue:='x1'; muestra 'X3'.......
eso quiere decir que el cursor de dataset se esta desplasando ?
yo no me importa si desplace o no lo importante cuando haga click en un button por ejemplo si esta mostrando 'X1' pasa amostrar 'X2' y asi ...next ...
saludos ..:)

ecfisa 16-04-2018 21:54:35

Hola.

Cita:

Empezado por Delphi01 (Mensaje 525705)
...
yo no me importa si desplace o no lo importante cuando haga click en un button por ejemplo si esta mostrando 'X1' pasa amostrar 'X2' y asi ...next ...
saludos ..:)

Entonces el código anterior hace exactament lo que buscas.

Si no te importan los desplazamientos, el siguiente método es una alternativa mas simple:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  DS: TDataSet;
begin
  DS := DBLookupComboBox1.ListSource.DataSet;
  DS.Next;
  DBLookupComboBox1.KeyValue := DS.FieldValues[DBLookupComboBox1.KeyField];
end;

Saludos :)

Delphi01 18-04-2018 03:53:06

Muchas Gracias maestro ecfisa :)^\||/ , me funcionó :D!!!, la verdad ,sin duda el mejor club Delphi .
saludos cordiales .


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

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