Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Complicado con un DBLookupComboBox... (https://www.clubdelphi.com/foros/showthread.php?t=14397)

nicolasdom 19-09-2004 21:29:07

Complicado con un DBLookupComboBox...
 
Hola, gracias por resolverme ya 1000 dudas... Ahora estoy con algo que me tiene mal :rolleyes: !!!

Tengo Interbase, me conecto con un IBConnection le puse un Transaction y desues tengo un IBQuery que va a un DataSource y el "BENDITO" DBLookupComboBox... El problema que tengo es que en este no puedo escribir y que de esta forma me vaya completando o guiando a traves del Combo. Es decir... veo el listado de la base pero no me deja escribir nada en el DBLookupComboBox, solo puedo seleccionar con el mouse o el teclado. Me explico? lo que quiero es que el usuario vaya escribiendo y se vaya completando... Va!!! como funciona un combo normal. Pero a este no le puedo encontrar la vuelta... Quien me puede ayudar? MIL GRACIAS...

Delfino 19-09-2004 21:55:07

La suite JVCL tiene componentes q te dan esta posibilidad, entre ellos el TJvEditLookup y el TjvDBLookupCombo..

nicolasdom 19-09-2004 22:19:21

Ahora miro... pero me parece que no es un problema de componentes... Al menos es mi sospecha... Me falata configurar algo, cambiar un true, un false.. ALGO que no SE!!! GRGR:(

buitrago 20-09-2004 04:49:46

No es problema de componentes
 
El de Delphi, no lo permite, es un componente para VER y SELECCIONAR, no para escribir, para eso estan otros, que ya te lo mencionaron, Delphi no te dá el final del camino, algo has de programar, no crees?

Saludos

Fer

Lepe 20-09-2004 10:10:13

Si no es viable instalar la JVCL puedes usar una funcion de mi autoría, que autocompleta el campo que quieras en un derivado de TcustomEdit. Cambiando un par de cosas, creo que tambien lo podrías usar en un DBedit normal de la VCL.
No chequea si se pega texto en la caja desde el portapapeles.

Código Delphi [-]
  // constantes para el AutoCompleta
  const NO_BUSCAR = 1;
        BUSCAR = 0;
        BUSCAR_SI_CAMBIA = 2; // si no lo encuentra la 1ª vez, no sigue
                             // buscando hasta
                             //  que se borre caracteres anteriores


procedure AutoCompleta(Ctr:TcustomEdit; Key:Word; qry:TDataset;const NombreCampo:string);
const checking :Boolean = False;
      OldText:string='';

var Campo:TField;
begin
  case key of
  vk_DELETE,VK_BACK :
            begin
              Ctr.SelText := '';
              Ctr.Tag:= codigoutil.IfThen(Ctr.Tag=BUSCAR_SI_CAMBIA,BUSCAR, NO_BUSCAR);
            end;
  VK_LEFT,VK_CAPITAL, VK_RIGHT, VK_HOME, VK_END: Ctr.Tag:= NO_BUSCAR;
  else
    Ctr.Tag := codigoutil.IfThen(Ctr.Tag=BUSCAR_SI_CAMBIA,NO_BUSCAR, BUSCAR);
  end;

  if Ctr.Tag = BUSCAR then
  begin
    if checking then Exit;
    checking:= True;
    if (Ctr.SelStart = 0) then
      OldText := Ctr.Text
    else
    OldText:= Copy(Ctr.Text,1,Ctr.SelStart);//+Key;
    if not qry.Active then
      qry.Open;
    if qry.Locate(NombreCampo, OldText  ,[locaseinsensitive, lopartialkey]) then
    begin
      Campo :=qry.FindField(NombreCampo);
      if Campo = nil then
        Exception.Create('proc AutoCompleta: Campo '+QuotedStr(NombreCampo)+' no encontrado')
      else
      begin
        if Key = vk_return then
          Ctr.Text:= Campo.AsString
        else
          Ctr.Text:= OldText + Rightstr(Campo.AsString,Length(Campo.AsString)-Length(OldText));
        Ctr.SelStart:= Length(OldText);
        Ctr.SelLength := Length(Ctr.Text);
  //      SetCaretPos(Length(OldText),1);
        Ctr.Tag:= BUSCAR;
      end;
    end
    else
    begin
      Ctr.Tag:= BUSCAR_SI_CAMBIA;
    end;
    checking:= False;

  end;
end;

Saludos y espero te sirva

nicolasdom 20-09-2004 14:15:06

Disculpen que siga inchando. Antes que nada muchisimas gracias por los consejos. Intentare aplicarlos. En cuanto a la pregunta sigue en pie. Ya que yo con un combo box de devExpress puedo usar perfectamente el autocompletar. Pero para hacer esto primeramente tengo que hacer el query y luego recorrer dicho query agregando elementos al combo. Y lo mio no es de aragan y de no programar una linea de codigo como escuche mas arriba... Yo no arranque programando en delphi... Yo arranque con asembler!!! Pero creo que de esto se trata la vida... Hacer [MAS y MEJOR] - [TIEMPO] = +++ $$$

Gracias igual a los que se preocuparon.

PD: los componentes jvcl donde los puedo encontrar? son gratis?

roman 20-09-2004 18:36:04

Cita:

Empezado por nicolasdom
PD: los componentes jvcl donde los puedo encontrar? son gratis?

Son gratuitos y los puedes bajar de la página del Projecto Jedi.

// Saludos


La franja horaria es GMT +2. Ahora son las 08:03:06.

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