Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-04-2013
juank1971 juank1971 is offline
Miembro
 
Registrado: Feb 2008
Posts: 124
Poder: 11
juank1971 Va por buen camino
Mover TSpeedButton en Runtime

Amigos se que este tema esta agotado para mover componentes en runtime, y hay algunos ejemplos en clubdelphi, ya he ebuscado bastante eso, pero no me funciona con el componente
TSpeedButton , necesito que sea ese componente porque ya tengo todo para el y he programado muchas cosas, pensé que la rutina de moverlo en corrida era igual que los demás y deje eso para ultimo y ahora cuando pruebo funciona, no hace nada, con un tbutton si, pero no en los TSpeedButton .

Pensé que era por tenerlo dentro de Tcontrol de esta forma
Código Delphi [-]
tcontrol( SpeedButton1).Perform(WM_SYSCOMMAND, $F012, 0);

y lo puse

Código Delphi [-]
SpeedButton1.Perform(WM_SYSCOMMAND, $F012, 0);

y de esta manera no hace nada tampoco, esto lo pruebo con cualquier otro componente y funciona perfecto. Alguna idea.


Código Delphi [-]
procedure TForm1.SpeedButton1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 ReleaseCapture;
 tcontrol( SpeedButton1).Perform(WM_SYSCOMMAND, $F012, 0);
end;
Responder Con Cita
  #2  
Antiguo 13-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.045
Poder: 29
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 behold
Hola juank1971.
Cita:
Empezado por juank1971 Ver Mensaje
esto lo pruebo con cualquier otro componente y funciona perfecto. Alguna idea.
Si, en realidad la segunda línea de tu código tendría que poder escribirse como:
Código Delphi [-]
  SendMessage(SpeedButton1.Handle, WM_SYSCOMMAND, $F012, 0);
Y aquí esta el problema... Por que TSpeedButton deriva de TGraphicControl y no de TWinControl que implementa la propiedad Handle. Vas a tener que programar un poco para lograr el efecto que buscas.

Te pongo un ejemplo, no muy elaborado, como para darte una idea de como podrías encararlo:
Código Delphi [-]
...
implementation

var
  MoveOn: Boolean = False;

procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ssCtrl in Shift then  // tecla Ctrl  presionada
    MoveOn:= True;
end;

procedure TForm1.SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if MoveOn then
  begin
    SpeedButton1.Left := ScreenToClient(Mouse.CursorPos).X;
    SpeedButton1.Top  := ScreenToClient(Mouse.CursorPos).Y;
  end;
end;

procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MoveOn := False;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 13-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.045
Poder: 29
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 behold
Hola de nuevo.

Es una zoncera, pero se me olvidó mencionar que si quisieras utilizar el código para varios SpeedButtons, solo tenés que hacer un pequeño cambio en el evento OnMouseMove:
Código Delphi [-]
procedure TForm1.SpeedButtonMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if MoveOn then
  begin
    TSpeedButton(Sender).Left := ScreenToClient(Mouse.CursorPos).X;
    TSpeedButton(Sender).Top  := ScreenToClient(Mouse.CursorPos).Y;
  end;
end;
Y asignar los eventos a los TSpeedButtons que desees.

Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 13-04-2013 a las 21:48:42.
Responder Con Cita
  #4  
Antiguo 13-04-2013
juank1971 juank1971 is offline
Miembro
 
Registrado: Feb 2008
Posts: 124
Poder: 11
juank1971 Va por buen camino
ok lo estoy probando , gracias por tu respuesta.

como decía mi abuelo salud y pesetas.
Responder Con Cita
  #5  
Antiguo 15-04-2013
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: Nov 2007
Posts: 1.927
Poder: 13
escafandra Va camino a la famaescafandra Va camino a la fama
Como apunta ecfisa un TSpeedButton no es una ventana por lo que no tiene Handle. No se le pueden enviar mensajes de Windows (WM_XXX)

El movimiento lo debes hacer manual, como te indica ecfisa. Yo propongo el siguiente código simple:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    procedure SpeedButton1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    OldPoint: TPoint;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  OldPoint.X:= X;
  OldPoint.Y:= Y;
end;

procedure TForm1.SpeedButton1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if (ssLeft in Shift) and (ssCtrl in Shift) then
  begin
    SpeedButton1.Left:= SpeedButton1.Left +  X - OldPoint.X;
    SpeedButton1.Top:= SpeedButton1.Top + Y - OldPoint.Y;
  end;
end;

end.


Saludos.
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
Posibilidades de KEy en Tspeedbutton José Luis Garcí OOP 7 06-11-2011 09:48:28
TSpeedButton cmfab Varios 4 21-01-2011 18:01:55
Mover componentes en runtime felipe88 Gráficos 11 17-11-2007 00:15:57
Mover y agregar controles en RunTime JXJ Varios 2 05-05-2005 02:16:04
TspeedButton NuncaMas Varios 1 29-10-2003 20:51:57


La franja horaria es GMT +2. Ahora son las 09:39:12.


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