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 27-03-2008
Avatar de grandmasterdari
grandmasterdari grandmasterdari is offline
Miembro
 
Registrado: ene 2008
Posts: 46
Poder: 0
grandmasterdari Va por buen camino
Post Componente En Tiempo De Ejecucion

crear un boton en tiempo de ejecucion es facil, pero, ahora si queremos hacer 121 botones en tiempo de ejecucion, y que estos tenga un comportamiento identico al hacerle click no es tan facil
Este es el problema, necesito crear 121 botones que respondan al evento "onmouseclick", "onmouseenter", por lo tanto voy a tener que crear una nueva clase donde esten definido dichos eventos, mi nueva clase se va a llamar TButton1 que hereda de TButton asi ahorrandome definir los 242 eventos, el problema es que, formulario no me envia los eventos a mis objetos. Busque codigo de ejemplo por todos lados, pero no encontre, me gustaria saber si alguien conoce algun link donde tenga el codigo de ejemplo
Responder Con Cita
  #2  
Antiguo 28-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
pero sabes de eso de definir clases? o simplemente lo estas aprendiendo, lo digo porq si declaras mal los eventos que quieres modificar no vas a poder, si muestras la forma como la haces seguro alguien encuentra el fallo
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 28-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
No necesitas definir 121 eventos, basta asignar el mismo a los 121 botones:

Código Delphi [-]
for I := 0 to 120
  Botones[i].OnClick := BotonClick;

donde Botones puede ser un arreglo dinámico de TButton. Lo de la clase está bien, pero te comento lo anterior en caso de que quieras reconsiderarlo.

Bye
Responder Con Cita
  #4  
Antiguo 28-03-2008
Avatar de grandmasterdari
grandmasterdari grandmasterdari is offline
Miembro
 
Registrado: ene 2008
Posts: 46
Poder: 0
grandmasterdari Va por buen camino
Post Aclaracion 01

tienes razon, no queria meter el codigo porque es c++ y no quiero asustar pero un ejemplo en delphi me viene bien

este es el archivo de cabecera (.h)
Código:
//---------------------------------------------------------------------------

#ifndef Image1H
#define Image1H
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TImage1 : public TImage
{
private:
protected:
public:
    __fastcall TImage1(TComponent* Owner);
__published:
//aqui van mis supuestos eventos personalizado (definicion)
    void __fastcall Image1MouseEnter(TObject *Sender);
    void __fastcall Image1Click(TObject *Sender);
};
//---------------------------------------------------------------------------
#endif
este es el codigo (.cpp)
Código:
//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Image1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//

static inline void ValidCtrCheck(TImage1 *)
{
    new TImage1(NULL);
}
//---------------------------------------------------------------------------
__fastcall TImage1::TImage1(TComponent* Owner)
    : TImage(Owner)
{
}
//---------------------------------------------------------------------------
namespace Image1
{
    void __fastcall PACKAGE Register()
    {
        TComponentClass classes[1] = {__classid(TImage1)};
        RegisterComponents("Standard", classes, 0);
    }
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
//aquie van la implementacion de mis eventos (no creo que sea asi)

void __fastcall TImage1::Image1MouseEnter(TObject *Sender)
{
    this->Visible=false;
}
void __fastcall TImage1::Image1Click(TObject *Sender)
{
    this->Visible=false;
}
este codigo aparece por defecto, excepto los metodos "image1mouseenter e image1click" que fueron creados por mi como un intento de implementacion de eventos personalizados

despues de crear mi nueva clase, debo llamarla desde otro lado, la instancio de esta forma

Código:
    TImage1 *temp= new TImage1(Owner);//tambien coloque como parametro Form1, Application y no vi cambios
// ahora modifico los atritutos para acomodar
    temp->Left=2;
    temp->Top=2;
    temp->Picture->LoadFromFile("00060001.BMP");
    temp->Width=200;
    temp->Height=200;
    temp->Parent=Form1; // indica que form1 es el padre, y hace que temp se vuelva visible
espero que sirva
Responder Con Cita
  #5  
Antiguo 28-03-2008
Avatar de grandmasterdari
grandmasterdari grandmasterdari is offline
Miembro
 
Registrado: ene 2008
Posts: 46
Poder: 0
grandmasterdari Va por buen camino
Post Aclaracion 02

KeyBoy tiene razon, le asigno un property donde escribo lo que quiero que haga, pero el problema esta en que el formulario no me pasa el evento porque en el momento de compilacion no estan los objetos implementados ni definidos, por lo tanto, si hago click en el objeto 98 este se tiene que hacer invisible, pero para eso form me debe pasar el evento a ese objeto, el cual este reaccionara con el property definido por mi, dentro del property va un
this->visible=false;
o
this.visible:=false;
Responder Con Cita
  #6  
Antiguo 28-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
No entiendo. Disculpa que escriba en delphi pero me marea C

Tú puedes definir el evento en tu formulario:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    procedure ImageClick(Sender: TObject);
  end;

implementation

procedure TForm1.ImageClick(Sender: TObject);
begin
  (Sender as TImage).Visible := false;
end;

Y es éste el evento que asignas en la ejecución. Dado que Sender es el control que genera el evento, equivale al this (Self en delphi) de tu clase.

Bye
Responder Con Cita
  #7  
Antiguo 28-03-2008
Avatar de grandmasterdari
grandmasterdari grandmasterdari is offline
Miembro
 
Registrado: ene 2008
Posts: 46
Poder: 0
grandmasterdari Va por buen camino
Exclamation cerca

keyboy estoy viendo el equivalente de
(Sender as TImage)

parece que estamos cerca, dentro de un rato doy la solucion (gracias a keyboy)
o sigo con las preguntas
Responder Con Cita
  #8  
Antiguo 28-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Quizá me equivoco, pero creo que el equivalente al operador as en C++ Builder es algo que se llama dynamic typecasting.

Bye
Responder Con Cita
  #9  
Antiguo 28-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Checa este artículo de Brian Long. Ahí explica la equivalencia del as de delphi en C++ Builder.

Bye
Responder Con Cita
  #10  
Antiguo 28-03-2008
Avatar de grandmasterdari
grandmasterdari grandmasterdari is offline
Miembro
 
Registrado: ene 2008
Posts: 46
Poder: 0
grandmasterdari Va por buen camino
Thumbs up Solucionado

Mi codigo de fuente primitivo (porque el programa final es el juego de encerrar al gato, proyecto de la materia gestion de datos -UTN)
juego

codigo de fuente:
http://rapidshare.com/files/102919304/enc_gato.rar.html

captura del programa (al hacer click sobre cualquier imagen esta se hace invisible)


el problema estaba en que yo definia los eventos en la nueva clase creada, cuando en realidad tenia ke definier el evento en el formulario (o en el objeto contenedor, esta vez era el formulario) y despues cuando lo creo en forma dinamica asignar al evento de mi objeto instanciado el evento que he creado en el formulario contenedor

cosas a tener en cuenta.

al crear dinamicamente debo hacer lo siguiente
(temp es mi ojeto creado)
temp->Parent=Form1; //asignar un objeto contenedor, es necesario para que temp pueda verse
temp->OnClick = ImagenClick;//asignacion del evento (gracias keyboy, tu ayuda no solo soluciona los problemas sino suben la moral en el momento de desarrollo, uno no se siente tan solo)

y definir en el formulario contenedor el efento ImagenClick (nombrado a discresion)
en el archivo cabecera de la forma:
Código:
	void __fastcall ImagenClick(TObject *Sender); (dentro de __published)
y en el archivo cpp la implementacion
Código:
void __fastcall TForm1::ImagenClick(TObject *Sender)
{
	TImage *Aux_Ima = (TImage *)(Sender);
	Aux_Ima->Visible=false;
}
donde necesitamos crear un objeto de la misma clase en forma temporal para poder hacer referencia
al que sender nos envia

la ayuda de keyboy me hizo caer en esta pagina que es la fuente y soluciono el problema porque la verdad que no tenia idea para que servia ese tal "sender"
FUENTE

Última edición por grandmasterdari fecha: 28-03-2008 a las 02:46:28.
Responder Con Cita
  #11  
Antiguo 30-04-2008
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Poder: 18
waly2k1 Va por buen camino
Otra duda similar

Tengo 65 Labels
y dos botones, uno seleccionar todos y el otro ninguno
como accedo en un for a cada label para cambiar el color?

lblBarcode01.Color := $00549CCD; // todos
lblBarcode01.Color := $00F4F4F4; // Ninguno

Vi otros hilos pero tratan con propiedades dinamicas o valores y no con objetos como en este caso. La solución por el momento fue 130 lineas demás hehe, pero bueh...

Saludos y gracias!
Responder Con Cita
  #12  
Antiguo 30-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
jop

Código Delphi [-]
for i:= 0 to Form1.ComponentCount-1 do
if Component[i] is TLabel then 
with TLabel(component[i]) do
 if todos then
    Color :=  $00549CCD // todos
  else
    Color := $00F4F4F4; // Ninguno

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 30-04-2008
Avatar de Dedalo
Dedalo Dedalo is offline
Miembro
 
Registrado: abr 2008
Ubicación: Albacete (España)
Posts: 32
Poder: 0
Dedalo Va por buen camino
Yo me hice un componente TTeclado, que es un teclado completo para una aplicacion que hice hace ya varios años. Lo que hice fue crear un array de TButton y unas const que guardaban la posicion, el tamaño y la posicion de las teclas, en tiempo de ejecucion, en el evento OnCreate el propio teclado generaba los botones de las teclas, les asignaba los eventes OnPress, OnMouseenter, etc. Te puedo pasar el componente completo cuando lo encuentre...
Responder Con Cita
  #14  
Antiguo 30-04-2008
Avatar de grandmasterdari
grandmasterdari grandmasterdari is offline
Miembro
 
Registrado: ene 2008
Posts: 46
Poder: 0
grandmasterdari Va por buen camino
Post Aclaracion 0 :S me perdi

me equivoque de hilo, sory..

Última edición por grandmasterdari fecha: 30-04-2008 a las 14:38:08.
Responder Con Cita
  #15  
Antiguo 30-04-2008
Raiza Raiza is offline
Registrado
 
Registrado: abr 2008
Posts: 7
Poder: 0
Raiza Va por buen camino
Angry

Cita:
Empezado por grandmasterdari Ver Mensaje
crear un boton en tiempo de ejecucion es facil, pero, ahora si queremos hacer 121 botones en tiempo de ejecucion, y que estos tenga un comportamiento identico al hacerle click no es tan facil
Este es el problema, necesito crear 121 botones que respondan al evento "onmouseclick", "onmouseenter", por lo tanto voy a tener que crear una nueva clase donde esten definido dichos eventos, mi nueva clase se va a llamar TButton1 que hereda de TButton asi ahorrandome definir los 242 eventos, el problema es que, formulario no me envia los eventos a mis objetos. Busque codigo de ejemplo por todos lados, pero no encontre, me gustaria saber si alguien conoce algun link donde tenga el codigo de ejemplo
Hola amigo necesito informacion sobre componente
Responder Con Cita
  #16  
Antiguo 30-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
uff, que lío. Entre que uno edita y borra el contenido, gente nueva preguntando... ya no sé ni lo que se pregunta.

waly2k1 espero que ese código te sirva de algo, si no, pregunta de nuevo.

Raiza ¿puedes explicar más detalladamente lo que necesitas?
Porque crear 100 o 300 botones y que hagan exactamente lo mismo no es tan complejo (aunque puede llegar a serlo ).

Un ejemplo:
Código Delphi [-]
procedure TForm1.HaciendoClick(Sender:TObject);
begin 
  Showmessage('hecho clic en un botón');
end;

procedure TForm1.Button1Click(Sender:TObject);
var i:integer;
begin 
  for i:= 0 to 5 do
  With Tbutton.Create(Self) do
  begin 
      SetBound(0, i*10, 50,50);
     Parent := self;
     OnClick := HaciendoClick; // asignar el evento.
  end;
end;
Bastaría definirse varios eventos de tipo onmouseDown, onEnter, etc y después asignarlo por código.


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #17  
Antiguo 30-04-2008
Raiza Raiza is offline
Registrado
 
Registrado: abr 2008
Posts: 7
Poder: 0
Raiza Va por buen camino
componente

Lo que necesito es que signica cada componente, cual es su empleo en el formulario y para que se utiliza en la programacion a dime si ay una opcion de como darle color al boton
Responder Con Cita
  #18  
Antiguo 30-04-2008
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Poder: 18
waly2k1 Va por buen camino
Agradecido...

Lepe a mi me vino perfecto el código posteado y la sencillez del mismo,
funciona todo a la perfección.

Muchas gracias como siempre.
Responder Con Cita
  #19  
Antiguo 01-05-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Raiza Ver Mensaje
Lo que necesito es que signica cada componente, cual es su empleo en el formulario y para que se utiliza en la programacion a dime si ay una opcion de como darle color al boton
Hola Raiza,
Por favor respeta el tema del hilo lo que tu estás buscando no viene con la temática tratada en este hilo, veo que eres nuevo/a en clubdelphi. Aprovecho este post para hacerte conocer que existe una guia de estilo (normas). Por favor tomate unos minutos para leerla.

Con respecto a tu problema, se resuelve de una manera muy simple: dandole F1 (ayuda) a cada componente.
Selecciona el componente que deseas estudiar y presiona F1. La ayuda describe cada propiedad y evento que posee.

Por lo que preguntas puedo deducir que eres iniciado en Delphi y/o programación. Para ello sugiero que visites la sección FTP y Wiki, allí encontrarás material de ejemplo y de estudio (manuales, tutoriales, etc).

No se puede cambiar el color a un TButton. Para ello hay dos alternativas básicas:
1. Simular un TButton mediante un TPanel.
2. Usar un componente de terceros.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #20  
Antiguo 02-05-2008
Raiza Raiza is offline
Registrado
 
Registrado: abr 2008
Posts: 7
Poder: 0
Raiza Va por buen camino
amigo

solo necesitaba informacion para inpartir un contenido que tengo que dar de programacion visual pese que tu podia ayudarme gracias chao
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
generar bd My Sql en tiempo de ejecucion meosre MySQL 7 05-01-2008 15:54:30
Crear componente Image en tiempo d Ejecucion Jessica666 Gráficos 6 30-05-2004 01:58:22
Tiempo de ejecucion? st7 Varios 3 11-05-2004 22:03:28
Creacion de componente en tiempo de ejecución cone220 OOP 1 16-09-2003 03:47:16
¿Como saber cuabdo un componente esta invisible en tiempo de ejecuciòn? danytorres Varios 1 20-05-2003 15:51:21


La franja horaria es GMT +2. Ahora son las 05:09:19.


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