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

उत्तर

6

आप बस अपनी पाश काउंटर के लिए एक स्थानीय चर घोषित करने के लिए की जरूरत है:

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

एक पाश चर प्रक्रिया है, जिसमें पाश प्रकट होता है करने के लिए स्थानीय होना चाहिए। आपके कोड में आपने वैरिएबल को एक अलग प्रक्रिया में स्थानीय के रूप में घोषित कर दिया था। और इसलिए संकलन त्रुटि।

संबंधित मुद्दे