单击更改画布的大小

Change size of canvas by click

本文关键字:单击      更新时间:2023-10-16

在画布方法MainForm -> Canvas -> Ellipse(350,100,550,300)的帮助下制作了一个圆圈。问题是通过单击"+"或"-"按钮来更改画布的大小。有什么方法吗?

调整椭圆大小:

  1. 创建一些全局或Form成员变量:

    • int x0=350,y0=100,x1=550,y1=300;
    • 这包含椭圆参数
  2. 创建一些绘图功能(成员是否形成)

    • 例如:

      void draw(TCanvas *scr)
       {
       scr->Pen->Color=clWhite;
       scr->Brush->Color=clBlack;
       scr->FillRect(TRect(0,0,MainForm->ClientWidth,MainForm->ClientHeight));
       scr->Brush->Color=clBlue;
       scr->Ellipse(x0,y0,x1,y1);
       }
      
    • 为主窗体创建关于调整大小和绘制的事件,并添加绘图(Canvas);呼叫亭

    • 会在需要时重新绘制表单
  3. 创建(鼠标)点击事件

    • 内部有保持鼠标状态的调用变量X,Y,Shift
    • 所以只需将其添加到
    • x1=X; y1=Y; draw(Canvas);

仅此而已。。。希望我没有犯一些拼写错误(直接从这里的记忆中写出来)

如果你需要调整表单的大小,那么:

  • 而不是x1=X, y1=Y;
  • ClientWidth=X+32; ClientHeight=Y+32;
  • 或使用SetBounds(Left,Top,X+32,Y+32);
  • +32是调整大小的区域,以确保您也可以放大

[edit1]确实错过了+/-按钮(我假设鼠标调整大小),所以以下是按钮

  1. 点击+按钮创建事件:

    • 保持现有代码不变,并将此添加到事件代码中

      int cx=(x0+x1)>>1,ax=(x1-cx); ax+=16; x0=cx-ax; x1=cx+ax;
      int cy=(y0+y1)>>1,ay=(y1+cy); ay+=16; y0=cy-ay; y1=cy+ay; draw(Canvas);
      
    • 每次点击都会将展位半轴放大16

  2. 创建按钮点击事件:

    • 代码类似于+

      int cx=(x0+x1)>>1,ax=(x1-cx); ax-=16; if (ax<1) ax=1; x0=cx-ax; x1=cx+ax;
      int cy=(y0+y1)>>1,ay=(y1+cy); ay-=16; if (ay<1) ay=1; y0=cy-ay; y1=cy+ay; draw(Canvas);
      
    • 每次点击将使展位半轴缩小16,并在尺寸为1的上停止

如果您需要调整表单大小,请调整上面的代码。。。类似于鼠标事件示例