2013-07-12 27 views
5
procedure TGridThread.Execute; 
var 
    i: integer; 
    iIEBitmap: TIEBitmap; 
    iWidth: integer; 
    iHeight: integer; 
    iImageCount: integer; 
    iArrayOfBitmaps: array of TBitmap; 
begin 
    inherited; 
    { Free the thread onTerminate } 
    FreeOnTerminate := True; 
    if not Terminated then 
    begin  
     if not Terminated then 
     begin 
     Synchronize(
     procedure 
      begin 
       iIEBitmap := TIEBitmap.Create(Form1.ImageEnView1.IEBitmap); 
       iWidth := Form1.ImageEnMView1.ImageOriginalWidth[0]; 
       iHeight := (Form1.ImageEnMView1.ImageOriginalHeight[0] + iSpaceBetweenImages) * 
       Form1.ImageEnMView1.ImageCount; 
       iImageCount := Form1.ImageEnMView1.ImageCount; 
      end); 

      SetLength(iArrayOfBitmaps, iImageCount); 

      Synchronize(
      procedure 
      begin 
       for i := 0 to iImageCount - 1 do // [DCC Error] Unit1.pas(334): E1019 For loop control variable must be simple local variable 
       begin 
       iArrayOfBitmaps[i] := Form1.ImageEnMView1.GetBitmap(i); 
       { Free the bitmap } 
       Form1.ImageEnMView1.ReleaseBitmap(0); 
       end; 
      end); 

cevap

6

Siz sadece döngü sayaç için bir yerel değişken bildiren gerekir:

Synchronize(
    procedure 
    var 
    i: Integer; 
    begin 
    for i := 0 to iImageCount - 1 do 
    begin 
     iArrayOfBitmaps[i] := Form1.ImageEnMView1.GetBitmap(i); 
     Form1.ImageEnMView1.ReleaseBitmap(0); 
    end; 
    end 
); 

Bir döngü değişkeni döngü göründüğü prosedüre yerel olmalıdır. Kodunuzda, değişkeni farklı bir prosedürde yerel olarak beyan etmiştiniz. Ve dolayısıyla derleme hatası.

İlgili konular