有人可以解释为什么选项* 1不起作用? TKS
我在这里放了一个简单的代码,因为我想理解为什么代码不接受我在一个过程中传递TColor like指令
procedure TForm1.BitBtn1Click(Sender: TObject);
procedure ChangeColor( Value : TColor );
begin
//*1
Value := clRed;
end;
begin
//*1 IT DOESN'T WORK
ChangeColor( Edit1.Color );
ChangeColor( ComboBox1.Color );
//----------------------------------//
//*2 IT WORKS
Edit1.Color := clRed;
ComboBox1.Color := clRed;
end;
谢谢
答案 0 :(得分:4)
选项1不起作用,因为代码不会尝试将任何内容分配给控件的Color
属性。它只是将颜色值传递给嵌套过程ChangeColor
。嵌套过程唯一能做的就是为传递的参数赋值。
如果您希望在过程返回后读取传递给过程的参数,请阅读variable parameters。
如果您希望在嵌套过程本身中更改控件的颜色,请另外阅读properties。
答案 1 :(得分:3)
Sertac指出的限制的解决方法是使用function
代替procedure
:
procedure TForm1.BitBtn1Click(Sender: TObject);
function ChangeColor: TColor;
begin
Result := clRed;
end;
begin
Edit1.Color := ChangeColor;
ComboBox1.Color := ChangeColor;
end;
我认为您想要使用过程而不是分配常量的原因是由于逻辑比显示的更复杂。
答案 2 :(得分:0)
您可以尝试使用RTTI:
uses System.TypInfo;
procedure UpdateColorProperty(Ctrl : TControl; const aColor : Tcolor);
var PropInfo : PPropinfo;
begin
if aColor = clNone then Exit;
if Assigned(Ctrl) then begin
PropInfo := GetPropInfo(Ctrl, 'Color');
if PropInfo <> nil then
SetPropValue(Ctrl, 'Color', aColor);
end;
end;