滚动条拖动改变大小 delphi lazarus pascal


object Form1: TForm1
  Left = 256
  Height = 240
  Top = 145
  Width = 320
  BorderStyle = bsNone
  Caption = 'Form1'
  ClientHeight = 240
  ClientWidth = 320
  LCLVersion = '2.2.4.0'
  object Memo1: TMemo
    Left = 0
    Height = 240
    Top = 0
    Width = 320
    Align = alClient
    Lines.Strings = (
      'Memo1'
    )
    TabOrder = 0
  end
end  

这个csdn.net无法上传图片,我改用链接吧,我程序图在下面的链接
https://img-blog.csdnimg.cn/img_convert/2623492098e04e017c3f7754a237c448.png
这是一个TDBGrid控件,后面是我写的控件,把MEMO写在单元格内,但无法放大缩小弹开的MEMO(这个MEMO放在一个TFORM窗体上)。

这是窗体文件,但不能拖动改变大小!
我想在memo的右下角2个滚动条出现后,在右下角的交叉位置可以拖动改变窗体大小(这个地方还要放图标,不然用户不知道这里还有个功能)

例如:
https://www.jianshu.com/p/e5c75954ad25

您可以通过在窗体的 BorderStyle 属性中设置为 bsSizeable 来实现窗体的大小可调整。

您可以在窗体的右下角放置一个 TSizeGrip 控件来提供拖动改变窗体大小的功能。

在设计窗体时,您可以在右下角放置一个图标来提示用户可以在该位置拖动改变窗体大小。

如果需要代码实现的话,可以在窗体的构造函数里加上
Self.BorderIcons:=[biSystemMenu,biMinimize,biMaximize,biSize];
Self.BorderStyle:=bsSizeable;
来实现拖动改变窗体大小的功能。

如果您想在Memo控件右下角添加改变大小功能,可以使用以下步骤:

在Memo控件的外部容器窗体中添加一个占位符(例如一个小图标),以指示该功能的存在。

对该占位符进行编程,使其可以触发改变窗体大小的操作。可以通过记录鼠标位置并在鼠标拖动时动态调整窗体的大小来实现。

更新窗体的边框样式为bsSizeable,以允许用户调整窗体的大小。

希望这些信息对您有所帮助!

  ReleaseCapture;
 Form1.Perform (WM_syscommand,$f012, 0 );
procedure  TForm1.OnMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
    begin
    if  button = mbleft  then
    begin
      ReleaseCapture;
     Form1.Perform (WM_syscommand,$f012, 0 );
     end ;
  end ;

这段代码实现了鼠标放在窗体上实现拖动。
代码的原理是利用窗体的WM_NCHITTEST消息,这个消息是当光标移动、鼠标按下或释放时发生的,当程序检测到鼠标在窗体中按下的消息后(消息的值为htClient),将鼠标在标题栏上按下时产生的消息(值为htCaption)传递出去,这样就巧妙的欺骗程序认为是标题栏被按下,当然就可拖动窗体了。