2014-04-10 1 views
0

델파이 XE5에 8 x 16 DrawGrid가 있습니다.이 이미지는 무작위로 9 개의 이미지로 채 웁니다. C : \ Users \ Sean Ewing \ Documents \ My Documents \ Delphi 튜토리얼 \ 기타 \ 수학 -Osphere \ Win32 \ Debug \ img. 현재 이미지를 올바르게로드하려고 시도하고 있습니다. 여기에 내가이 작업을 수행하기 위해 사용했던 코드 :델파이 DrawGrid에 TBitmap을 그립니다.

procedure TForm1.grdPlayFieldDrawCell(Sender: TObject; ACol, ARow: Integer; 
    Rect: TRect; State: TGridDrawState); 
     var 
     spherePlus: TBitmap; 

     begin 
     spherePlus.LoadFromFile(ExtractFilePath(Application.ExeName) + '\img\Sphere +1.bmp'); 
     grdPlayField.Canvas.Draw(0, 0, spherePlus); 
     end; 

코드는 잘 컴파일하고 나는 이것이 올바른 엠바 카데로 위키에서 읽은 한 내용을 기반으로하지만 시간이 때 나는 런타임에 오류가 DrawGgrid를로드합니다. 나는 어디로 잘못 갔는가?

당신은 당신이 그것을 사용하기 전에 먼저 비트 맵을 만들 필요가
+0

'spherePlus : = TBitmap.Create'을 잊었습니다. AV 권한이 있니? 어떤 오류가 발생했는지, 어디서, 질문을 할 때를 말하는지 잊지 마십시오. –

+0

비트 맵을 한 번만로드하십시오. 페인트를 할 때마다 아닙니다. –

답변

2

:

procedure TForm1.grdPlayFieldDrawCell(Sender: TObject; ACol, ARow: Integer; 
Rect: TRect; State: TGridDrawState); 
    var 
    spherePlus: TBitmap; 
    begin 
    spherePlus := TBitmap.Create; 
    try 
     spherePlus.LoadFromFile(ExtractFilePath(Application.ExeName) + 
      '\img\Sphere +1.bmp'); 
     grdPlayField.Canvas.Draw(0, 0, spherePlus); 
    finally 
     spherePlus.Free; 
    end; 
    end; 

당신이 경우에받는 Rect 매개 변수가 그려 질 필요가있는 영역이 있다는 것입니다 당신이 알고 있어야 다른 것은 따라서 Canvas.StretchDraw을 사용하고 해당 사각형을 전달해야합니다. 현재 문제는 도움이되지 않지만 다음 단계로 넘어갈 때 필요합니다. AColARow 매개 변수로 그려지는 정확한 셀을 식별 할 수 있으므로 해당 정보를 사용하여 열의 특정 이미지를로드하거나 열 또는 행의 텍스트를 출력 할 수 있습니다.

// Load specific image for the cell passed in ACol and ARow, 
// and then draw it to the appropriate area using the Rect provided. 
grdPlayField.Canvas.StretchDraw(Rect, spherePlus);