Lazarus / LCL只画在画布的一个小角落里

时间:2012-05-16 11:40:25

标签: pascal lazarus

在用Pascal编写的朋友程序(一个基本的保龄球游戏)中,游戏元素(球,背景等)在TShape的画布中绘制(Shape1.Canvas

问题是在该画布上绘制的元素在此TShape的左上角画布上以小矩形裁剪。请参阅此屏幕截图:Screenshot of the glitch

请注意,我已经在使用Lazarus / LCL(lazarus的主图形/ ui库)的另一个Pascal程序中看到了这种问题,并且这个保龄球程序在Windows中没有任何错误运行,这个bug只在Linux中遇到过I猜......

另请注意,在此画布上绘制时,除了计时器之外的其他程序(例如在OnFormCreate或其他东西中)时,将绘制整个画布。

以下是执行的绘图操作(在计时器的过程中):

procedure TForm2.Timer1Timer(Sender: TObject);
var
  i: integer;
  affich:word;
begin
  Shape1.Canvas.Clear;
  Lapiste.display(shape1.Canvas);
  Laboule.move(Coupcourant, Lapiste);
  Laboule.display(Shape1.Canvas);
  //LeTabQuilles.collision(CoupCourant);
  for i := 1 to 10 do
    begin
      LeTabQuilles.tab[i].check(LaBoule, CoupCourant);
      (LeTabQuilles.tab[i] as CQuille).display(shape1.Canvas);
    end; 

// ... (rest of the procedure) 

绘图操作(.display)基本上在作为属性给出的画布中绘制位图......

1 个答案:

答案 0 :(得分:0)

似乎并非所有的画布都是平等的:)。

只需将TShape替换为TImage即可解决问题。 请注意,这个问题非常频繁(至少在我的学校,只在Linux中),如果你直接在Form的画布上绘制(这是一种愚蠢的btw),也会发生这种情况。