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 08-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Crash en programa, o Bucle Infinito?

Salud amigos donde quiera que se encuentren

Hoy les traigo un pequeño inconveniente que presenta mi codigo
aun no lo he podido descubrir aunque continuo buscando a ver
donde estara ese nudo...
el problema es que cuando lo ejecuto
y le doy al boton REPARTIR, se queda colgado.

Ademas no cambia la imagen en los procedimientos:

Código Delphi [-]
procedure TForm2.BotRepartirMouseEnter(Sender: TObject);

Código Delphi [-]
procedure TForm2.BotRepartirMouseLeave(Sender: TObject);

lo que es completamente extraño, ya que este Form2
es llamado desde un Form1, en el cual el boton efectivamente
funciona con el mismo procedimiento.

ese es un problemita que me paso en un programa anterior,
ahora el problema del bucle o crash creo que esta en el procedimiento:

Código Delphi [-]
Procedure Barajar();

o en su defecto:

Código Delphi [-]
Procedure Repartir();

Agradeceria mucho de su parte si lograran conseguir el error
continuare buscando, en caso de encontrarlo, como siempre colocare la respuesta aqui.

Anexo el codigo

Saludos
Best,
Martin


Código Delphi [-]
unit Versus;

interface

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

type
  TForm2 = class(TForm)
    Tablero: TImage;
    BotRepartir: TImage;
    ImagenCentral: TImage;
    procedure BotRepartirClick(Sender: TObject);
    procedure BotRepartirMouseEnter(Sender: TObject);
    procedure BotRepartirMouseLeave(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  VCartas:      Array[1..40]of Integer;           //Vector para el mazo
  VEl:          Array[1..20]of Integer;            //Vector para las cartas de EL
  VYo:          Array[1..20]of Integer;            //Vector para las cartas de YO

implementation
{$R *.dfm}


Procedure InicializarVectores();
Var
   I:Integer;
Begin
//Inicializamos los 3 Vectores en 0
  For I:=1 to 40 do
    VCartas[i]:=0;
  For I:=1 to 20 do
    VEl[i]:=0;
    VYo[i]:=0;
End;

Procedure Barajar();
Var
  i, NumRandom, Aux, j:integer;
Begin
  InicializarVectores();
  i:=1;
  while i<=40 do
    begin
      NumRandom:=RandomRange(1,40)+1;
      Aux:=0;
      for j:=1 to 40 do
        begin
          if VCartas[j]=NumRandom then
          begin
            Aux:=1;
          end;
        end;
      if Aux=0 then
        begin
          VCartas[i]:=NumRandom;
        end;
      if VCartas[i]>0 then
        begin
          i:=i+1;
        end;
   end;
End;

Procedure Repartir();
Var
   I, Par, Impar:Integer;
Begin
     Par:=2;
     Impar:=1;
     for I:=1 to 20 do
       VEl[i]:=VCartas[Impar];
       VYo[i]:=VCartas[Par];
       Impar:=Impar+2;
       Par:=Par+2;
End;

procedure TForm2.BotRepartirMouseEnter(Sender: TObject);
begin
   Form2.BotRepartir.Picture.LoadFromFile(Getcurrentdir()+'\Imagenes\Controles\BotRepartirPres.bmp');
end;

procedure TForm2.BotRepartirMouseLeave(Sender: TObject);
begin
   Form2.BotRepartir.Picture.LoadFromFile(Getcurrentdir()+'\Imagenes\Controles\BotRepartirNoPres.bmp');
end;

procedure TForm2.BotRepartirClick(Sender: TObject);

Begin
     Barajar();
     Sleep (1000);
     Form2.ImagenCentral.Picture.LoadFromFile(Getcurrentdir()+'\Imagenes\Etiquetas\Barajando.bmp');
     Sleep (2000);
     Form2.ImagenCentral.Picture.LoadFromFile('');
     Repartir();

End;

end.
Responder Con Cita
  #2  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No sé qué problema tendrá, pero sí que veo algo poco práctico: vas cargando unas imágenes del disco, constantemente.
¿Por qué no las cargas en el programa y te ahorras de estar cargando una y otra vez, otra vez, y otra vez...?
Responder Con Cita
  #3  
Antiguo 08-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No sé qué problema tendrá, pero sí que veo algo poco práctico: vas cargando unas imágenes del disco, constantemente.
¿Por qué no las cargas en el programa y te ahorras de estar cargando una y otra vez, otra vez, y otra vez...?
Porque no se como hacerlo
Si compartieras tu sabiduria conmigo
Responder Con Cita
  #4  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sin son pequeñas puedes cargalas en un TImageList, por ejemplo.
O usa un Timage para cada una, y lo pones visible o invisible, según te haga falta.
Responder Con Cita
  #5  
Antiguo 08-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Nota:
Cuando corro el programa y le doy click al boton Repartir,
el programa se cuelga por un par de segundos,
y luego me pide continuar o interrumpir el proceso
le doy a continuar y me aparece un mensaje con lo siguiente:

Uknown picture file extension (.)

a lo que asumo que el problema es con alguna de las imagenes...
ya realmente que no se que hacer con esto, buscare sobre
como almacenar las imagenes como en una base de datos
y usarla desde alli como dice Casimiro
Responder Con Cita
  #6  
Antiguo 08-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Sin son pequeñas puedes cargalas en un TImageList, por ejemplo.
O usa un Timage para cada una, y lo pones visible o invisible, según te haga falta.
Por ejemplo:
las dos imagenes del boton repartir, son del mismo tamaño
140x40, y la del mensaje Barajando es de 339x115

y todavia faltan las 40 cartas que son de 55x82
hay un problema en el boton repartir, no hace el cambio
de imagen cuando paso el mouse por el.

pero en el Form1 funciona correctamente con otro boton
buscare sobre TImageList
Responder Con Cita
  #7  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Wink

Cita:
Empezado por martini002 Ver Mensaje
Cuando corro el programa y le doy click al boton Repartir,
el programa se cuelga por un par de segundos,
Supongo que "se cuelga un par de segundos" es simplemente porque tienes un sleep de retraso
Código Delphi [-]
Barajar();
Sleep (1000);  //  1 segundo
Form2.ImagenCentral.Picture.LoadFromFile(Getcurrentdir()+'\Imagenes\Etiquetas\Barajando.bmp');
Sleep (2000);  // 2 segundos
Form2.ImagenCentral.Picture.LoadFromFile('');
Repartir();
Si piensas que alguna imagen está mal, prueba el programa sin imágenes, a ver qué hace.
Pon en comentario las líneas donde cargas imágenes... y prueba.

Código Delphi [-]
Barajar();
Sleep (1000);  //  1 segundo
// Form2.ImagenCentral.Picture.LoadFromFile(Getcurrentdir()+'\Imagenes\Etiquetas\Barajando.bmp');
Sleep (2000);  // 2 segundos
// Form2.ImagenCentral.Picture.LoadFromFile('');  // por cierto, aquí no cargas nada, puede ser ese el error
Repartir();
Responder Con Cita
  #8  
Antiguo 08-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Este es el mensaje de error que me muestra la consola

Código Delphi [-]
First chance exception at $75719617. Exception class EInvalidGraphic with message 'Unknown picture file extension (.)'. Process Proyecto40Base.exe (5608)


Edito:
No habia visto tu comentario en el codigo.
"// por cierto, aquí no cargas nada, puede ser ese el error"

Excelente
ese es el problema, no lo reconoce, lo que yo queria hacer alli era
que la imagen fuera removida, y que quedara en vacio
el Timage, ahora el problema es hacer que funcione el boton
cuando le paso el mouse no cambia la imagen,
esto ya me paso en otro programita,
cual sera la forma de solucionarlo?

Problema del crash Resuelto

Última edición por martini002 fecha: 08-06-2012 a las 13:20:26.
Responder Con Cita
  #9  
Antiguo 08-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Disculpen por el doble post,
pero no pude editar el anterior
ya resolvi lo de la imagen, fue sencillo
pero si alguien con mas experiencia lo puede explicar
seria muy conveniente, lo que hice fue lo siguiente,

El Form2 es llamado desde un boton en el Form1
Las imagenes del Form2 no se cargaban correctamente
porque el modo de llamado desde el Form1 era el siguiente:

Código Delphi [-]
procedure TForm1.BotVersusClick(Sender: TObject);
begin
  with TForm2.Create(Self) do
  try
    Show
  finally
    Free
  end
end;

En mi ignorancia nunca supe realmente que esto influyera
hasta que se me ocurrio; esa forma la encontre en alguna web
donde explicaban como mostrar un Form llamado desde otro,
y realmente asi es como he aprendido lo poco que se,
simplemente buscando lo que necesito, bien ahora la forma
en que pude solucionarlo:

Código Delphi [-]
procedure TForm1.BotVersusClick(Sender: TObject);
begin
  Form2.Show; // -.-'
end;

Saludos, gracias Casimiro por tu ayuda
Responder Con Cita
  #10  
Antiguo 08-06-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Hola Martín!

El siguiente código está malo:
Código Delphi [-]
procedure TForm1.BotVersusClick(Sender: TObject);
begin
    with TForm2.Create(Self) do
    try
        Show;
    finally
        Free;
    end
end;

Estás liberando el formulario inmediatamente después que lo creas. Intenta con este código:
Código Delphi [-]
procedure TForm1.BotVersusClick(Sender: TObject);
begin
    TForm2.Create(Self).show;
end;

En el evento "OnQueryClose" del Form2, agrega el siguiente código:
procedure TForm2.OnQueryClose(...);
begin
action := caFree;
end;


A cómo te ha dicho Casimiro, las imágenes estaban muy mal administradas. Pero no te preocupes, así es cómo uno aprende

Si ahora vas a utilizar imágenes almacenas en objetos TImage, puedes adaptar tu viejo código de la siguiente manera:
Código Delphi [-]
procedure TForm2.BotRepartirMouseEnter(Sender: TObject);
begin
    Self.BotRepartir.Picture := Image1.Picture;
end;

procedure TForm2.BotRepartirMouseLeave(Sender: TObject);
begin
   Self.BotRepartir.Picture := Image2.Picture;
end;
Fíjate que en código no utilizo la variable "Form2". En su lugar utilizo una variable especial llamada Self. Utilizar esta variable es la forma más segura para manipular el formulario/clase con código dentro de la misma clase.

Saludos!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #11  
Antiguo 08-06-2012
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Hola Chris.

Hermano la cuestion es que no se utilizar los objetos TImage,
estuve buscando info pero no encontre algo que me explicara bien
por el momento las he seguido usando como hasta ahora habia hecho
llamandolas de un arhivo externo; en un par de horas avance bastante
en este proyecto, ya reparte las cartas aleatoriamente con las imagenes y todo
los botones funcionan perfectamente; el siguiente codigo quedo asi:

Código Delphi [-]
procedure TForm1.BotVersusClick(Sender: TObject);
begin
  Form2.Show; 
end;

Lo que hace que funcionen los botones y las imagenes

ahora lo que no entiendo es lo siguiente:

Código Delphi [-]
//En el evento "OnQueryClose" del Form2, agrega el siguiente código:
procedure TForm2.OnQueryClose(...);
begin
action := caFree;
end;

Nunca he sabido que quiere decir Query,
para que funciona este codigo?

y supongo que el siguiente es para llamar las imagenes de
la lista de imagenes en el objeto TImage?

Código Delphi [-]
procedure TForm2.BotRepartirMouseEnter(Sender: TObject);
begin
    Self.BotRepartir.Picture := Image1.Picture;
end;

procedure TForm2.BotRepartirMouseLeave(Sender: TObject);
begin
   Self.BotRepartir.Picture := Image2.Picture;
end;

La cuestion es que no se trabajar con TImage aun!
Excelente intervencion
gracias Chris

Última edición por ecfisa fecha: 08-06-2012 a las 19:08:43. Razón: corregir etiquetas
Responder Con Cita
  #12  
Antiguo 08-06-2012
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
Yo que tu a los fors de Repartir() e InicializarVectores() les coloco su begin-end porque dudo que se ejecute más allá de la primera instrucción dentro del ciclo
Adivino... ¿vienes desde Visual Boshit ?

Por cierto, que es eso de sumar +2 a una variable par e impar. ¡Que ganas de complicarse! Y en inicialiarvectores para que 2 fors si con uno puedes hacer todo el trabajo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
Server Crash en Nevrona mlara Noticias 5 21-02-2012 13:51:24
Ejemplo de ciclo o bucle infinito ecfisa Humor 4 09-07-2010 17:44:59
Interbase server crash! fredycc Firebird e Interbase 4 08-01-2009 15:22:31
Bucle infinito al intentar abrir un tableset Shikanda Conexión con bases de datos 3 29-08-2007 09:18:00
bucle infinito emeceuy Varios 10 20-07-2007 20:28:55


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


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