PDA

Ver la Versión Completa : Complicado con un DBLookupComboBox...


nicolasdom
19-09-2004, 21:29:07
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
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.


// 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
PD: los componentes jvcl donde los puedo encontrar? son gratis?

Son gratuitos y los puedes bajar de la página del Projecto Jedi (http://www.delphi-jedi.org/).

// Saludos