关于修改字体(100分)

  • 主题发起人 主题发起人 xac
  • 开始时间 开始时间
X

xac

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个从TCustomPanel继承下来的一个控件的一部分.
是网上的一个控件,他遍历其上的所有控件,然后修改之。
请问如何修改,其上控件的字体的大小?

procedure TAutoPanel.Resize;
var
I:Integer;
begin
inherited;
if (csDesigning in ComponentState) then Exit;
try
if (AutoChildPosLeft = false) and (AutoChildWidth = false) and
(AutoChildPosTop = false) and (AutoChildHeight = false) then Exit;
for i := 0 to ControlCount - 1 do begin
if(AutoChildPosLeft = true) then
if (AutoChildWidth = true) then begin
Controls.Left := MulDiv (PCtrlsCoordArr.Left,Width,pWidth);
Controls.Width := MulDiv (PCtrlsCoordArr.Width,Width,pWidth);
end
else
Controls.Left := Round(
PCtrlsCoordArr.Left * Width / pWidth +
((PCtrlsCoordArr.Width) * Width / pWidth -
(PCtrlsCoordArr.Width))/2
);

if(AutoChildPosTop = true) then
if (AutoChildHeight = true) then begin
Controls.Top := MulDiv (PCtrlsCoordArr.Top,Height,pHeight);
[red] Controls.Height := MulDiv (PCtrlsCoordArr.Height,Height,pHeight); //有错误,像Tcombobox不能这样修改高度[/red] end
else
Controls.Top := Round(
PCtrlsCoordArr.Top * Height / pHeight +
((PCtrlsCoordArr.Height) * Height / pHeight - (PCtrlsCoordArr.Height))/2 );
end;
finally
end;
end;

 

for i := 0 to ControlCount - 1 do
try
if Controls is TEdit then TEdit(Controls).font.size = TEdit(Controls).font.size + 1;
if Controls is TLabel then TLabel(Controls).font.size = TLabel(Controls).font.size + 1;
except
;
end;

并不是每个控件都有font属性,因此只能一个个判断了。
 
照上面的法子太麻烦了.现有一法,可以修改Form上的所有有Font属性的控件字体大小或颜色
等等.在D6下通过,在D5下更方便,不用try过程.在TPanel中也同理.
Uses TypInfo;

procedure ChangeFontColor;
var i:integer;
Value:variant;
begin
for i:=0 to ComponentCount -1 do
begin
try
Value:=GetPropValue(Components,'Font');
if Value<>Null then
begin
if Components is TControl then
with (Components as TControl) do
begin
font.Szie:=font.Szie+1;//改字体大小
font.Color:=clBlue;
end;
end;
except
end;
end;
 
并不是每一个控件都有Top和Height的属性,在修改之前要判断是否有此属性!
 
像zhangkan所说的一样
if GetPropValue(Components,'height')<>nil then
begin
...
end;
 
后退
顶部