Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2003
albeiro_ospina albeiro_ospina is offline
Miembro
 
Registrado: may 2003
Ubicación: Bogota - Colombia
Posts: 29
Poder: 0
albeiro_ospina Va por buen camino
Enviar teclas al teclado

Cordial saludo a todos,

Existe algún comando-función para enviar teclas al buffer del teclado???.

La idea es que cuando un control reciba el foco, en caso de que su contenido sea nulo, se envíen una serie de dígitos/letras a dicho control (por ejemplo un TEdit) y que el usuario complete dicho campo con el resto de información quedando preestablecido el inicio del campo y variable la parte final del mismo.


Gracias por su colaboracion.
Responder Con Cita
  #2  
Antiguo 01-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y no basta asignar los dígitos/teclas a la propiedad Text del TEdit?

// Saludos
Responder Con Cita
  #3  
Antiguo 01-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Puedes usar keybd_event, o enviar un mensaje diciendo que la tecla está presionada.


Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 02-07-2003
albeiro_ospina albeiro_ospina is offline
Miembro
 
Registrado: may 2003
Ubicación: Bogota - Colombia
Posts: 29
Poder: 0
albeiro_ospina Va por buen camino
Gracias por responder.

>>¿Y no basta asignar los dígitos/teclas a la propiedad Text del TEdit?


Básicamente, al hacer esto lo que obtengo es el campo con su contenido pero no puedo hacer que el usuario simplemente continúe digitando sobre el mismo campo. Quiero que el valor asignado quede al comienzo del campo y que el cursor quede ubicado enseguida del último caracter insertado para que continúe digitando el campo.


>>Puedes usar keybd_event, o enviar un mensaje diciendo que la tecla está presionada

Intenté usar keybd_event pero no sucedió nada. No sé que es lo que no funciona. Lo jice de la siguiente forma:

var caracter : Byte

begin
caracter := StrToInt('0');
keybd_event(caracter,0,0);
caracter := StrToInt('7');
keybd_event(caracter,0,0);
end;

El campo sigue vacío.
Responder Con Cita
  #5  
Antiguo 02-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y qué tal algo como

Código:
Edit1.Text := 'abc123';
Edit1.SelStart := Length(Edit1.Text);
Esto colocará el cursor al final del texto.

// Saludos
Responder Con Cita
  #6  
Antiguo 02-07-2003
albeiro_ospina albeiro_ospina is offline
Miembro
 
Registrado: may 2003
Ubicación: Bogota - Colombia
Posts: 29
Poder: 0
albeiro_ospina Va por buen camino
Al utilizar SelStart funciona pero el texto queda sombreado y si el usuario comienza a digitar sobreescribe el valor asignado y la idea es que se continúe con el contenido del campo. Para que no sobreescriba se obliga al usuario a presionar la tecla Flecha Derecha y entonces iniciar la digitación, y debido a que se requiere captura de alto número de formularios el impacto es alto.

Alguna sugerencia adicional??

Gracias
Responder Con Cita
  #7  
Antiguo 02-07-2003
albeiro_ospina albeiro_ospina is offline
Miembro
 
Registrado: may 2003
Ubicación: Bogota - Colombia
Posts: 29
Poder: 0
albeiro_ospina Va por buen camino
Cita:
Posteado originalmente por roman
¿Y qué tal algo como

Código:
Edit1.Text := 'abc123';
Edit1.SelStart := Length(Edit1.Text);
Esto colocará el cursor al final del texto.

// Saludos

Efectivamente funcionó y ahora hace lo que inicialmente deseaba. En este momento tengo una inquietud adicional:

Cómo hago para que esto mismo funcione no en TEdit sino en un DBGrid???

Gracias
Responder Con Cita
  #8  
Antiguo 02-07-2003
jafl1965 jafl1965 is offline
Miembro
 
Registrado: may 2003
Ubicación: Morelia, México
Posts: 170
Poder: 22
jafl1965 Va por buen camino
Pon la propiedad AutoSelect a false.
Responder Con Cita
  #9  
Antiguo 02-07-2003
albeiro_ospina albeiro_ospina is offline
Miembro
 
Registrado: may 2003
Ubicación: Bogota - Colombia
Posts: 29
Poder: 0
albeiro_ospina Va por buen camino
Cita:
Posteado originalmente por jafl1965
Pon la propiedad AutoSelect a false.
Estoy tratando de hacerlo pero no he encontrado dicha propiedad por ningún lado.

Al buscar en la ayuda, encuentro que AutoSelect es propiedad de aquellos objetos que heredan de TCustomEdit, y la grilla no pertenece a este grupo.

Alguna sugerencia???
Responder Con Cita
  #10  
Antiguo 02-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Posteado originalmente por albeiro_ospina
Intenté usar keybd_event pero no sucedió nada. No sé que es lo que no funciona.
Te recomiendo leer este Link http://www.clubdelphi.com/foros/arch...ic.php?t=20320

PD: Otra solución puede ser hacer un PASTE en un control!

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #11  
Antiguo 02-07-2003
jafl1965 jafl1965 is offline
Miembro
 
Registrado: may 2003
Ubicación: Morelia, México
Posts: 170
Poder: 22
jafl1965 Va por buen camino
Perdón, lo del AutoSelect a false aplicaba para el Edit, es que coincidimos en la hora del post, y esa respuesta la puse para cuando decías no te funcionaba el SelStart.
Lo siento, para Grid, no sé cómo hacer.
Saludos....
Responder Con Cita
  #12  
Antiguo 02-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Para conseguir que al entrar en cada celda de un DBGrid lo haga en modo edición, como si pulsaras la tecla F2, aparte de activar dgEditing y dgAlwaysShowEditor en Options, hay que recurrir al método EditorMode de la clase TCustomGrid, que logra que aparezca el cursor parpadeando al final, pero éste es protected. Así que una forma de solucionarlo es declarar una clase que haga de intermediaria:
Código:
TMyGrid = class(TCustomGrid)
  public
    property EditorMode;
  end;
El método debe aplicarse cada vez que se cambia de celda. Un problema de los DBGrids es que aunque permiten detectar cuándo se ha cabiado de columna, no así de fila. Debe haber otras soluciones pero se me ocurre que puedes situar un TDataSource ligado al mismo DataSet (o usar el mismo DataSource que el DBGrid si se encuentra en el mismo Form) e interceptar cuándo se ha cambiado de registro. Éste sería el código:
Código:
// interceptamos el OnColEnter del DBGrid
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
var
  AField : TField;
begin
  TMyGrid(DBGrid1).EditorMode := TRUE; 
  AField := DBGrid1.SelectedField;
  if (AField <> nil) AND (AField.FieldName = 'Poblacion') AND 
     (AField.IsNull) then
  begin
    AField.DataSet.Edit;
    AField.AsString := 'Ciudad Real';
  end;  
end;

// interceptamos el evento OnDataChange del DataSource
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if Field = nil then DBGrid1ColEnter(Sender);
end;
__________________
Guía de Estilo
Responder Con Cita
  #13  
Antiguo 03-07-2003
albeiro_ospina albeiro_ospina is offline
Miembro
 
Registrado: may 2003
Ubicación: Bogota - Colombia
Posts: 29
Poder: 0
albeiro_ospina Va por buen camino
Gracias por responder.

La solución planteada por andres funciona perfectamente. Ya solucioné mi problema.

Quiero resaltar de esta respuesta, la claridad en su explicación y el hecho de insertar un ejemplo, datos con los cuales pude fácilmente dar solución a mi inquietud.


Nuevamente, mil gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:37:10.


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
Copyright 1996-2007 Club Delphi