Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
Dibujar laberinto en formulario

Hola a todos!!

Soy nuevo en el uso de C++ builder 5 y tengo una pregunta. En clase de programacion nos han pedido dibujar un formulario con una serie de botones y algo para representar un laberinto en forma de matriz (con casillas). ¿Que herramiento de c++ builder puedo usar para dibijar esto? He estado investigando y puedo usar un frame, pero no sé como dibujar las rayas de las celdas...

Si más daros las gracias
Responder Con Cita
  #2  
Antiguo 05-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Puedes usar 4 TShape con forma de línea dentro de cada frame; cuando quieras que se vea la linea, haces visible el shape que corresponda.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 05-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
No entiendo muy bien el uso de shape para hacer las celdas de la matriz, ademas las dimensiones de la matriz las va a insertar el usuario y se tiene que mostrar esa matriz en el frame. Tambien necesito que las celdas de la matriz se pueden pulsar

Saludos y gracias
Responder Con Cita
  #4  
Antiguo 05-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Hemos enfocado el asunto de forma distinta.

Yo he pensado en hacer un Frame que sea la propia celda, dentro de ese Frame incluyo los 4 TShapes para simular un borde de color.

En tiempo de ejecución el usuario dice que quiere una matriz de 5x6, pues creamos 30 frames situados en 5 filas por 6 columnas, cada frame tendrá dentro los 4 Tshapes ocultos y cuando el usuario haga clic sobre el frame, según la coordenada del clic, se le hace visible el shape que corresponda.

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

Gracias por contestar!. Otra pregunta, ¿los frame tienen funciones para mostrar texto y recuperar tecto?. Mi compañero y yo hemos estado viendo las funciones del frame y no vemos la forma de mostrar texto y recuperar.

Gracias por la ayuda
Responder Con Cita
  #6  
Antiguo 07-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
¿cuala?

para crear un Frame, File -> New -> Frame

Es como un Form, puedes poner labels, shapes, Edits.... lo que quieras sobre el frame.

Ahora en tu Form1 quieres crear 10 frames, en el código de un botón puedes poner algo así:
Código Delphi [-]
var i, LastLeft, LastTop :integer;
     F :TMiFrame; // el que has creado:
begin 
  LastLeft := 20;
  LastTop := 20;
  for i:= 1 to 20 do
  begin 
     F := TMiFrame.Create(self);
     F.top := lastTop;
     F.Left := LastLeft;
     inc(LastLeft, F.width);
     if LastLeft  > 700 then
     begin 
       LastLeft:= 20;
       LastTop := LastTop + F.Height;
    end;
  end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 07-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
Ahhh!! Ya voy pillando, todo lo que creas en el Frame "padre" (por decirlo de alguna manera) lo heredan los hijos. Es que no me habia fijado para que servia el Frame principal, XDD.
Oye Lepe muchas gracias por la ayuda, si me surgen cosas ya las ire posteando.

Gracias tio!!
Responder Con Cita
  #8  
Antiguo 10-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
Hola de nuevo!

Estoy creando los frames de forma dinamica como me explicaste pero me da errores en ejecucion ("Violation Access"). Basicamente lo que hago es esto:
La clase Frame padre tiene un constructor de esta forma;
Código:
TFrame:TFrame (TComponent){"Aqui no hay nada"}
A la hora de crear los frames hago un bucle asi:
Código:
for (int i=0;i<NumCasillas;i++)
 for (int j=0;i<NumCasillas;j++)
{
 TFrame *aux= new TFrame("Aqui no estoy muy seguro de que pasarle");
 casillas[i][j]= aux;
 casillas[i][j]->Name="X";
 casillas[i][j]->Legth="100";
 ......
aux=null;
 }
La variable casillas es una matriz de punteros a los frames, ya que sino perdemos las referencias con estos frames.
Bueno el tema esta en que cuando hago casilla[i][j]->Name="X"; Me da error de memoria... si pongo aux->Name="X" antes de ponerlo a Null tambien me da error.
Alguna idea??
Ah tambien necesito de una clase que tenga implementada una cola.Hay alguna standar que la tenga???

Saludos
Responder Con Cita
  #9  
Antiguo 13-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
Alguna ayuda por favorrrrr
Responder Con Cita
  #10  
Antiguo 14-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo en C y C++ no me aventuro a decir nada, sé que hay gente del foro que maneja C, será mejor esperar por ellos.

Colas, bueno si no recuerdo mal: TStack, Tqueue, TObjectLis (esto es como un array dinámico), revisa la ayuda, allí te puede dar más resultados relacionados.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 14-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
¿Has reservado memoria para los arrays?
El segundo bucle for (int j=0;i<NumCasillas;j++) , ¿Te das cuenta que no tiene control?. i no se incrementa, solo j y no existe un condicional de control para j=> bucle infinito.... ¿No querrás decir for (int j=0;j<NumCasillas;j++)

Código:
TFrame **casillas = new *TFrames[NumCasillas];

for (int i=0;i<NumCasillas;i++)
   //for (int j=0;i<NumCasillas;j++)  
  for (int j=0;j<NumCasillas;j++)
  {
    TFrame *aux= new TFrame("Aqui no estoy muy seguro de que pasarle");
    casillas[i][j]= aux;
    casillas[i][j]->Name="X";
    casillas[i][j]->Legth="100";
    ......
    aux=null;
  }
Responder Con Cita
  #12  
Antiguo 14-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
Hola!!
Si de eso ya me habia percatado... el problema que tengo es que no sé que parametro pasarle al constructor TFrame. Le he pasado de todo y no me dibuja nada de nada.
si hago
Código:
TFrame *aux=new TFrame(...);
aux->Top=100
...
Le digo que me dibuje solo un Frame y no me lo hace. Al constructor hay que pasarle un TComponent y no sé que variable pasarle
Responder Con Cita
  #13  
Antiguo 14-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Yo pensé que lo harias con TShape.

Saludos.

Edito:

TFrame no sirve para dibujar, sino para implementar frames preprogramados o nuevos controles que a su vez contengan mas controles. Un TFrame a secas, no sirve para nada....

Última edición por escafandra fecha: 14-04-2008 a las 16:19:47.
Responder Con Cita
  #14  
Antiguo 14-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
Hola!!

Hombre los TShapes solo me ofrecen dibujar cuadrados,rectagulos y no sé que más... El tema esta en que yo he creado el laberinto a mano, creando los frames 1 a 1, lo que pasa q asi es una forma poco elegante y además las dimensiones del laberinto se hace en tiempo de ejecucion. Ademas quiero que cada casilla tenga un valor, y eso con TShape como lo haria??

Muchas Gracias por la ayuda!

Edito:
He probado a crear TShape de forma dinamica, tampoco puedo!!! El constructor me pide un TComponent igual que el TFrame..
Lo he creado asi:
Código:
TShape *aux=new TShape(this??);//Sigo sin saber que poner
  aux->Shape=stRectangle;
  aux->Top=250;
  aux->Height=320;
  aux->Visible=true;
Y sigo son ver nada, ni Shape ni Frame... como narices creo este tipo de cosas de forma dinamica???

SAludos

Última edición por bochan fecha: 14-04-2008 a las 22:23:46.
Responder Con Cita
  #15  
Antiguo 14-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Tanto para TShape como TFrame o cualquier componente, debes inicializarlo con un objeto TComponent. TComponent es clase madre de todos los controles. Por lo tanto un puntero al formulario donde están tun controles creados dinámicamente te sirve para inicializar. No existe constructor por defecto.

Código:
TShape *aux=new TShape(this); // ó aux = new TFrame(this);
InsertControl(aux); //inserta el control en un TWinControl (el formulario Form1...)
aux->Shape=stRectangle;
aux->Top=250;
aux->Height=320;
aux->Visible=true;

Saludos.
Responder Con Cita
  #16  
Antiguo 15-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
Hola!!

Pos ya parece que va tirando, lo único que me faltaba era poner el InsertControl(aux);... muchas gracias por la ayuda. Si tengo más dudas ya las posteare.

Gracias por vuestra atencion
Responder Con Cita
  #17  
Antiguo 16-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
Hola de nuevo!

Ya tengo creado el laberinto, al final he usado frames porque con los shape no lo veia muy claro XD. Ahora me surje una duda. Los frames son de una clase padre Frame2 (en mi caso), todo lo que creo en el padre lo hereda los hijos, ahora bien si creo una variable en el padre cada hijo tendra su variable propia, hasta ahi bien pero si quiero una variable global que pueden modificar todos los hijos, como lo puedo hacer???

Gracias
Responder Con Cita
  #18  
Antiguo 16-04-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Repasa las variables static de la clase. Estas sólo se pueden modificar por funciones miembros también declaradas como static. Se inicializan fuera del constructor, en código externo a la clase. se caracterizan por tener un valor común en todos los objetos de esa clase.

Otra posibilidad es crear una variable static en una función miembro. Será estable para todas las llamadas a esa función, vengan del objeto que vengan.

La última posibilidad es una variable global que no pertenezca a la clase y a la que se acceda desde cualquier parte del código.

Lo ortodoxo es una variable static de la clase.

Saludos.
Responder Con Cita
  #19  
Antiguo 18-04-2008
bochan bochan is offline
Miembro
 
Registrado: abr 2008
Posts: 11
Poder: 0
bochan Va por buen camino
Hola!!!

Gracias por la ayuda, al final he creado una variable static en la funcion que acceden todos los hijos

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dibujar en DBImage Caral Varios 3 23-11-2007 07:46:21
Cambiar propiedad de componente del formulario padre al cerrar el formulario hijo jzginez OOP 5 22-06-2007 21:40:51
Dibujar lineas mcnudi Impresión 3 09-11-2006 13:52:54
Dibujar línea dicatek Gráficos 8 29-07-2006 16:47:26
pasar datos de un formulario vista a cualquier formulario @-Soft OOP 2 28-09-2004 21:56:01


La franja horaria es GMT +2. Ahora son las 08:21:07.


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