quake2420
24-04-2005, 17:07:03
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"
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;
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"
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;