Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   repeticion de código pulsando un TButton. (https://www.clubdelphi.com/foros/showthread.php?t=34773)

elcaracas 21-08-2006 19:48:21

repeticion de código pulsando un TButton.
 
Hola me estoy volviendo loco, porque no se como ejecutar un código repetidas veces, hasta que suelte el boton izquierdo del ratón.
he probado con otras clases de botones pero nada...

¿Hay alguien que se apiade de mi?:o

Gracias

nemesio 21-08-2006 22:50:45

¿Qué quieres que mientras mantengas el botón presionado se ejecute un código? Se me ocurre que coloques un Timer y que evalue cada cierto tiempo si el botón está presionado, si esto ocurre que haga lo que deseas.

Saludos

OSKR 21-08-2006 23:36:31

Si el problema es repetir còdigo, q tiene q ver el botòn?
Ademàs del consejo de nemesio...si lo q qieres es durante el movimiento entonces puedes usar el event OnMOuseMOve del control y verificas el paràmetro TShifState...ahí veràs si el mouse se está movimiendo con un botón hundido

elcaracas 22-08-2006 17:50:37

Cita:

Empezado por nemesio
¿Qué quieres que mientras mantengas el botón presionado se ejecute un código? Se me ocurre que coloques un Timer y que evalue cada cierto tiempo si el botón está presionado, si esto ocurre que haga lo que deseas.

Saludos

Si eso funciona. Pero, al igual que si mantienes una tecla pulsada y pones el código dentro de un KeyPress se repite mientras la tienes mantenida, ¿exise alguna forma directa para que te repita el código?.
Lo que hace el programa es dibujar ciertos elementos y con botones ("Flechas") voy desplazando esos objetos por la imágen. pero tengo que pulsar repetidas veces para que se vaya desplazando. Me gustaría que mientras tengo pulsado el botón se vaya ejecutando constantemente.

Gracias

dec 22-08-2006 18:05:13

1 Archivos Adjunto(s)
Hola,

Bueno. Que yo sepa no existe el evento "OnBetwenUserDontUpKey"... sin embargo, digo que yo que todo puede hacerse... ¿no? Lo que no sé es si quedaría algo elegante, curioso, limpio, usable y efectivo al mismo tiempo.

Quiero decir, que, a bote pronto, se me ocurre algo como esto...

Código Delphi [-]
unit UfrmPrincipal;

interface

uses
  Forms, StdCtrls, Classes, Controls;

type
  TfrmPrincipal = class(TForm)
    mPruebas: TMemo;
    Button1: TButton;
    btnCerrar: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnCerrarClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  private
    FBotonPulsado: boolean;
  end;

var
  frmPrincipal: TfrmPrincipal;

implementation

{$R *.dfm}

procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
  // Inicialmente...
  FBotonPulsado := false;
end;

procedure TfrmPrincipal.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  // Al cerrarse el formulario...
  FBotonPulsado := false;
end;

procedure TfrmPrincipal.Button1MouseUp(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  // Si se "deja de pulsar" en el botón...
  FBotonPulsado := false;
end;

procedure TfrmPrincipal.Button1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FBotonPulsado := not FBotonPulsado;
  // Mientras el botón esté "pulsado"...
  while FBotonPulsado do
  begin
    mPruebas.Lines.Append('$');
    Application.ProcessMessages;
  end;
end;

procedure TfrmPrincipal.btnCerrarClick(Sender: TObject);
begin
  Close;
end;

end.

elcaracas 22-08-2006 18:53:24

Muchas gracias

elcaracas 22-08-2006 19:11:15

Lo he probado en Builder y funciona, aunque solo he utilizado:


Código:

bool apretado;
void __fastcall TForm1::Button2MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
apretado=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
apretado =!apretado;
// Mientras el botón esté "pulsado"...
while (apretado)
{
Memo1->Lines->Add("a");
Application->ProcessMessages();
}
}


Muchas Gracias otra vez


La franja horaria es GMT +2. Ahora son las 12:34:44.

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