Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-03-2008
Jorge Rojas M. Jorge Rojas M. is offline
Miembro
 
Registrado: mar 2008
Posts: 12
Poder: 0
Jorge Rojas M. Va por buen camino
Cool Componente TShape con Label?

Hola, es primera vez que ingreso a este foro y he podido dar respuesta a muchas de mis preguntas por medio de las dudas que plantean los demás usuarios, por lo tanto decidí inscribirme para exponerles mi problema talvéz alguno de ustedes me pueda ayudar o brindar alguna otra solución.

Estoy creando una aplicación con componentes TShape que se generan en tiempo de ejecución, lo cual ya lo logré (MiComponente:=TShape.create(self)) sin embargo es necesario que cada componte que se crea tenga una etiqueta para identificarlo, pero por las características del componente TShape este no cuenta con una propiedad para agregarle Texto y no sé si esto es posible. Qué puedo hacer?. Les comento que para mi es importante poder dibujar un TShape pues la idea de la aplicación es representar un Diagrama de Flujo.

Gracias de antemando por su colaboración.
Responder Con Cita
  #2  
Antiguo 18-03-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
Diagrama de Flujo

Hace tiempo tuve que hacer una aplicación similar (no diagrama de flujo, sino un Organigrama), inicialmente estuve construyendo un componente por mi propia cuenta, hasta que encontre en Devexpress el FlowChart y el OrgChart, dos componentes muy buenos que hacen lo que tu necesitas.

Si no me equivoco creo que TMS Software tambien tiene algo parecido.

Espero que te sirva.

Saludos
Responder Con Cita
  #3  
Antiguo 19-03-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Una forma facil es crear un label arriba del componete TShape.

Otra es crear una clase descendiente de TShape y agregar la propiedad text. Luego en su evento Pain lo escribis.

Algo asi:
Código Delphi [-]
  TMiShape = class (TShape)
  private
    FText: string;
    procedure SetText(value: string);
  protected
    procedure Paint; override;
  public
    property Text: string read FText write SetText;
  end;

...

procedure TMiShape.Paint;
begin
  inherited Paint;
  Canvas.TextOut(10,10, FText);
end;

procedure TMiShape.SetText(value: string);
begin
  FText := value;
  Invalidate;
end;

puede contener errores el codigo pero es la idea.
__________________
[Crandel]
Responder Con Cita
  #4  
Antiguo 20-03-2008
Jorge Rojas M. Jorge Rojas M. is offline
Miembro
 
Registrado: mar 2008
Posts: 12
Poder: 0
Jorge Rojas M. Va por buen camino
Thumbs up

Muchas gracias a ambos por las respuestas y si efectivamente el componente FlowChart es demasiado poderoso para lo que yo quiero desarrollar sin embargo me da un panorama más amplio para eventualmente pensar en algo más elaborado, por otra parte la solución que plantea Crandel me es mucho más económica y cumple con lo que yo quiero en un principio, sólo tengo una duda dado que no he podido probar el código pues estoy en Exámenes de la U, el procedimiento Paint en el momento de ejecutar la línea Canvas.TextOut(10,10,ftext), va escribir en la posición 10,10 del Shape no del Form?

Gracias....
Responder Con Cita
  #5  
Antiguo 20-03-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Cita:
Empezado por Jorge Rojas M. Ver Mensaje
... el procedimiento Paint en el momento de ejecutar la línea Canvas.TextOut(10,10,ftext), va escribir en la posición 10,10 del Shape no del Form?
si, lo deje asi para no complicar mas el ejemplo.

Puedes agregarle propiedades al componente para asignarle el lugar donde escribir o calcular de forma automatica la posicion, segun te guste
__________________
[Crandel]
Responder Con Cita
  #6  
Antiguo 25-03-2008
Jorge Rojas M. Jorge Rojas M. is offline
Miembro
 
Registrado: mar 2008
Posts: 12
Poder: 0
Jorge Rojas M. Va por buen camino
Thumbs up

Cita:
Empezado por Crandel Ver Mensaje
si, lo deje asi para no complicar mas el ejemplo.

Puedes agregarle propiedades al componente para asignarle el lugar donde escribir o calcular de forma automatica la posicion, segun te guste
Muchísimas Gracias Crandel, ya lo pude programar y funciona perfectamente, en cuanto a la posición si estoy tratando de que éste calcule la misma de forma automática, si tienes algo por ahí me puedes ayudar muchísimo. De todos modos muchas Gracias.
Responder Con Cita
  #7  
Antiguo 25-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Un ejemplo, centrando el texo en el shape:

Código Delphi [-]
procedure TMiShape.Paint;
begin
  inherited;
  Canvas.TextOut(
    (Width - Canvas.TextWidth(FText)) div 2,
    (Height - Canvas.TextHeight(FText)) div 2, FText);
end;

Por otra parte, dado que mencionas que quieres hacer un diagrama de flujo, te puede interesar el componente TSimpleGraph, que es gratuito y del que además, puedes estudiar su código. Hay varias referencias al componente en los foros.

Bye
Responder Con Cita
  #8  
Antiguo 25-03-2008
santus santus is offline
Miembro
 
Registrado: ene 2006
Posts: 130
Poder: 19
santus Va por buen camino
Thumbs up

Muy bueno el ejemplo de Crandel. Estaba buscando algo asi, y me parecio genial la idea. No sabia que con el canvas podias hacer tanto.

En cuanto a Jorge, te comento que puedes sacar la posición en la que se encuentra el puntero del mouse con algún evento como OnMouseDown que se activa cuando haces un click sobre el componente, o algo parecido relacionado al Mouse. Así pues se me ocurre que puedes hacer algo como esto:

suponiendo que tu componente tiene dos propiedades de tipo Integer llamados X e Y con sus respectivos seters...

Código Delphi [-]
 
procedure TfMain.TShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ComponenteDeJorge.ValorX := X;
  ComponenteDeJorge.ValorY := Y;
end;

y ya lo tenemos. Despues esta en vos ver que utilidad le quieres dar al shape. Investiga los eventos relacionados con el mouse, que seguro ahí tienes la solución a tu caso particular.
Espero haberte sido de ayuda.
__________________
"El ordenador nació para resolver problemas que antes no existían." Bill Gates.
Responder Con Cita
  #9  
Antiguo 26-03-2008
Jorge Rojas M. Jorge Rojas M. is offline
Miembro
 
Registrado: mar 2008
Posts: 12
Poder: 0
Jorge Rojas M. Va por buen camino
Cita:
Empezado por keyboy Ver Mensaje
Un ejemplo, centrando el texo en el shape:


Código Delphi [-]
procedure TMiShape.Paint;
begin
inherited;
Canvas.TextOut(
(Width - Canvas.TextWidth(FText)) div 2,
(Height - Canvas.TextHeight(FText)) div 2, FText);
end;





Por otra parte, dado que mencionas que quieres hacer un diagrama de flujo, te puede interesar el componente TSimpleGraph, que es gratuito y del que además, puedes estudiar su código. Hay varias referencias al componente en los foros.

Bye

Muy Bueno KeyBoy tanto el procedimiento de Centrado en el Shape así como el TSimpleGraph este ultimo esta excelente voy a revisarlo.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Una ayudita con TShape JerS Varios 8 28-04-2010 04:07:11
Mover un Tshape en ejecucion rex Varios 1 25-11-2006 00:37:20
Componente "tipo label" marceloalegre Varios 3 19-10-2005 16:15:14
Un TShape con personalidad elcigarra Gráficos 7 21-07-2005 04:47:00


La franja horaria es GMT +2. Ahora son las 11:00:23.


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