200分求解:就是Toolbutton的Size问题。(20分)

  • 主题发起人 主题发起人 歪就歪
  • 开始时间 开始时间

歪就歪

Unregistered / Unconfirmed
GUEST, unregistred user!
程序里的Toolbar,在运行时改变ShowCaption=True/False
时,Delphi的Toolbutton自作聪明的改变自己的大小。而且
Toolbutton1.Width也不能设定它的大小。
到底有没办法解决了?我Search了,却没什么收获,按道理
改变Toolbuttn的大小是我的正当权力。为什么DELPHI中竟然
给禁止了?
哦,我要问的问题是:谁能直接改下VCL的源代码,找到Width
被禁止的地方,注释掉它,是不是就能行了?
因为担心这方法被证明不行,所以只出20分,如何行,我再加180分
 
不会是你的Toolbar的Autosize=True吧!
 
windows程序都这样吧!
 
对很有可能 是你的Toolbar的Autosize=True
 
很有可能 win 的 toolbar 都是自动的:)
 
delphi的toolbar 中bug很多,transparent设成透明时错误百出。
size问题也应该是他的bug.
 
愚夫、XIXI12359:
你们自己试试就知道了,哪里是什么AutoSize的问题。
放一个Toolbar, 加一个Toolbutton,AutoSize就FALSE
吧。设Toolbar.ShowCaption= true。
在程序中,设Toolbutton.width或Toolbar.ButtonWidth=xxxx
看看能不能变。
依各位看,是否就是BUG了,是否就是没辙了?按说Toolbar应该
很常用的,肯定有不少人都遇到类似的问题,都是怎么解决的?
哪怕是给它凑合上那个大小?
 
我试出来的回答是:ToolBar和ToolButton都有AutoSize,你如过设了ToolButton
的AutoSize的话,当设了ToolBar.ShowCaption=True/False的话,ToolButton
就会改变大小了,而且这个时候你设ToolBar的AutoSize都没有用了,这就相当于
全局变量和局部变量的关系。
另外,你说的ToolButton的大小只能通过ToolBar的ButtonWidth来改变,这个时候,改变的可是所有的ToolButton的大小哦。Delphi不让改的原因是,保持界面的一致,你有没有见过大小不一样的ToolButton在同一个ToolBar中的呢?
但它提供这个属性是因为可以查询ToolButton的大小。
不知道你对我的回答满意吗?
 
SmillSnake:
谢谢回答,但不能满意,抱歉。
请抛开AutoSize,因为这问题和AutoSize属性没关系,我的Autosize都
是False,我不想让它来干扰我Toolbutton的大小,关键在于,当
ShowCaption设成True或False时,按键大小自做主张的改变了。
我需要的是:无论通过任何方法:
一、设定ShowCaption时,按键不改变大小。
二、通过设定Toolbutton.width还是Toobar.ButtonWidth,或者任何其他
办法,按照我的设定来改变按键的大小,注意:我要的就是所有按键的大
小,而不是某个按键的大小。
问题是,我无法改变(当然,我是指运行时)。这真是没道理。
 
<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=153971>用这种方法</a>调试程序,看VCL是在那个地方改动了size,这也许对你有用!
 
可以的。我用的是D4你用的是那个版本的?
我把原代码给你。
dfm File
____________________________________________________________________
object Form1: TForm1
Left = 192
Top = 107
Width = 544
Height = 375
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object btnShowCaption: TButton
Left = 232
Top = 160
Width = 75
Height = 25
Caption = 'ShowCaption'
ParentShowHint = False
ShowHint = True
TabOrder = 0
OnClick = btnShowCaptionClick
end
object btnChangeSize: TButton
Left = 88
Top = 56
Width = 75
Height = 25
Caption = 'ChangeSize'
TabOrder = 1
OnClick = btnChangeSizeClick
end
object ToolBar1: TToolBar
Left = 0
Top = 0
Width = 536
Height = 25
ButtonHeight = 21
ButtonWidth = 65
Caption = 'ToolBar1'
ShowCaptions = True
TabOrder = 2
object ToolButton1: TToolButton
Left = 0
Top = 2
Caption = 'ToolButton1'
ImageIndex = 0
end
object ToolButton2: TToolButton
Left = 65
Top = 2
Caption = 'ToolButton2'
ImageIndex = 1
end
object ToolButton3: TToolButton
Left = 130
Top = 2
Width = 8
Caption = 'ToolButton3'
ImageIndex = 2
Style = tbsSeparator
end
object ToolButton4: TToolButton
Left = 138
Top = 2
Caption = 'ToolButton4'
ImageIndex = 2
end
object ToolButton5: TToolButton
Left = 203
Top = 2
Caption = 'ToolButton5'
ImageIndex = 3
end
object ToolButton6: TToolButton
Left = 268
Top = 2
Caption = 'ToolButton6'
ImageIndex = 4
end
end
object Edit1: TEdit
Left = 168
Top = 56
Width = 105
Height = 21
TabOrder = 3
end
object btnAutoSize: TButton
Left = 232
Top = 192
Width = 75
Height = 25
Caption = 'AutoSize False'
TabOrder = 4
OnClick = btnAutoSizeClick
end
end
_____________________________________________________________________
pas File
_____________________________________________________________________
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ToolWin;
type
TForm1 = class(TForm)
btnShowCaption: TButton;
btnChangeSize: TButton;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
Edit1: TEdit;
btnAutoSize: TButton;
procedure FormCreate(Sender: TObject);
procedure btnShowCaptionClick(Sender: TObject);
procedure btnChangeSizeClick(Sender: TObject);
procedure btnAutoSizeClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Canvas.Brush.Style := bsClear;
end;

procedure TForm1.btnShowCaptionClick(Sender: TObject);
begin
ToolBar1.ShowCaptions := not ToolBar1.ShowCaptions;
end;

procedure TForm1.btnChangeSizeClick(Sender: TObject);
begin
ToolBar1.ButtonWidth := StrToInt(edit1.Text);
end;

procedure TForm1.btnAutoSizeClick(Sender: TObject);
begin
ToolBar1.AutoSize := not ToolBar1.AutoSize;
if ToolBar1.AutoSize then
btnAutoSize.Caption := 'AutoSize True'
else
btnAutoSize.Caption := 'AutoSize False';
end;

end.
____________________________________________________________________
当你按ShowCaption把Caption去掉时再在edit框中输入一个数字按ChangSize键
就可以了。你编译试试。呵呵。
 
<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=153971">用这种方法</a>调试程序,看VCL是在那个地方改动了size,这也许对你有用!
 
用我这招肯定没问题,exex上的分也给我吧
另外,y9y拜托给我写一个追mm的step by step ,求你了
toolbar1.Perform(TB_SETBUTTONSIZE, 0, MakeLParam(50, 50));
 
代y9y结束问题
 

Similar threads

后退
顶部