[Lazarus-es] Error en funci?n while
Ismael L. Donis Garc?a
ismael en citricos.co.cu
Lun Nov 23 19:10:11 CET 2009
El showmessage lo puse para ver el error en que linea era, porque no sabía
en que linea lo daba.
Y por ello pude detectar que era en la linea:
while (not bolhenc) and (not eof(oldfileini)) do
aunque se refleja en la linea:
bolhenc := true;
Yo antes le tenía puesto break y con break puesto se refleja en la línea del
break, pero realente ocurre cuando entra a la linea del while
Cuando lo probé con break era el while de la siguiente forma:
while not eof(oldfileini) do
Y de las 2 formas da el error: Unknown Run-Time error: 104
Osea la función de puebas las puedes tomar de la siguiente forma y probarlas
desde un boton, aunque realmento yo las necesito que se ejecute cuando se
muestre el formulario.
procedure TForm1.Button1Click(Sender: TObject);
var
fileini: String;
begin
{$IFDEF UNIX}
fileini := GetEnvironmentVariable ('HOME') + '/mprima.ini';
{$ELSE}
fileini := ExtractFilePath (Application.Exename) + 'mprima.ini';
{$ENDIF}
if datos () then
Showmessage ('El archivo ya existía') // Esto es solo para probar si
funciona realmente aquí va otra cosa
else
Showmessage ('El archivo fue creado'); // Esto es solo para probar si
funciona realmente aquí va otra cosa
end;
function TForm1.datos(): Boolean;
var
fileini: String;
logfile: TFileStream;
begin
{$IFDEF UNIX}
fileini := GetEnvironmentVariable ('HOME') + '/mprima.ini';
{$ELSE}
fileini := ExtractFilePath (Application.Exename) + 'mprima.ini';
{$ENDIF}
if FileExists (fileini) then
if IniExistHead(fileini, 'Datos') = false then
result := false
else
result := true
else
begin
logfile := TFileStream.Create (fileini, fmCreate or fmOpenReadWrite);
logfile.free;
result := false;
end;
end;
function TForm1.IniExistHead(fileini: string; head: string): boolean;
var
bolhenc: boolean;
strlinea, strhead: string;
oldfileini: TextFile;
begin
bolhenc := false;
AssignFile (oldfileini, fileini);
Append (oldfileini); // abre un archivo existente
while (not bolhenc) and (not eof(oldfileini)) do
begin
readln(oldfileini, strlinea);
strlinea := trim(strlinea);
if strlinea <> '' then
if leftstr(strlinea, 1) <> ';' then
if strlinea = strhead then
begin
bolhenc := true; // al documentar la proxima linea el error se
da aquí
//break; // si descomento esta linea me da error aqui
end;
end;
closefile(oldfileini);
result := bolhenc;
end;
Saludos
=========
¦¦ ISMAEL ¦¦
=========
----- Mensaje original -----
De: "JoshyFun" <joshyfun en gmail.com>
Para: "Spanish version of Lazarus List"
<lazarus-es en lists.lazarus.freepascal.org>
Enviado: lunes, 23 de noviembre de 2009 10:42
Asunto: Re: [Lazarus-es] Error en funci?n while
Hello Ismael,
Monday, November 23, 2009, 5:51:40 PM, you wrote:
ILDGa> He estado todo este fin de semana atascado en un error que me da la
función
ILDGa> while, he tratado por todas las vías que conozco y no he podido
solucionar
ILDGa> el problema.
ILDGa> Al ejecutar la función while en una función que a la ves es llamada
por otra
ILDGa> función y que esta otra función es llamada por un evento, me ocurre
el
ILDGa> error.
Lo primero sería decir cuál es el error que te da ;)
Veo que llamas al procedimiento desde "FormShow" el cual se invoca
cada vez que muestras el formulario, y como tienes ShowMessage, cada
vez que aceptas el showmessage debería invocarse un nuevo "FormShow".
Vamos que hacer cosas en el FormShow no es buena idea normalmente. Si
quieres que algo suceda una vez se ha cargado el form tiene el evento
"manual" AfterConstruction:
procedure AfterConstruction(); override;
procedure AfterConstruction();
begin
showmessage('Esto sólo pasa una vez, cuando se ha creado el form por
completo');
end;
Puede ser que ese sea el error o no, pero sin saber cual es el error,
mal asunto.
--
Best regards,
JoshyFun
_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
More information about the Lazarus-es
mailing list