[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