经过多年将Delphi程序编码为表单和数据模块中不可测试的代码(包括全局变量),唯一的类是表单本身,包含表单UI本身所需的所有代码.
我如何将代码转换为一组执行实际工作的类?我是否需要停止使用数据源/数据集并在类中执行所有操作?我需要ORM吗?
通常没有必要在表单中重用代码,所以将逻辑转换为类是否有意义?
我的大部分申请都围绕着涉及支付和利率计算的财务计算.我正在寻找如何确定最适合使用的Delphi数据类型.
如果我使用数据库来存储这些值,并且我已将该数据库中的字段定义为带有两个小数位的十进制值,哪种Delphi数据类型与该方案最兼容?
在将值存储在数据库中之前,我是否应该使用Delphi中的舍入公式将结果格式化为两位小数?如果是这样,这样做的最佳做法是什么?
来自docwiki标签:
当您需要识别或注释另一个组件(如编辑框)或要在表单上包含文本时,可以在表单上放置标签.标准标签组件TLabel是一个非窗口控件,因此无法获得焦点; 当您需要带有窗口句柄的标签时,请改用TStaticText.
声明" 当你需要带有窗口句柄的标签时,使用TStaticText代替 "是什么意思?
我听说Delphi的新Rad Studio XE2有一个名为FireMonkey的东西,允许相同的代码构建Windows 32,Windows 64和MacOS应用程序.
如果这是真的,这是巨大的.我在哪里可以获得有关FireMonkey的技术文档?
编辑:
我对MacOS很感兴趣.当我发布我的软件的Mac版本时,有几个人问我,我一直告诉他们我不是.我在三月(4个月前)回答了这个问题,没有人对FireMonkey说过任何话.哪个版本的Delphi会让我创建在Mac上运行的软件?
主持人问题:
这应该是维基吗?
当您右键单击Delphi表单时,您将获得弹出上下文菜单.底部选项是Text DFM.可以选中或不选中此选项.选中或取消选中此选项时的含义是什么?
我注意到,如果我将Delphi 2010 IDE窗口设置为最大化之外的其他窗口,那么当我在IDE中运行应用程序时,它会自动最大化.关闭程序后,IDE窗口将调整大小,使其恢复到运行程序之前的大小.
无论如何要关闭这种烦人的行为?
我试图让Delphi像Excel一样圆,但我不能.这是代码:
procedure TForm1.Button1Click(Sender: TObject);
var
s : string;
c : currency;
begin
c := 54321.245;
s := '';
s := s + Format('Variable: %m',[c]);
s := s + chr(13);
s := s + Format(' Literal: %m',[54321.245]);
ShowMessage(s);
end;
Run Code Online (Sandbox Code Playgroud)
我正在使用设置为54321.245的货币变量,当我格式化此变量时,它使用Bankers Rounding进行舍入.但是,当我将相同的值格式化为文字时,它会舍入Excel舍入的方式.
无论是形成货币变量还是字面值,我都期待这个回合到54,321.25美元.我怎样才能确保Delphi每次都以与Excel相同的方式进行舍入?
编辑
The rounding I expect to see is as follows:
54,321.245 = 54,321.25
54,321.2449 = 54,321.24
54,431.2499 = 54,421.25
Run Code Online (Sandbox Code Playgroud)
我只使用文字来展示Delphi的不同方式.我希望在实际代码中使用变量.
注意:
如果我将变量从货币更改为扩展,则它会正确舍入
编辑#2
有人建议我不清楚我的要求,这绝对不是真的.我对我的要求有一个非常清楚的理解,我显然没有很好地解释它们.我想要的舍入方法是两位小数.当deimal部分的千分之一值> = 0.005时,我希望它四舍五入为0.01,Delphi提供的货币类型不会这样做.我也试过这个例子,使用带有money数据类型的Microsoft SQL(我假设它与Delphi的货币相同),并且SQL按照我描述的方式对它进行了轮询.
如果我最大化Delphi形式,宽度和高度值比相应的GetSystemMetrics SM_CXSCREEN和SM_CYSCREEN大8个像素?
例如:
当我右键单击我的屏幕并获得属性时,我的屏幕分辨率为1680 X 1050.这些是从GetSystemMetrics的(SM_CXSCREEN)和GetSystemMetrics的(SM_CYSCREEN)返回的相同的值.
当我在Delphi应用程序中最大化表单时,我得到1688的宽度和1058的高度.有8像素的差异.是什么导致这种差异?
我想格式化特定单元格强制两个小数位.数据来自ElevateDB存储过程并连接到TDataSource.
编辑:SQL编程注:
我不确定这是否只是一个ElevateDB问题.在了解Fields Editor之前,我尝试使用存储过程中的CAST(NumericField as varchar(10))语句在SQL级别格式化数据.通过这样做,它没有在字段编辑器中为此特定字段公开DisplayFormat属性.
当我从存储过程中删除CAST()语句时,DisplayFormat属性显示在字段编辑器中.
在uses子句中完全限定名称空间是否更好?例如,这些声明中的一个比另一个好吗?
uses
ShellApi,
Windows,
SHFolder,
SysUtils;
uses
Winapi.ShellApi,
Winapi.Windows,
Winapi.SHFolder,
System.SysUtils;
Run Code Online (Sandbox Code Playgroud) delphi ×10
contextmenu ×1
currency ×1
datamodel ×1
dbgrid ×1
delphi-2010 ×1
delphi-xe2 ×1
dfm ×1
elevatedb ×1
excel ×1
firemonkey ×1
format ×1
formatting ×1
ide ×1
label ×1
lazarus ×1
namespaces ×1
oop ×1
refactoring ×1
rounding ×1
static-text ×1
types ×1
unit-testing ×1
winapi ×1
windows ×1