Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2007
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
key de CTRL+V y de CTRl+C

Tengo un edit con el siguiente código en el evento OnKeyPress para que admita solo números decimales:
Código Delphi [-]
  //controlar entrada solo números
  if ( StrScan('0123456789.' + chr(7) + chr(8), Key) = nil ) then  Key := #0;
  //cambiar punto decimal por coma
  if key = '.' then key := ',';
  //controlar entrada una sola coma
  for i := 1 to length(EUno.Text) do
    if ( copy(EUno.Text,i,1) = ',' ) and not ( StrScan(',', Key) = nil ) then  Key := #0;
Esto me impide copiar y/o pegar en el edit, pero necesito poder hacerlo.

He pensado poner una condición algo así:

If (key = 'VK_KeyDeCtrl+V) or (key = 'VK_KeyDeCtrl+C) then
....controlar valor pegado
else
... control entrada solo números

¿ key de CTRL+V y de CTRl+C ?, o algún sitio donde pueda buscarlas.

Gracias.
Responder Con Cita
  #2  
Antiguo 12-04-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
El problema del OnKeyPress es que no te da información extra de teclas de CTRL, ALT,... como hacen por ejemplo el OnKeyDown/OnKeyUp.

La primera opción es ver si puedes cambiar el código a uno de estos eventos.
Si no puedes, la otra opción es utilizar la API para preguntar cómo está en un momento dado una determinada tecla.

GetKeyState o GetKeyboardState te pueden servir.
Para ver cómo se usan puedes revisar este post de Roman.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 12-04-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Yo me andaría con ojo, ya que mucha gente (por ejemplo, yo ) utiliza las combinaciones [Ctrl]+[Ins] y [Mays]+[Ins] para copiar y pegar (aparte de [Ctrl]+[Supr] para cortar, etc). Creo recordar que también se puede cambiar en la configuración del teclado qué teclas utilizar para estas operaciones.

¿No hay alguna forma de obtener (por ejemplo, del registro) cómo están configuradas estas combinaciones?
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #4  
Antiguo 12-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Creo que estamos confundiendo las cosas, cuando copiamos o pegamos, ya sea usando el menú o utilizando alguna combinación de teclas, lo que llega al edit son los mensajes WM_COPY y WM_PASTE. En ningún momento llegan al edit las pulsaciones de esas teclas porque se procesan por windows mucho antes.

Para controlar cuando, y como, se copia y se pega lo que tenemos que hacer es interceptar los mensajes WM_COPY y WM_PASTE. Se puede hacer de varias maneras, pero ahora mismo se me ocurre que lo podemos hacer sustituyendo el WndProc del edit. Algo así:
Código Delphi [-]
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    AntWindowProc: TWndMethod;
    procedure MiWindowProc(var Message: TMessage);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MiWindowProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_COPY:
      begin
         // Aqui lo que quieras
      end;
    WM_PASTE:
      begin
         // Aqui lo que quieras
      end;
    else // Si no es ninguno de los anterios llamamos al antiguo WndProc
      AntWindowProc(Message);
  end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AntWindowProc:= Edit1.WindowProc;
  Edit1.WindowProc:= MiWindowProc;
end;
Responder Con Cita
  #5  
Antiguo 12-04-2007
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
Cita:
Empezado por seoane
Creo que estamos confundiendo las cosas, cuando copiamos o pegamos, ya sea usando el menú o utilizando alguna combinación de teclas, lo que llega al edit son los mensajes WM_COPY y WM_PASTE. En ningún momento llegan al edit las pulsaciones de esas teclas porque se procesan por windows mucho antes.
Estoy de acuerdo contigo y el método que propones es, a mi juicio, el correcto, porque ataca la raíz del problema: copiar y pegar. Pero esas pulsaciones no sólo sí llegan al control sino que sí son interceptables y anulables en los eventos OnKeyDown y/o OnKeyUp.

// Saludos
Responder Con Cita
  #6  
Antiguo 12-04-2007
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Gracias a todos, voy a ponerme con lo que me indicais.

Un saludo.
Responder Con Cita
  #7  
Antiguo 12-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
Pero esas pulsaciones no sólo sí llegan al control sino que sí son interceptables y anulables en los eventos OnKeyDown y/o OnKeyUp.
Caramba, hubiera jurado que se comportaban igual que la tecla TAB. Eso me pasa por no haberlo comprobado
Responder Con Cita
  #8  
Antiguo 13-04-2007
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Poder: 20
fidel Va por buen camino
Lo he solucionado a través del evento OnChange del edit. Controlo que el edit solo pueda admitir números con una coma, y el edit permite copiar y pegar.

Gracias. Un saludo.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Historia de Ctrl+Z marcoszorrilla Noticias 0 30-09-2006 21:15:28
Ctrl + Alt + Del marcoszorrilla Noticias 6 25-07-2006 07:23:11
Desactivar Ctrl-Del IVAND Varios 1 12-01-2006 02:42:45
desactivar CTRL+ALT+SUP User_baja1 Varios 1 03-05-2005 19:26:14
Ctrl+alt+supr karocs Varios 3 28-12-2004 20:46:37


La franja horaria es GMT +2. Ahora son las 14:16:18.


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