Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   imagen con drag & drop (https://www.clubdelphi.com/foros/showthread.php?t=57499)

Nomad 17-06-2008 19:52:54

imagen con drag & drop
 
Quiero hacer una aplicacion, en que tengo una imagen de fondo, compuesta por varias subimagenes y que a la vez, tengo otras imagenes que pueda arrastrar y soltar sobre esas subimagenes.

Digamos que la imagen grande, es de un vivero y esas subimagenes son las seccion en que se divide el vivero, y las imagenes que puedo jalar y soltar son de las plantas que van en cada seccion del vivero.

Espero que haya explicado bien, lo que quiero hacer... y cualquier sugerencia o comentario es bien recibido.:cool:

yusnerqui 17-06-2008 20:41:33

Hola, Me parese fantástico tu proyecto, lo que no acabo de entender es cual es la duda que tienes.


Saludos Yusnerqui

coso 17-06-2008 20:45:11

Te pongo aqui codigo de ejemplo para hacer un drag&drop

Código Delphi [-]
unit carried;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    Label1: TLabel;
    procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    Carried : TControl;
    X_c : integer;
    Y_c : integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
        if carried <> nil then exit;
        Label1.Caption := inttostr(X_c) + ' ' + inttostr(Y_c);
        Carried := sender as TControl;
        Carried.BringToFront;
        X_c     :=  X;
        Y_c     :=  Y;
end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
        m, dh : integer;
begin
        if Carried = nil then exit;

        m := (Width - ClientWidth ) div 2;
        dh := Height - ClientHeight - m;

        Carried.Left := Mouse.CursorPos.x - Left - m - X_c;
        Carried.Top  := Mouse.CursorPos.y - Top - dh - Y_c;
end;

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

end.

Los eventos tienen q estar ligados a todos los shapes.

saludos.

Nomad 17-06-2008 21:48:37

Cita:

Empezado por coso (Mensaje 294157)
Te pongo aqui codigo de ejemplo para hacer un drag&drop

Código Delphi [-]unit carried; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Shape3: TShape; Label1: TLabel; procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } Carried : TControl; X_c : integer; Y_c : integer; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if carried <> nil then exit; Label1.Caption := inttostr(X_c) + ' ' + inttostr(Y_c); Carried := (sender as TControl); Carried.BringToFront; X_c := X; Y_c := Y; end; procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var m, dh : integer; begin m := ( Width - ClientWidth ) div 2; dh := ( Height - ClientHeight) - m; if Carried = nil then exit; Carried.Left := Mouse.CursorPos.x - Left - m - X_c; Carried.Top := Mouse.CursorPos.y - Top - dh - Y_c; end; procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Carried := nil; end; end.


Los eventos tienen q estar ligados a todos los shapes.

saludos.


Este truco esta excelente! gracias! pero aun me faltan varias cosas.... por "pensar"

coso 17-06-2008 21:54:34

de nada, para estamos :D

Neftali [Germán.Estévez] 18-06-2008 09:00:22

Revisa la sección de componentes de mi página; encontrarás uno llamado TSelectOnRuntime, que creo que está pensado para hacer justo lo que necesitas.
Si miras el ejemplo que lo acompaña es casi lo mismo que debes hacer tú, pero en lugar de un vivero y plantas, hay un restaurante y mesas.
Está con código fuente, así que puedes echarle un vistazo a fondo.



Ese mismo componente también está añadido al paquete de componentes del ClubDelphi.


La franja horaria es GMT +2. Ahora son las 14:04:33.

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