2013-07-12 1 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); 

Antwort

6

Sie müssen einfach eine lokale Variable für Schleifenzähler erklären:

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 
); 

Eine Schleifenvariable des Verfahren lokal sein muss, in dem die Schleife erscheint. In Ihrem Code hatten Sie die Variable in einer anderen Prozedur als lokal deklariert. Und daher der Kompilierungsfehler.

Verwandte Themen