2012-04-26 85 views
4

的數組這是我的全部代碼:德爾福:TImage中

unit Unit1; 

interface 

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

type 
    TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 
    Images: array[0..29,0..39] of TImage; //array 
implementation 

{$R *.dfm} 
//form create 
procedure TForm1.FormCreate(Sender: TObject); 
var xx,yy: Integer; //local variables 
begin 
     for xx:=0 to 29 do 
       for yy:=0 to 39 do 
         begin 
          Images[xx,yy]:=Timage.Create(Form1); 
          Images[xx,yy].Canvas.Rectangle(0,0,17,17); 
          Images[xx,yy].Left:=xx*16; 
          Images[xx,yy].Top:=yy*16; 
         end; 
end; 

end. 

,我總是得到錯誤:「項目PROJECT1.EXE已經引發的異常類EClassNotFound與消息‘未找到的TImage’過程停止使用步驟或運行繼續

我已經嘗試過其他的代碼在互聯網上像:
Delphi: TImage.Create causes Access violation
http://www.delphi-central.com/tutorials/memory_game_2.aspx

沒有什麼幫助!這是爲什麼發生?

謝謝。

+0

當您創建圖像,使用'TImage.Create(個體經營)'。切勿使用表單變量作爲參考。 – 2012-04-26 08:01:13

+1

@TLama,假設你是從程序與TForm1'的'一個局部變量創建表單。會發生什麼 ?圖像將綁定到全局Form1參數,這不是一個好習慣。其實很糟糕。 Images var應該在表單類中聲明。 – 2012-04-26 08:43:07

+0

@TLama的另一個問題是,如果您在飛行(代碼)創建TForm1'的'一個實例,並將其分配給不同名稱的變量,你就麻煩了。例如:'var TheForm:TForm1; begin TheForm:= TForm1.Create(nil);嘗試TheForm.ShowModal;最後TheForm.Free;結束;'。如果在構建'TheForm'的時候,如果還沒有創建「Form1」的實例,則會得到一個AV。總是使用'Self',它會引用對象**的**當前實例。 – 2012-04-26 12:36:36

回答

8

你確定你在與TImage.Create行例外呢?難道你有一個無效的DFM文件仍然包含一個從TForm1聲明中缺少的TImage實例嗎?

通常用作窗體或數據模塊的孩子所有的類都將自動註冊流。由於在表單中沒有聲明TImage,並且其他任何形式的應用程序都沒有包含TImage,所以沒有註冊。

您可以簡單地丟棄的TImage到形式測試。

+1

調出你的表格。 (f12)右鍵單擊:「以文本形式查看」。找到這一行:「object Image1:TImage」刪除此行以及直到幷包括下一個結尾的所有行。打F9。 – 2012-04-26 08:38:27

1

,如果你想在表單顯示這個代碼添加到循環:

Images[xx,yy].Parent:= Self;