Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-05-2003
craven craven is offline
Miembro
 
Registrado: may 2003
Posts: 78
Poder: 22
craven Va por buen camino
Algo complicado.... Creo...

Hola de nuevo amigos. Tengo una dudilla acerca de cómo hacer una cosa, a ver si podeis ayudarme. Intentaré explicarme lo mas claro posible.
En el programa que estoy haciendo tengo dos ventanas, podemos decir que una de ellas es la principal y la otra una ventana de información. Pues bien, el programa permite crear objetos de un determinado tipo, por ejemplo, cuadrados en 2D, y quiero visualizarlos en la ventana de información. Hasta ahi todo bien, no tengo ningún problema con esto. El problema surge debido a mi deseo de que dichos dibujos de la ventana de información, cada uno independientemente de los demas, responda a eventos del ratón; es decir, si he creado 3 cuadrados, en la ventana de información habrá 3 cuadrados dibujados y yo puedo pinchar sobre cada uno de ellos y moverlos a mi antojo. ¿Cómo podría hacer esto? Si no hay una forma simple de hacerlo, a ver si podeis orientarme. Gracias de antemano. Un saludo.
__________________
craven
Responder Con Cita
  #2  
Antiguo 15-05-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Hace mucho yo hice algo con una funcionalidad similar a lo que vos querés hacer, se trataba de un editor de consultas donde sobre un panel, que era una clase propia, iban tirando tablas de modo drag and drop, y establecían las relaciones entre estas, con el drag and drop de los campos. Como no puedo pasarte los fuentes, porque pertenecen a la empresa para la que trabajo, te voy a contar como lo hice:

El panel contenedor era una clase propia, que tenía todos los métodos de “brodcast” para todos los objetos contenidos. Las tablas y otros objetos, heredaban de una clase que heredaba de un TCustomPanel, estas clases exigían tener como Parent un componente del tipo del “contenedor”.y en los eventos MouseDown, MouseMove, MouseUp, se encontraba la lógica para que se muevan dentro del contenedor. Para las líneas de las relaciones entre las tablas, manejaba regiones irregulares para saber cuando el ratón estaban sobre la línea, creo que lo vas a tener que hacer para tus figuras.

Bueno, eso fue solo una intro, si te interesa, porque se asemeja a lo que querés hacer, te puedo dar una mano. Lamento no poder pasarte los fuentes, pero de a partecitas todo es posible.
Te cuento que todo esto lo hice, con casi sin conocimientos del lenguaje, así que muy difícil no creo que sea.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 15-05-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

Si sólo son cuadraditos lo que quieres mostrar, puedes hacer uso de los TShape, interceptas los eventos del Mouse (OnMouseDown OnMouseMove y OnMopuseUp) para conseguir tu objetivo. Aquí va un ejemplo del código que acabo de probar, debes enlazar todos los Shapes a estos eventos:

Código:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    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
    IniP, IniPos : TPoint;
    Pressed : Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  with TShape(Sender) do
  begin
    IniP := ClientToScreen (Point(X, Y));
    IniPos := Point (Left, Top);
  end;
  Pressed := TRUE;
end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  P : TPoint;
begin
  if Pressed then
  with TShape(Sender) do
  begin
    P := ClientToScreen (Point(X, Y));
    Left := IniPos.X + P.X - IniP.X;
    Top := IniPos.Y + P.Y - IniP.Y;
  end;
end;

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

end.
A ver si te sirve

Última edición por andres1569 fecha: 09-08-2003 a las 19:33:42.
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


La franja horaria es GMT +2. Ahora son las 02:11:53.


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