Einzelnen Beitrag anzeigen

Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Wieso stürzt das Programm ab oder...?

  Alt 5. Okt 2006, 20:22
Hallo,

das verstehe ich nicht, das verstehe ich überhaupt nicht. Was ist denn da los?
Formular mit einem Label und einem Button.
Bitte nur unter der IDE bei Benutzung des internen Debuggers starten!!!
Folgende Formular-Unit:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    sl: TStringList;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if assigned(sl) then sl.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: longint;
begin
  sl:=Tstringlist.Create;
  try
    for i:=0 to 1000000 do begin
      label1.Caption:=inttostr(i);
      application.processmessages
    end;
  finally
    freeandnil(sl)
  end;
end;

end.
Versucht mal abzubrechen (durch Click auf den Schließen-Button, oben rechts).
Nur mit Zugriffsschutzverletzung (beim 2. Click drauf). Warum? Und wie umgehe ich das?
Und nun kommentiert mal die einzige Zeile in FormCloseQuery aus und versucht wieder abzubrechen.
Geht nicht! Er stoppt nur solange man clickt und zählt dann weiter!
Über die IDE kann man das aber problemlos sofort abbrechen.
Warum geht das mit dem Schließen-Button nicht, warum geht das über die IDE?
(Bei mir unter Delphi7 Pro passiert.)

Gruß
Matthias
  Mit Zitat antworten Zitat