Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Abrir archivo Delphi (https://www.clubdelphi.com/foros/showthread.php?t=63067)

Maria85 28-01-2009 10:12:37

Abrir archivo Delphi
 
Hola otra vez a todos!!

Estoy intentando crear un método que pulsando en un botón me abra un archivo...Me sale el diálogo de abrir bien, pero cuando selecciono uno y le doy a aceptar me sale el siguiente error:

Object reference is not set to an instance object

Si alguien pudiera decirme algo...
Os pongo aqui abajo el método:

Código Delphi [-]
 
 
procedure TTFormMain.OpcionAbrir(Sender: TObject);
var
  nombreArchivo: string;
  i: integer;
  ficheroAbierto: integer;
begin
  ficheroAbierto:=0;
  if DialogoAbrir.Execute then
    begin
        inc(numeroPestana);
        for i:=0 to numeroPestana-1 do
          begin
                if (numeroPestana<>0) and
                    (compareText(DialogoAbrir.FileName,listaVentanas[i].pestana.hint)=0) then
                  begin
                    nombreArchivo:='EL FICHERO: '+DialogoAbrir.FileName+' YA ESTA ABIERTO';
                      ShowMessage(nombreArchivo);
                    dec(numeroPestana);
                    ficheroAbierto:=1;
                  end;
          end;

       if ficheroAbierto=0 then
         begin
                AbrirEditor(DialogoAbrir.FileName);
                listaVentanas[numeroPestana].editor.Lines.LoadFromFile(DialogoAbrir.FileName);
                listaVentanas[numeroPestana].guardado := true;
                listaVentanas[numeroPestana].carpetaTrabajo := DialogoAbrir.FileName;
                nombreArchivo := ObtenerNombrePestana(listaVentanas[numeroPestana].carpetaTrabajo);
                delete(listaVentanas[numeroPestana].carpetaTrabajo,
                       pos(nombreArchivo,listaVentanas[numeroPestana].carpetaTrabajo),
                       length(listaVentanas[numeroPestana].carpetaTrabajo));
         end;
    end;
end;

Neftali [Germán.Estévez] 28-01-2009 10:20:21

¿Has ejecutado paso a paso?
¿Podrías decirnos en qué línea te está fallando?

Maria85 28-01-2009 10:27:33

El problema es que soy nueva en Delphi...lo he ejecutado entero y compila bien. Solo me da el error cuando le doy a abrir...pero una vez ejecutado el programa...

Neftali [Germán.Estévez] 28-01-2009 11:29:32

Cita:

Empezado por Maria85 (Mensaje 336223)
El problema es que soy nueva en Delphi...lo he ejecutado entero y compila bien. Solo me da el error cuando le doy a abrir...pero una vez ejecutado el programa...

OK. No hay problema.
Desde el editor, colocate en la línea:

Código Delphi [-]
if DialogoAbrir.Execute then

Y pulsa F5. verás que en esa línea se coloca un BreakPoint (la marca roja sobre la línea).



Ahora ejecuta el programa y cuando llegue a ese punto se parará y te indicará con una flecha verde la línea actual que se está ejecutando.



Y vas pulsando F8 se irá ejecutando el programa "paso a paso" hasta que llegues a la línea que falla. De esta forma puedes saber con más detalle en qué lugar está fallando.

Maria85 28-01-2009 11:49:44

Vale, se me para cuando llega a la linea:

inc(numeroPestana);

asi que supongo que tendrá que ser que no obtengo bien el numero de pestaña o algo así.seguiré investigando...

gracias por ayudarme

Neftali [Germán.Estévez] 28-01-2009 12:30:41

¿Como tienes definida esa variable?
Prueba con:

Código Delphi [-]
  num := num + 1;

Maria85 28-01-2009 12:45:27

He descubierto porque me fallaba, no era lo de inc(num) que te he dicho antes. Te escribo el código para que lo veas. La parte que he comentado es la que me fallaba( que se refiere a que si el fichero está abierto no me lo vuelve a abrir). Asi que por lo menos ahora me lo abre aunque sea siempre. Ahora tengo que arrglar esa parte para que me funcione.

Código Delphi [-]
 
procedure TTFormMain.OpcionAbrir(Sender: TObject);
var
  nombreArchivo: string;
  i: integer;
  ficheroAbierto: integer;
begin
  ficheroAbierto:=0;
  if DialogoAbrir.Execute then
    begin
        inc(numeroPestana);
        for i:=0 to numeroPestana-1 do
              {
          begin
                if (numeroPestana<>0) and
                    (compareText(DialogoAbrir.FileName,listaVentanas[i].pestana.hint)=0) then
                  begin
                    nombreArchivo:='EL FICHERO: '+DialogoAbrir.FileName+' YA ESTA ABIERTO';
                      ShowMessage(nombreArchivo);
                    numeroPestana:=numeroPestana-1;
                    ficheroAbierto:=1;
                  end;
          end;
               }
       if ficheroAbierto=0 then
         begin
                AbrirEditor(DialogoAbrir.FileName);
                listaVentanas[numeroPestana].editor.Lines.LoadFromFile(DialogoAbrir.FileName);
                listaVentanas[numeroPestana].guardado := true;
                listaVentanas[numeroPestana].carpetaTrabajo := DialogoAbrir.FileName;
                nombreArchivo := ObtenerNombrePestana(listaVentanas[numeroPestana].carpetaTrabajo);
                delete(listaVentanas[numeroPestana].carpetaTrabajo,
                       pos(nombreArchivo,listaVentanas[numeroPestana].carpetaTrabajo),
                       length(listaVentanas[numeroPestana].carpetaTrabajo));
         end;
    end;
end;

Neftali [Germán.Estévez] 28-01-2009 13:20:18

La línea que veo con más posibilidades (de fallar ;)) es la del CompareText, pero lo mismo de antes. Ejecuta paso a paso a ver si afinas la línea.

Un saludo.

Maria85 28-01-2009 13:39:19

si es esa, la de compareText...


La franja horaria es GMT +2. Ahora son las 01:23:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi