PDA

Ver la Versión Completa : Focused mas no selected


elcigarra
05-10-2005, 04:24:21
Amigos, dos preguntas parecidas (sobre texto seleccionado).

a) Tengo un TEdit y en determinada opción de la aplicación le mando el foco. Cuando este componente toma el foco, su texto queda seleccionado (en azul). ¿Puedo darle foco sin que se seleccione el texto, es decir que el cursor quede a la derecha esperando nuevos caracteres?

b) Tengo el mismo edit y un StringList.
Supongamos que escribo algo de texto en un comboBox. Si es el caso se agregará a la derecha del cursor el resto de una opción del combo que coincida, con texto "seleccionado". ¿Puedo simular esto escribiendo en el Edit y completando (si es el caso) con texto seleccionado de algun String de la lista que coincida? Es decir, que en todo momento el Edit combinado con el StringList muestre exactamente lo mismo que mostraría un ComboBox con esa lista de "Items" si se estuviera escribiendo sobre él?

Delfino
05-10-2005, 07:55:58
Para lo primero, la propiedad AutoSelect tiene q ser a False, tb puede servirte la propiedad SelStart para posicionarte al inicio del edit.

para lo segundo, pon un combo y asignale csSimple a su propiedad Style, asi tendras una edit..

Caro
05-10-2005, 19:41:46
Hola

Para lo primero podrias hacer lo siguiente en el evento OnEnter:


procedure TgbFrm_Principal.Edit2Enter(Sender: TObject);
begin
Edit.SelStart:=Length(Edit.text);
Edit.SelLength:=Length(Edit.text);
end;


Saludos

elcigarra
05-10-2005, 21:39:45
me contesto yo mismo. Para simular el autoselect de un Combo con un TEdit (Edit1) y un StringList (Lista):


procedure TForm1.Edit1Change(Sender: TObject);
var
i,lon: Integer;
begin
for i := 0 to Lista.Count-1 do begin
// para que sea igual al de un combo debe ser case insensitive
if Pos(UpperCase(Edit1.Text),UpperCase(Lista.Strings[i])) = 1 then begin
Lon:= Length(Edit1.Text); // Posición del cursor
// Le sumo lo que restaría del string coincidente
// sin cambiar las cases que ya tengo escritas
Edit1.Text := Edit1.Text +
AnsiRightStr(Lista.Strings[i],Length(Lista.Strings[i])-Lon);
Edit1.SelStart := Lon; // Desde donde va a seleccionar
Edit1.SelLength := Length(Edit1.Text) - Lon; // N° de caracteres a seleccionar
Exit; // Por si hay más de una coincidencia
end;
end;
end;