【问题标题】:Change size of canvas by click通过单击更改画布大小
【发布时间】:2015-01-09 19:03:54
【问题描述】:

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

【问题讨论】:

  • Borland C++!?好多年没见过了:)
  • @ViktorSehr 这是我们国家的“现代”教育:)
  • 那是哪个国家?
  • @ViktorSehr 乌克兰,但我认为在大多数后苏联国家都是如此:)
  • @ViktorSehr 是的,在中欧和东欧(不仅是前 CCCP/苏联,还有后 RVHP)即使价格如此之高,Borland/Embarcadero 仍然存在(这是来自大多数技术学校免费获得编译器和 IDE)。但幸运的是,在大多数情况下,旧的 Turbo C++ 或 Pascal 不再是编译器了...... :)

标签: c++ graphics 2d vcl borland-c++


【解决方案1】:

用于调整椭圆大小:

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

    • 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);
       }
      
    • 为主窗体创建调整大小和绘制事件并添加绘图(画布);打电话到展位

    • 这将在需要时重新绘制您的表单
  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 时停止

如果您需要调整表单大小,则调整上面的代码......就像在鼠标事件示例中一样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多