Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2005
buitrago_listas buitrago_listas is offline
Miembro
 
Registrado: oct 2004
Posts: 33
Poder: 0
buitrago_listas Va por buen camino
Programa Grafico

Necesito confeccionar un programa que me permita colocar objetos en un plano, es más, es para salones de actividades, pero el cliente quiere que se haga graficamente, con objetos, que yo los pinche y los ponga a guusto en un plano, como colocamos los componente en delphi.

¿ Alquien sabe donde encontrar un ejemplo o documentación al respecto ?

Saludos

Fer
Responder Con Cita
  #2  
Antiguo 09-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Puedes implementar algo sencillo y funcional aunque quizá no muy vistoso con objetos TShape (paleta "Additional") (cuadrados, rectángulos, círculos y elipses).

Para moverlos pones su propiedad DragMode en dmAutomatic y manejas los eventos OnDragOver y OnDragDrop del objeto sobre el cual coloques las figuras, por ejemplo, un panel.

Aquí te pongo un ejemplo completo:

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Superficie: TPanel;
    Mesa: TShape;
    Silla: TShape;

    procedure SuperficieDragOver(
      Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);

    procedure SuperficieDragDrop(
      Sender, Source: TObject; X, Y: Integer);

    procedure ObjetoStartDrag(
      Sender: TObject; var DragObject: TDragObject);

  private
    Ancla: TPoint;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SuperficieDragOver(
  Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TShape;
end;

procedure TForm1.SuperficieDragDrop(
  Sender, Source: TObject; X, Y: Integer);
begin
  with Source as TShape do
  begin
    Left := X - Ancla.X;
    Top := Y - Ancla.Y;
  end;
end;

procedure TForm1.ObjetoStartDrag(
  Sender: TObject;
  var DragObject: TDragObject);
begin
  Ancla := (Sender as TShape).ScreenToClient(Mouse.CursorPos);
end;

end.

Asocia los eventos SuperficieDragOver y SuperficieDragDrop al panel Superficie y el evento ObjetoStartDrag a los Shape Mesa y Silla (estos deben estar dentro del panel y con su propiedad DragMode en dmAutomatic).

La variable Ancla que se inicializa en el evento OnStartDrag es para saber la posición relativa de la esquina superior izquierda del objeto respecto del punto desde donde se toma el objeto y así colocarlo correctamente al terminar de arrastrarlo.

Como te digo, no es muy vistoso pero bueno para algo esquemático en el que baste indicar los distintos objetos reales con figuras simples (puedes variar su color y pintarlo parejos o con rayitas).

Algo más sofisticado con la misma idea puedes lograrlo usando objetos TImage en lugar de TShape cargándolos con las imágenes que desees.

EDITO:

Amplío un poco la explicación. Los eventos OnDragOver y OnDragDrop los recibe el objeto sobre el cual se arrastran otros. OnDragOver sirve para que el objeto destino (Sender) determine si va a aceptar o no al objeto móvil (Source) y ajuste el parámetro Accept según el caso (en el ejemplo, el panel acepta al objeto móvil sólo si éste es un TShape). El evento OnDragDrop ocurre una vez que se suelta el objeto. En el ejemplo lo aprovechamos para ajustar las propiedades Left y Top del Shape (Source) para que efectivamente se mueva.

// Saludos

Última edición por roman fecha: 09-03-2005 a las 06:35:40. Razón: Ampliar explicación
Responder Con Cita
  #3  
Antiguo 10-03-2005
buitrago_listas buitrago_listas is offline
Miembro
 
Registrado: oct 2004
Posts: 33
Poder: 0
buitrago_listas Va por buen camino
Muchas gracias

de veras, ahora es la hora de ver si puedo ponerlo a andar
Gracias
Fer
Responder Con Cita
  #4  
Antiguo 10-03-2005
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
Thumbs up Componentes en tiempo de ejecucion Ampliar Porfa

Ramon lei como colocar los componentes en el panel y me parece fantastico la forma de hacerlo, ahora como guardo la informacion en uba base de datos y como la recupero? disculpa molestarte pero me parecio una solucion buenisima
Responder Con Cita
  #5  
Antiguo 10-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Suponiendo que el nº de objetos es fijo y definido anteriormente:

Código Delphi [-]
Var T : Tshape;
begin
for i:=0 to Form1.ComponentCount -1 do
 if Form1.Components[i] is TShape then
 begin
    T := Tshape(Form1.components[i];
    CampoNombre.asstring := T.Name;
    CampoLeft.asInteger := T.Left;
 end;

Creo que es autoexplicativo el codigo,ya sabes .

Saludos
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 08:01:58.


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