Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-04-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
¡ Vaya |

Veo que el código no salió correctamente.

Mis disculpas.
Responder Con Cita
  #2  
Antiguo 17-04-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por jhonalone Ver Mensaje
¡ Vaya |
Veo que el código no salió correctamente.
Mis disculpas.
Ocurre algunas veces, voy a intentar arreglarlo...
Responder Con Cita
  #3  
Antiguo 17-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jhonalone.

Creo que podrías hacer:
Código Delphi [-]
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  if (GetKeyState(VK_DOWN)<0)or(GetKeyState(VK_UP)<0)
      or(GetKeyState(VK_RETURN) < 0) then Exit;
  ...
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  if (GetKeyState(VK_DOWN)<0)or(GetKeyState(VK_UP)<0)
      or(GetKeyState(VK_RETURN) < 0) then Exit;
  ...
end;
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
   Mgs: TMsg;
begin
   if Key = VK_RETURN then
   begin
     // Aqui llamá a tu procedimiento o poné el código a ejecutar
     PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE); // quitar el molesto beep 
     ShowMessage('Intro fué presionada');
   end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-04-2012 a las 20:04:15.
Responder Con Cita
  #4  
Antiguo 17-04-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Gracias de nuevo Ecfisa.

Te cuento en la situación que estoy:

El combo se rellena y se hace visible y desplegado con:
Código Delphi [-]
procedure TFClien.SpeedButton3Click(Sender: TObject);
var
   NoHayMas: Boolean;
begin
ClienDB.Filtered := False;
ClienDB.Filter := 'Nom= '+QuotedStr(LMDEdit6.Text+'*');
ClienDB.Filtered := True;
Combobox1.Clear;
NoHayMas := False;
if ClienDB.FindFirst
then Combobox1.Items.Add(ClienDBNom.AsString);
while NoHayMas=False
do begin
   if ClienDB.FindNext
   then Combobox1.Items.Add(ClienDBNom.AsString)
   else NoHayMas := True;
   end;
Combobox1.ItemIndex := -1;
ClienDB.Filtered := False;
if Combobox1.Items.Count > 0
then begin
      if (Combobox1.Items.Count = 1) and  // Es el mismo
         (Combobox1.Items.Strings[0] = LMDEdit6.Text)
      then begin
           Combobox1.Visible:=False;
           Beep;
           Exit;
           end;
     Combobox1.Visible:=True;
     Combobox1.ItemIndex := 0;
     ComboBox1.SetFocus;
     ComboBox1.Perform(CB_SHOWDROPDOWN, 1,0);// Despliega el Combo
     ComboBox1.SetFocus;
     end
else PonDatosCli;
end;

A este procedimiento lo llamo desde aquí:
Código Delphi [-]
procedure TFClien.LMDEdit6KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Button6.Enabled // Si no está en Altas
then begin
     if Key=vk_RETURN
     then begin
          if ValorOriginal<>LMDEdit6.Text
          then SpeedButton3.Click;
          end;
     end;
end;

Utilizo el procedimiento siquiente para bloquear OnClick al mover las flechas y utilizarlo cuando se pulse Click sobre un Item:
Código Delphi [-]
procedure TFClien.ComboBox1Click(Sender: TObject);
begin
if (GetKeyState(VK_DOWN)<0)or(GetKeyState(VK_UP)<0) then Exit;
ClienDB.SetKey;
ClienDB['Nom'] := Combobox1.Items.Strings[Combobox1.ItemIndex];
ClienDB.GotoNearest;
// Segunda Base Clien2DB
FClien.Clien2DB.SetKey;
FClien.Clien2DB['Nom'] := Combobox1.Items.Strings[Combobox1.ItemIndex];
FClien.Clien2DB.GotoNearest;
//Comprobamos que hemos leido el mismo cliente en las dos bases
if FClien.ClienDBNom.AsString <> FClien.Clien2DBNom.AsString
then begin
     ShowMessage('La Base de Clientes de reserva, puede no estar actualizada.'+#13+
                 'Conviene que salga del programa y entre de nuevo para corregir este error.');
     end;
PonDatosCli;
Combobox1.Visible:=False;
end;

En los eventos OnKeyDown y OnKeyPress del combo, no me reconece la tecla Enter:
Código Delphi [-]
procedure TFClien.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=vk_RETURN
     then beep;
end;
No se oye el BEEP al pulsar Enter.

Tampoco se oye al pulsar enter en OnKeyPress:
Código Delphi [-]
procedure TFClien.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then Beep;
if key = #27 then Combobox1.Visible:=False;
end;
Sin embargo, si pulso ESCAPE se cierra el combo.

He recurrido al evento ONKeyUp:
Código Delphi [-]
procedure TFClien.ComboBox1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=vk_RETURN
     then begin
          ClienDB.SetKey;
          ClienDB['Nom'] := Combobox1.Items.Strings[Combobox1.ItemIndex];
          ClienDB.GotoNearest;
          // Segunda Base Clien2DB
          FClien.Clien2DB.SetKey;
          FClien.Clien2DB['Nom'] := Combobox1.Items.Strings[Combobox1.ItemIndex];
          FClien.Clien2DB.GotoNearest;
          //Comprobamos que hemos leido el mismo cliente en las dos bases
          if FClien.ClienDBNom.AsString <> FClien.Clien2DBNom.AsString
          then begin
               ShowMessage('La Base de Clientes de reserva, puede no estar actualizada.'+#13+
                           'Conviene que salga del programa y entre de nuevo para corregir este error.');
               end;
          PonDatosCli;
          Combobox1.Visible:=False;
          end;
end;

El mismo Código que en OnClick.

Bueno pues esto funciona así:

Antes de asignar el procedimiento OnKey press.
El combo se queda desplegado.
Si hago click en un item con el ratón, presenta bien los datos.
Muevo las teclas arriba y abajo y selecciona el item y actualiza el texto del Combo.
Si pulso Enter no hace nada y no se oye el BEEP.

Después de asignar el procedimiento a OnKeyPress
Se despliega el Combo, selecciona el primer item de la lista, pone los datos correctos de este item y cierra el Combo. No espera deplegado a que pulse ninguna tecla, es como si siguiera vigente el Enter de TFCliien.LMDEditKeyDown() (El procedimiento que llama a TFClien.SpeedButton3(), que es el procedimiento que rellena y presenta el combo)

Quizá me he extendido demasiado, pero quería dejarte clara la situación.

Espero que me digas cómo evito que quede en memoria el primer ENTER que llama al procemiento que rellena y despliega el Combo.

Gracias de antemano.

Un Saludo.
Responder Con Cita
  #5  
Antiguo 17-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jhonalone.

Veo que en el evento OnClick de tu código figura:
Código Delphi [-]
...
  if (GetKeyState(VK_DOWN)<0)or(GetKeyState(VK_UP)<0) then Exit;
...

Pero si revisás el código de mi último mensaje verás que en los eventos OnClick y OnChange también evaluo:
Código Delphi [-]
...
  if (GetKeyState(VK_DOWN)<0) or (GetKeyState(VK_UP)<0)
      or (GetKeyState(VK_RETURN) < 0) then Exit;
...

El valor de la tecla presionada lo podés evaluar en el evento OnKeyDown sin ningún problema.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 18-04-2012
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 571
Poder: 19
jhonalone Va por buen camino
Muchas gracias, de nuevo, Ecfisa.

¡¡¡ CONSEGUIDO !!!

Pero te informo cómo:

(GetKeyState(VK_RETURN) < 0) no ha sido necesario ponerlo en OnClick.

El evento OnChange está vacío.

Sigue sin reconocer la tecla ENTER ni en OnKeyDown ni en OnKeyPress.

He tenido que despreciar la primera pulsación de Enter que provenía del procedimiento TFClien.LMDEdit6KeyDown() que era la que provocaba la autoselección en el Combo.
Paraa ello he utilizado una variable boleana global, que se activa al pulsar el primer Enter en el procedimiento TFClien.LMDEdit6KeyDown() y se desactiva al autoseleccionarse el Combo por medio del procedimiento TFClien.ComboBox1KeyUp() al recibir el foco el Combo.

Sigo sin entender, ¿por qué no reconoce la tecla Enter en OnKeyDown ni en OnKeyPress?

Tampoco ha sido necesario desactivar el BEEP al pulsar ENTER, simplemente porque no sonaba, pero me guardo el código para cuando lo necesite, que es muy útil.

Dejo las modificaciones, para quien le pueda interesar:
Código Delphi [-]
var //Global a la Form
  PrimeraVezEnter: Boolean;
...............
// Procedimiento inductor de la llamada con Enter
procedure TFClien.LMDEdit6KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Button6.Enabled // Si no está en Altas
then begin
     if Key=vk_RETURN
     then begin
          if ValorOriginal<>LMDEdit6.Text
          then begin
               SpeedButton3.Click;
               PrimeraVezEnter := True;
               end;
          end;
     end;
end;

//En el procedimiento que rellena el Combo,( después de rellenarlo)
procedure TFClien.SpeedButton3Click(Sender: TObject);
begin
.......................     
  Combobox1.Visible:=True;     
  Combobox1.ItemIndex := 0;     
  ComboBox1.SetFocus;     
  ComboBox1.Perform(CB_SHOWDROPDOWN, 1,0);
  // Despliega el Combo    
  ComboBox1.SetFocus;
  ..............
end;

// En el evento OnKeyUp del Combo (OnkeyDown y OnKeyPress no reconecen ENTER)
procedure TFClien.ComboBox1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
beginif Key=vk_RETURN
     then begin
          if PrimeraVezEnter
          then begin
               PrimeraVezEnter := False;
               Exit;
               end;
          end;// Instrucciones al seleccionar item en el Combo.............
end;

Dejo el mecanismo de acción por si interesa a alguien.

Gracias una vez más, Ecfica, por tu ayuda y esfuerzo, sin ellos no lo hubiera conseguido. ¡Eres mi ídolo...|
¡A ver cúanto aguanto sin tener que molestarte!

Saludos...

Última edición por ecfisa fecha: 18-04-2012 a las 13:51:23. Razón: Corregir identación de código
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Muy util - Trucos Firefox. marcoszorrilla La Taberna 24 27-08-2011 14:49:41
Extraño comportamiento de un ComboBox r1d2m3 OOP 2 09-07-2011 17:36:45
comportamiento extrano para QrExpr .... en QuickReport. uper Impresión 1 15-11-2005 23:20:24
Es útil saber idiomas. marcoszorrilla Humor 2 10-06-2004 08:56:09
Les regalo esta dll, que es muy util Trigger OOP 3 27-02-2004 01:04:07


La franja horaria es GMT +2. Ahora son las 23:26:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi