C++buider 窗口不能拖拽缩小的 多少种可能性?

时间:2021-09-30 09:25:10
C++buider 窗口不能拖拽缩小的 多少种可能性?
新换了工作,又新换了IDE。(尼玛,新公司用的竟然是C++ buider,搞不定啊)
新上手项目,(我去,老破难,竟然是99年的,03年的代码都有),
遇到新问题,求教更高手。描述如下:

1:C++ buider 一个大窗体里面有各小窗体,现在反应,外面的大窗体竟然不能拖拽缩小了。
(更让我不得其解的是,说是在XP能,现在Win7用户反应不能了。)
2: 具体表现为,拖拽会把里面的各小控件产生相应的比例适应缩小,但是外面的那个大的反而不小,就是全屏。
3:初步猜测是某些 size属性什么的,我都试了一遍,都没找到。
4:对Onresize函数进行编写,用里面的小控件来确定大窗体的位置和大小,会表现为,反复的闪烁,他就是想放到最大。
(我是这么想的,既然里面的控件都缩小了,外面实在不行,从里往外写测试吧,出现的情况)

5:在resize里给定确定的值,却能固定住他让它缩小。(其实这样反证了它其实是可以repaint实现的,4中的反复有可能是因为
从里到外的值不能正好,造成反复的size变化,可是我添加了staic 临时变量来控制了啊,怎么还出现4的情况,不解)。

6:没找到Init 的函数,本来想用vc那一套(create,init,resize,paint)流程的,竟然无从下手,这到底是哪个愿意呢。

因为联网搜了良久各种原因,尝试解决了,都没成功,所以,再次发帖求组,希望多多收集可能的原因,对的错的,有可能想到的,统统说说吧,求指教啊。
                                                                     至此,致敬。 
                                                                           20140715 18:42

14 个解决方案

#1


C++buider 窗口不能拖拽缩小的 多少种可能性? 不就是调整 Anchors 属性么。

#2


新建一个窗体,把原来的小控件一个个复制过去,放弃原来的窗体

#3


修改所有控件的Anchors 为默认属性

#4


引用 1 楼 ccrun 的回复:
C++buider 窗口不能拖拽缩小的 多少种可能性? 不就是调整 Anchors 属性么。


"Anchors是确保该控件与它的父控件的相对位置保持不变,即使父控件改变大小"
现在是外面这个大窗体不能改变大小,总是要回复最大化(所以resize会造成闪烁),aNCHORS能造成这种效果?
从这个理论去思考,那只能看看,这个大窗体外面是不是还有他的父控件(晕,麻烦啊,这工具到底怎么用,不习惯各种窗操作,这些功能窗体都放哪了?)

4楼那兄弟说的修改所有控件的anchors,如果有用,那就是因为里面子窗体的原因会导致父窗体的不能改变大小位置,也在尝试中。

3楼那倒是个好主意,那工程部大了去了。。。。

#5


引用 2 楼 dataxdata 的回复:
新建一个窗体,把原来的小控件一个个复制过去,放弃原来的窗体


这倒是个号主意。。就是,那工程大了去了。。。有什么原因,比如属性设置,或者某个函数,会造成窗口最大化,不让修改的呢

#6


C++buider 窗口不能拖拽缩小的 多少种可能性?
经过修改调整 Anchors 属性尝试,是有点奇怪的发现,外面那个大窗口的Anchors 属性竟然不能修改,修改完,保存,编译,重新打开,又回复到了原来的所有(left,top,right,bottom)。我就想是不是这工程有问题呢,这不让修改,然后对其他属性,比如显示标题 caption修改,竟然能成功,那为什么 Anchors 属性不能修改,这算什么事? C++buider 窗口不能拖拽缩小的 多少种可能性?

#7


Anchors 属性只对子窗口有意义。至于你说的“外面那个大窗口”,我猜你说的是Form吧?

把Form的BorderStyle属性设置成bsSizeable就可以拖动更改大小了。

#8


选中底层的大控件,比如Panel之类,复制的时候上面的小控制都直接跟过去了,不用一个个复制

#9


引用 7 楼 ccrun 的回复:
Anchors 属性只对子窗口有意义。至于你说的“外面那个大窗口”,我猜你说的是Form吧?

把Form的BorderStyle属性设置成bsSizeable就可以拖动更改大小了。



回复: 这个属性本来就是bsSizeable没问题,不是这个问题。解决不了问题。
你说Anchors 属性只对子窗口有意义可以理解,我说的,新建工程,不管怎么样(有用或没用),form的anchors是可以改动的(默认是left,top啊),但是我这个项目的form的anthors属性竟然改不动,改动了,又回复称原来的样子【left,top,right,bottom】。

#10


引用 8 楼 dataxdata 的回复:
选中底层的大控件,比如Panel之类,复制的时候上面的小控制都直接跟过去了,不用一个个复制



复制过去没问题,但是好像一般这样得名字匹配会很危险,挨个名字和属性不会复制过去吧?然后在工程里整个替代可是个大工程。

#11


名字和属性也会跟随过去的,但事件不会复制过去,所以复制后,要在原有的窗体中看个个控件都有哪些事件,然后在新窗体中依次建立事件,复制事件处理函数的代码,这个过程可以借机大致了解原有系统的思路,看看原有系统的问题出在哪里

#12


引用 11 楼 dataxdata 的回复:
名字和属性也会跟随过去的,但事件不会复制过去,所以复制后,要在原有的窗体中看个个控件都有哪些事件,然后在新窗体中依次建立事件,复制事件处理函数的代码,这个过程可以借机大致了解原有系统的思路,看看原有系统的问题出在哪里


1000多万行的代码量,怕怕,这个弄法工作量要吓死人。可是我好像没有别的办法了,再看看,实在不行再这样吧。感觉一个窗口重写的问题,应该就是某个属性或者某个函数造成了“反正我就是要最大化”的效果的啊(通过对resize重写产生闪烁推断的出),不至于那么费劲,想法怕跑偏了。

#13


引用 9 楼 bailangxhao 的回复:
回复: 这个属性本来就是bsSizeable没问题,不是这个问题。解决不了问题。
你说Anchors 属性只对子窗口有意义可以理解,我说的,新建工程,不管怎么样(有用或没用),form的anchors是可以改动的(默认是left,top啊),但是我这个项目的form的anthors属性竟然改不动,改动了,又回复称原来的样子【left,top,right,bottom】。


很明显,你Form的Align属性设置的是alClient

#14


引用 13 楼 ccrun 的回复:
Quote: 引用 9 楼 bailangxhao 的回复:

回复: 这个属性本来就是bsSizeable没问题,不是这个问题。解决不了问题。
你说Anchors 属性只对子窗口有意义可以理解,我说的,新建工程,不管怎么样(有用或没用),form的anchors是可以改动的(默认是left,top啊),但是我这个项目的form的anthors属性竟然改不动,改动了,又回复称原来的样子【left,top,right,bottom】。


很明显,你Form的Align属性设置的是alClient


结贴,果真是Form的Align属性的问题,回复默认即可。感谢妖哥,还是经验很重要,这么点小问题纠结了我一天。也感谢dataxdata的帮助。 其实吧,这1000万的代码量,动则狠危险,还是咱做事的方式跑偏了。不熟悉平台,其实应该新建一个简单的案例,通过比较,发现问题(既然都猜出了是某个属性的问题),可以更方便 快捷的解决的,希望对大家有所帮助吧。

万幸,还是通过你两的帮助,没跑偏方向。感谢。以后有机会还要多多请教大侠才是啊。至此,致敬。--

#1


C++buider 窗口不能拖拽缩小的 多少种可能性? 不就是调整 Anchors 属性么。

#2


新建一个窗体,把原来的小控件一个个复制过去,放弃原来的窗体

#3


修改所有控件的Anchors 为默认属性

#4


引用 1 楼 ccrun 的回复:
C++buider 窗口不能拖拽缩小的 多少种可能性? 不就是调整 Anchors 属性么。


"Anchors是确保该控件与它的父控件的相对位置保持不变,即使父控件改变大小"
现在是外面这个大窗体不能改变大小,总是要回复最大化(所以resize会造成闪烁),aNCHORS能造成这种效果?
从这个理论去思考,那只能看看,这个大窗体外面是不是还有他的父控件(晕,麻烦啊,这工具到底怎么用,不习惯各种窗操作,这些功能窗体都放哪了?)

4楼那兄弟说的修改所有控件的anchors,如果有用,那就是因为里面子窗体的原因会导致父窗体的不能改变大小位置,也在尝试中。

3楼那倒是个好主意,那工程部大了去了。。。。

#5


引用 2 楼 dataxdata 的回复:
新建一个窗体,把原来的小控件一个个复制过去,放弃原来的窗体


这倒是个号主意。。就是,那工程大了去了。。。有什么原因,比如属性设置,或者某个函数,会造成窗口最大化,不让修改的呢

#6


C++buider 窗口不能拖拽缩小的 多少种可能性?
经过修改调整 Anchors 属性尝试,是有点奇怪的发现,外面那个大窗口的Anchors 属性竟然不能修改,修改完,保存,编译,重新打开,又回复到了原来的所有(left,top,right,bottom)。我就想是不是这工程有问题呢,这不让修改,然后对其他属性,比如显示标题 caption修改,竟然能成功,那为什么 Anchors 属性不能修改,这算什么事? C++buider 窗口不能拖拽缩小的 多少种可能性?

#7


Anchors 属性只对子窗口有意义。至于你说的“外面那个大窗口”,我猜你说的是Form吧?

把Form的BorderStyle属性设置成bsSizeable就可以拖动更改大小了。

#8


选中底层的大控件,比如Panel之类,复制的时候上面的小控制都直接跟过去了,不用一个个复制

#9


引用 7 楼 ccrun 的回复:
Anchors 属性只对子窗口有意义。至于你说的“外面那个大窗口”,我猜你说的是Form吧?

把Form的BorderStyle属性设置成bsSizeable就可以拖动更改大小了。



回复: 这个属性本来就是bsSizeable没问题,不是这个问题。解决不了问题。
你说Anchors 属性只对子窗口有意义可以理解,我说的,新建工程,不管怎么样(有用或没用),form的anchors是可以改动的(默认是left,top啊),但是我这个项目的form的anthors属性竟然改不动,改动了,又回复称原来的样子【left,top,right,bottom】。

#10


引用 8 楼 dataxdata 的回复:
选中底层的大控件,比如Panel之类,复制的时候上面的小控制都直接跟过去了,不用一个个复制



复制过去没问题,但是好像一般这样得名字匹配会很危险,挨个名字和属性不会复制过去吧?然后在工程里整个替代可是个大工程。

#11


名字和属性也会跟随过去的,但事件不会复制过去,所以复制后,要在原有的窗体中看个个控件都有哪些事件,然后在新窗体中依次建立事件,复制事件处理函数的代码,这个过程可以借机大致了解原有系统的思路,看看原有系统的问题出在哪里

#12


引用 11 楼 dataxdata 的回复:
名字和属性也会跟随过去的,但事件不会复制过去,所以复制后,要在原有的窗体中看个个控件都有哪些事件,然后在新窗体中依次建立事件,复制事件处理函数的代码,这个过程可以借机大致了解原有系统的思路,看看原有系统的问题出在哪里


1000多万行的代码量,怕怕,这个弄法工作量要吓死人。可是我好像没有别的办法了,再看看,实在不行再这样吧。感觉一个窗口重写的问题,应该就是某个属性或者某个函数造成了“反正我就是要最大化”的效果的啊(通过对resize重写产生闪烁推断的出),不至于那么费劲,想法怕跑偏了。

#13


引用 9 楼 bailangxhao 的回复:
回复: 这个属性本来就是bsSizeable没问题,不是这个问题。解决不了问题。
你说Anchors 属性只对子窗口有意义可以理解,我说的,新建工程,不管怎么样(有用或没用),form的anchors是可以改动的(默认是left,top啊),但是我这个项目的form的anthors属性竟然改不动,改动了,又回复称原来的样子【left,top,right,bottom】。


很明显,你Form的Align属性设置的是alClient

#14


引用 13 楼 ccrun 的回复:
Quote: 引用 9 楼 bailangxhao 的回复:

回复: 这个属性本来就是bsSizeable没问题,不是这个问题。解决不了问题。
你说Anchors 属性只对子窗口有意义可以理解,我说的,新建工程,不管怎么样(有用或没用),form的anchors是可以改动的(默认是left,top啊),但是我这个项目的form的anthors属性竟然改不动,改动了,又回复称原来的样子【left,top,right,bottom】。


很明显,你Form的Align属性设置的是alClient


结贴,果真是Form的Align属性的问题,回复默认即可。感谢妖哥,还是经验很重要,这么点小问题纠结了我一天。也感谢dataxdata的帮助。 其实吧,这1000万的代码量,动则狠危险,还是咱做事的方式跑偏了。不熟悉平台,其实应该新建一个简单的案例,通过比较,发现问题(既然都猜出了是某个属性的问题),可以更方便 快捷的解决的,希望对大家有所帮助吧。

万幸,还是通过你两的帮助,没跑偏方向。感谢。以后有机会还要多多请教大侠才是啊。至此,致敬。--