unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,jpeg;type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    Constructor Create(AOwner:TComponent);override;
  end;var
  Form1: TForm1;
  jpeg1:tjpegimage;
implementation{$R *.dfm}
 Constructor TForm1.Create(AOwner:TComponent);
 begin
  Jpeg1:=TJpegImage.Create;
  Jpeg1.LoadFromFile('C:\My Documents\test\back.jpg');
 end;
end.//---------------
编译没有错。
该函数执行完后出现:Exception EaccessViolation in module project1.exe ......
顺便问一下:构造函数能否用引用或初始化当前窗体中的控件?

解决方案 »

  1.   

    Constructor TForm1.Create(AOwner:TComponent);
     begin
      Jpeg1:=TJpegImage.Create;
      Jpeg1.LoadFromFile('C:\My Documents\test\back.jpg');
     end;
    end.
    改为
     Constructor TForm1.Create(AOwner:TComponent);
     begin
      Jpeg1:=TJpegImage.Create(AOwner);
                               ^^^^^^^
      Jpeg1.LoadFromFile('C:\My Documents\test\back.jpg');
     end;
    end.或者单步跟踪看错在哪里
      

  2.   

    在重载的构造函数的第一条语句前加上:
    inherited Create(AOwner);
    表示调用基类的构造函数,来构造基类的那一部分,否则,基类的成员没有初始化.