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 24-04-2005
quake2420 quake2420 is offline
Miembro
 
Registrado: abr 2004
Posts: 28
Poder: 0
quake2420 Va por buen camino
Mensaje Invalid Pointer Operation

Hola amigos tengo un problema a la hora de devolver un valor de una funcion.
La funcion que he creado es la siguiente, lo que hace es guardar en un array de Tipo imagen ciertas imagenes que estan en un directorio y sacar la maxima anchura de todas ellas, todo lo realiza bien menos cuando sale de la funcion VisgForm.MaxAnchura que me devuelve una valor cero y me sale el Error "Invalid Pointer Operation"
Código Delphi [-]
function TVisGForm.MaxAnchura;
 
 Function MayorElemento(anchura:array of integer;numdiapos:integer):Integer;
 var
 i,anchuramx:integer;
 begin
       anchuramx:=anchura[1];
       showmessage('valor de anchuramx:');
       showmessage(IntToStr(anchuramx));
       for i:=1 to (numdiapos-1) do
       begin
           if (anchuramx <= anchura[i]) then
           begin
                 anchuramx:=anchura[i];
                 showmessage('valor de anchura en la funcion: ');
                 showmessage(IntToStr(anchuramx));
           end;
       end;
 
 Result:=anchuramx;
 end;
 var
 i:Integer;
 anchura:array of integer;
 directorio:string;
 imagenes:array of TJPEGImage;
 numdiapos,anchuraux:integer;
 encontrado:boolean;
 Begin
         directorio:=rutafichA + 'imgs\';
         if  DirectoryExists(directorio) then
         //Comprobacion de si existe el directorio imgs
         begin
            showmessage('Existe el directorio imgs');
            i:=1;
            encontrado:=false;
            while (not (encontrado)) do
            begin
                 //Caso de que exista el directorio imgs comprobamos si dentro del
                 //directorio imgs hay imagenes guardadas
                 if    FileExists(PChar(directorio + 'tmp' + IntToStr(i) + '.jpg')) then
                 begin
                      showmessage('Existe el fichero tmp');
                      i:=i+1;
                 end
                 else
                    encontrado:=true;
            end;
         //Guardamos el numero de imagenes encontradas
         numdiapos:=i-1;
         end;
         Setlength(imagenes,numdiapos);
         Setlength(anchura,numdiapos);
         for i:=1 to numdiapos do
         begin
                 imagenes[i]:= TJPEGImage.Create;
                 imagenes[i].LoadFromFile(directorio + 'tmp' + IntToStr(i) + '.jpg');
                 anchura[i]:=imagenes[i].Width;
         end;
 anchuraux:=MayorElemento(anchura,numdiapos);
 showmessage('valor de anchura cuando sale de la funcion');
 showmessage(IntToStr(anchuraux));
 Result:=anchuraux;

Última edición por Emilio fecha: 25-04-2005 a las 21:12:48. Razón: Poner etiquetas Delphi
Responder Con Cita
  #2  
Antiguo 25-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Al menos en delphi 6
Returns the largest signed value in an integer array.

Unit

Math

Category

Statistical routines

function MaxIntValue(const Data: array of Integer): Integer;

Description

Call MaxIntValue to obtain the largest integer from the Data array.
SetLength crea posiciones para una tabla basándose en el índice cero, tú accedes al 1 en las rutinas.

Para olvidarte de ese problema, usa las funciones High(anchura) y Low(anchura)

Otro detalle, es que si no existe la carpeta imgs, sabe dios que valor tiene 'i' y si tiene el valor cero, SetLegnth(imagenes, -1) dará error.

La variable "encontrado" .... yo más bien le llamaría "Salir"

Espero que aceptes estos comentario de buen grado.


Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 25-04-2005 a las 15:20:06.
Responder Con Cita
  #3  
Antiguo 25-04-2005
quake2420 quake2420 is offline
Miembro
 
Registrado: abr 2004
Posts: 28
Poder: 0
quake2420 Va por buen camino
Muchas gracias Lepe me has salvado la vida, ya no sabia como solucionar el problema.
Muchas gracias a toda la gente del foro.
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 16:41: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