- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我正在构建一个自定义标签,它将接受变体作为输入,而不是一直使用 StrToInt 和 floatToStrf。如果标签输入是直接的,则下面的代码可以正常工作,即
Numlabel1.input=234.56;
但是当值被分配给一个变量时
var
v : double;
...
v := 234.56;
numLabel.input := v;
这是行不通的
procedure TNumLabel.SetInput(Value : Variant);
var
s:string;
begin
FInput := Value;
if VarIsType(FInput,256) = True then s:=FInput; //string
if VarIsType(FInput,17) = True then s:=IntToStr(FInput); //integer
if VarIsType(FInput,18) = True then s:=IntToStr(FInput); //word
if VarIsType(FInput,6) = True then //double
begin
GetDecimals; //get the number of becimal places user has selected
if FCurrency = True then s := FloatToStrF(FInput,ffCurrency,7,FDecimals) else
s:= FloatToStrF(FInput,ffNumber,7,FDecimals);
end;
if FPrefix<>'' then Caption:=FPrefix; //header
if s<>Null then Caption:=Caption+s+' ';
if FSuffix<>'' then if FInput<>Null then Caption:=Caption+FSuffix;
end;
根据要求,整个代码在哪里
unit NumLabel;
interface
uses WinTypes, WinProcs, Messages, SysUtils, Classes, Controls,
Forms, Graphics, Stdctrls, Variants, Dialogs, StrUtils, ESBRtns;
type
TNumLabel = class(TLabel)
private
FCurrency : Boolean;
FInput : Variant;
FDecimals : Integer;
FPrefix : string;
FSuffix : string;
FLayout : TTextLayout;
procedure AutoInitialize;
procedure AutoDestroy;
function GetCurrency : Boolean;
procedure SetCurrency(Value : Boolean);
function GetInput : Variant;
procedure SetInput(Value : Variant);
function GetPrefix : string;
procedure SetPrefix(Value : string);
function GetSuffix : string;
procedure SetSuffix(Value : string);
function GetDecimals : Integer;
function GetLayout : TTextLayout;
procedure SetLayout(Value : TTextLayout);
procedure SetDecimals(Value : Integer);
procedure WMSize(var Message: TWMSize); message WM_SIZE;
protected
{ Protected fields of TNumLabel }
{ Protected methods of TNumLabel }
procedure Click; override;
procedure Loaded; override;
procedure Paint; override;
public
procedure ChkPrefix(Astr:string);
{ Public fields and properties of TNumLabel }
{ Public methods of TNumLabel }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published properties of TNumLabel }
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property Currency : Boolean read GetCurrency write SetCurrency;
property Prefix : string read GetPrefix write SetPrefix;
property Suffix : string read GetSuffix write SetSuffix;
property Input : Variant read GetInput write SetInput;
property Decimals : Integer
read GetDecimals write SetDecimals
default 2;
property Layout : TTextLayout read FLayout write FLayout;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TNumLabel]);
end;
procedure TNumLabel.AutoInitialize;
begin
FDecimals := 2;
end;
procedure TNumLabel.AutoDestroy;
begin
end;
function TNumLabel.GetLayout : TTextLayout;
begin
Result := GetLayout;
end;
procedure TNumLabel.SetLayout(Value : TTextLayout);
begin
Layout := Value;
end;
function TNumLabel.GetDecimals : Integer;
begin
Result := FDecimals;
end;
procedure TNumLabel.SetDecimals(Value : Integer);
begin
FDecimals := Value;
end;
function TNumLabel.GetCurrency : Boolean;
begin
Result := FCurrency;
end;
procedure TNumLabel.SetCurrency(Value : Boolean);
begin
FCurrency := Value;
end;
function TNumLabel.GetPrefix : string;
begin
ChkPrefix(FPrefix);
Result := FPrefix;
end;
procedure TNumLabel.SetPrefix(Value : string);
begin
FPrefix := Value;
GetInput;
GetSuffix;
ChkPrefix(FPrefix);
if FInput<>Null then Caption:=Caption+FInput+' ';
if FSuffix<>'' then if FInput<>Null then Caption:=Caption+FSuffix;
Invalidate;
end;
procedure TNumLabel.ChkPrefix(Astr:string);
begin
if Astr<>'' then
begin
if Layout=tlTop then
begin
if Pos(#$D#$A,FPrefix) = 0 then FPrefix:=FPrefix +#$D#$A ;
end
else if ((RightStr(FPrefix,1)=' ') and (Layout=tlCenter)) then FPrefix:=FPrefix+' ';
end;
end;
function TNumLabel.GetSuffix : string;
begin
Result := FSuffix;
end;
procedure TNumLabel.SetSuffix(Value : string);
begin
FSuffix :=Value;
GetPrefix;
GetInput;
if FPrefix<>'' then Caption:=FPrefix;
if FInput<>Null then Caption:=Caption+FInput+' ';
if FSuffix<>'' then if FInput<>Null then Caption:=Caption+FSuffix;
Invalidate;
end;
function TNumLabel.GetInput : Variant;
begin
Result := FInput;
end;
procedure TNumLabel.SetInput(Value : Variant);
var
s:string;
begin
FInput := Value;
if VarIsType(FInput,256) = True then s:=FInput;
if VarIsType(FInput,17) = True then s:=IntToStr(FInput);
if VarIsType(FInput,18) = True then s:=IntToStr(FInput);
if VarIsType(FInput,6) = True then
begin
GetDecimals;
if FCurrency = True then s := FloatToStrF(FInput,ffCurrency,7,FDecimals) else
s := FloatToStrF(FInput,ffNumber,7,FDecimals);
end;
if FPrefix<>'' then Caption:=FPrefix;
if s<>Null then Caption:=Caption+s+' ';
if FSuffix<>'' then if FInput<>Null then Caption:=Caption+FSuffix;
end;
procedure TNumLabel.Click;
begin
inherited Click;
end;
constructor TNumLabel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
AutoInitialize;
end;
destructor TNumLabel.Destroy;
begin
AutoDestroy;
inherited Destroy;
end;
procedure TNumLabel.Loaded;
begin
inherited Loaded;
end;
procedure TNumLabel.Paint;
begin
inherited Paint;
end;
procedure TNumLabel.WMSize(var Message: TWMSize);
var
W, H: Integer;
begin
inherited;
W := Width;
H := Height;
if (W <> Width) or (H <> Height) then
inherited SetBounds(Left, Top, W, H);
Message.Result := 0;
end;
end.
最佳答案
据我了解,您希望与其他文本连接,否则也需要根据数字类型格式化输出。
你在正确的轨道上,只是稍微偏离了一点。
这是我在测试中使用的输入:
procedure TForm5.Button1Click(Sender: TObject);
var
v: double;
begin
numlab.Decimals := 3;
v := 234.56;
numlab.Input := v;
end;
在
TNumLabel.SetInput(Value: Variant);
我做了一些更改以简化。有函数(在单元
System.Variants
中)检查类型组,如
VarIsOrdinal()
检查任何序数类型和
VarIsFloat()
检查任何浮点类型。
varCurrency
的变体类型代码 6但对
Double
进行了测试.始终使用字面常量,这样更容易阅读代码并使其正确。
SetInPut()
让你继续:
procedure TNumLabel.SetInput(Value : Variant);
var
s:string;
begin
FInput := Value;
// check for string type
if VarIsType(FInput, VarString) then s := FInput else
// check for any ordinal type
if VarIsOrdinal(FInput) then s := IntToStr(FInput) else
// check for any float type
if VarIsFloat(FInput) then s := FloatToStrF(FInput, ffNumber, 7, FDecimals) else
// none of those
s := 'Unknown';
// if VarIsType(FInput,256) = True then s:=FInput;
// if VarIsType(FInput,17) = True then s:=IntToStr(FInput);
// if VarIsType(FInput,18) = True then s:=IntToStr(FInput);
// if VarIsType(FInput,6) = True then
// begin
// GetDecimals;
// if FCurrency = True then s := FloatToStrF(FInput,ffCurrency,7,FDecimals) else
// s := FloatToStrF(FInput,ffNumber,7,FDecimals);
// end;
if FPrefix<>'' then Caption:=FPrefix;
if s <> '' then Caption:=Caption+s+' ';
if FSuffix<>'' then if FInput<>Null then Caption:=Caption+FSuffix;
end;
顺便说一句,如果你想根据
FDecimals
显示也用小数格式化的整数设置,你可以喂
FInput
(带有整数值)到
FloatToStr()
.
关于delphi - 使用变量作为变体不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65564193/
我正在创建一个连接到 firebase 的应用程序。但我面临一些问题。当同步我的 gradle 文件时,我收到此警告 WARNING: API 'variant.getMergeResources()
想知道是否有任何方法可以将变体分配给自定义 radio 输入?我想为 2 天、3 天和标准运输设置不同费率的分级运输。我可以使用变体来做到这一点,但下拉菜单对我不起作用。我想要日期信息和日期选择器,以
我是 Haskell 的新手。鉴于 Haskell 的整个前提是函数将始终返回相同的值,我希望有某种方式,例如在编译时计算常量的斐波那契值,就像我可以在 C++ 中使用模板元编程一样,但我不知道该怎么
我是 OCaml 的新手,但过去两天一直在工作,以便更好地了解如何使用它。我最近做了很多事情,但有些事情阻碍了我前进。 我正在尝试在 OCaml 中实现 evaexpr。使用这种语言非常容易,你会说:
我有一个使用一些typedef的std::variant的代码库。 最初,它们是不同的类型,但现在它们像下面的示例一样重叠 typedef int TA; typedef int TB; std::v
鉴于此: data Foo = Bar { name :: String } | Baz { nickname :: String } 函数 name 和 nickname 似乎都是 Foo -> S
嘿,我猜这可能相当微不足道,但我很难找到答案或弄清楚它。 我正在尝试创建一个带有任意间距的彩色方 block 网格。这本身很容易做到,特别是因为我只需要九个正方形。但是虽然我看着我完成的代码,我不禁觉
我有 woocommerce 设置,其中包含产品和这些产品的变体。当我更改变化时(例如,产品的尺寸(340克或900克),我希望它在页面上动态更新价格,以便人们可以看到两种尺寸之间的价格差异。目前,我
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
在我的一节课上,我被问到这是一个脑筋急转弯,但我无法弄明白(这不是家庭作业问题,只是其中一位助教给我们的一个脑筋急转弯让我们思考)。 给你一根杆,上面有 n 个要切割的点,例如 [1,5,11],以及
关于 CRP如果我想实现它的细微变化(使用模板模板参数),我会得到一个编译错误: template class Derived> class Base { public: void Call
我正在创建一个 woocommerce 主题,并且我有产品变体,即显示在产品详细信息页面上的尺寸,但问题是我想通过使用产品 ID 在我的自定义 php 页面中获取所有变体,任何人都可以帮助我。 提前致
我正在使用 Ionic 开发移动应用程序,我必须与 Twitter API 连接。 所以我使用 ng-cordova 和 $cordovaAuth .但是当我这样做时: $cordovaOauth.t
这里的网站有一个音乐播放器http://www.numberonedesigns.com/ubermusic.com/ ...当点击下一个按钮并随机突出显示时,它不会正确随机化。它总是返回到播放列表中
我有列 sql 变体,其含义如下:100, 150, D1我正在尝试根据特定逻辑将列中的所有数字转换为字母(例如 D1)以防万一。但是 150 有空格并且 CASE WHEN 不起作用。 这是我正在使
有没有一种快速方法可以用从匹配模式派生的数据替换所有出现的某些模式? 例如,如果我想将字符串中出现的所有数字替换为用 0 填充到固定长度的相同数字。 在本例中,如果长度为 4,则 ab3cd5 将变为
我目前正在寻找生成具有特定位数的数字列表,我的代码当前如下: | Python 2.7 | import itertools inp = raw_input('Number of digits to
我正在对类型系统进行研究。对于这项工作,我正在研究流行语言中变体、结构子类型、通用多态性和存在多态性的用法。像 heskell、ocaml 这样的功能性语言提供了这样的功能。但我想知道像 C++ 这样
这是 variant.hpp 文件中的相关代码(可在此处找到 http://www.boost.org/doc/libs/1_49_0/boost/variant/variant.hpp) templ
您好,我有两个具有多对多关系的表和一个联结表。简而言之,具有不同属性的产品也随之增加了价格。为了更清楚地说明我是产品和属性表。 +-------------+------------+--------
我是一名优秀的程序员,十分优秀!