FillRect
不会TStringGrid
在Delphi XE2中绘制完整的单元格.默认颜色左侧有3个像素的间隙(BiDiMode
设置为bdLeftToRight
).在我之前使用过的Delphi 6中不存在这个问题.
procedure TShapeline.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
Stringgrid1.Canvas.Brush.Color:=$00FF80FF;
StringGrid1.Canvas.FillRect(Rect);
end;
Run Code Online (Sandbox Code Playgroud)
我试图更改所有属性(包括DrawingStyle
)和不同的画笔样式,绘制的矩形不会填充整个单元格.
我在2010年和XE2中广泛使用Delphi中的游标完全类.最近,在为XE2安装Update 4之后,Cursor的Complete Class停止工作.经过一番研究后,我发现卸载"AQTime"可以解决这个问题.所以我这样做了(不得不重新安装Delphi只是为了删除它)并确定它再次开始工作.
除了今天,它突然再次停止.没有安装AQTime,我在IDE中根本没有做任何事情(据我所知)可能导致这种情况.我没有安装/卸载任何软件包,更改了任何库路径,甚至没有更改任何设置.它突然停止了我的开发工作.工作一分钟,而不是下一分钟.我重新启动了Delphi,重启了我的电脑,甚至尝试了一个全新的项目.它将不再起作用.
有谁知道为什么停止工作?我该如何让它再次运作?这是我一直使用的非常有用的工具.
我已经阅读了这些问题和答案
但我不能弄清楚如何修补位于其他单元中的类的私有方法.
检查此示例我想修补Bar
程序.
Unit ThidParty;
Interface
Type
TFoo =Class
private
procedure Bar;
end;
Run Code Online (Sandbox Code Playgroud)
我认为关键是找到一种方法来获取私有方法的地址.
那么,我如何修补delphi类的私有方法?
我正在使用Delphi XE2 Update 3. Update 4与我们的某些第三方组件不兼容,因此我们尚未更新.
我在我的应用程序中使用TImageList.我已经注意到很多次从源视图切换到窗体视图(F12)时,突然之前未修改的单元将被修改.如果我保存按F12导致的更改,我可以查看源代码控制并看到TImageList.Bitmap属性的几个字节已更改.这是TortoiseHg Workbench中的一个例子:
@@ -830,7 +830,7 @@
Left = 760
Top = 480
Bitmap = {
- 494C01010200E402E40210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 494C01010200E802E80210001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
^^ ^^ <-- two bytes changed
Run Code Online (Sandbox Code Playgroud)
有时会有其他微小的变化,但它总是仅限于TImageList.Bitmap数据中的几个孤立点.当我没有做出任何有意的改变时,不断将这些微不足道的变化推向源代码控制是一件非常痛苦的事情.
有谁知道为什么Delphi在源视图和表单视图之间切换时更改TImageList.Bitmap数据?有没有办法解决这个限制?
我是JSON的新手,我手上有这个项目,需要我解析一个JSON并在ListView中显示它的一些内容.问题是我现在阅读的文档处理的是包含JSON数组的JSON对象,而我的案例涉及处理嵌套对象.简而言之,这里是摘要:我正在使用带有DBXJSON的Delphi XE2.我将一些值发布到服务器,并使用看起来像这样的JSON对象进行回复:
{
"products": {
"Men's Sneakers": {
"instock": false,
"size": "423",
"manufacturer": "Adidas",
"lastcheck": "20120529"
},
"Purse": {
"instock": true,
"size": "not applicable",
"manufacturer": "Prada",
"lastcheck": "20120528"
},
"Men's Hood": {
"instock": false,
"size": "M",
"manufacturer": "Generic",
"lastcheck": "20120529"
}
},
"total": 41,
"available": 30
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是将每个项目(即Purse)解析并添加为listview中的标题,以及一个子项目(制造商).我创建了一个以JSON字符串作为参数的过程,创建了JSON对象,但我不知道如何进一步解析嵌套对象.
procedure TForm1.ParseString(const AString: string);
var
json : TJSONObject;
jPair : TJSONPair;
jValue : TJSONValue;
jcValue : TJSONValue;
l,i : Integer;
begin
json := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(AString),0) as TJSONObject;
try
//get the pair to evaluate …
Run Code Online (Sandbox Code Playgroud) 所以有一段时间我一直有这个问题:
在Windows 7(64位)上,使用Delphi 7和Delphi XE2,如果来自IDE,我编译程序,运行它,停止它,更改它并重新运行它我收到此错误消息:
[致命错误]无法创建输出文件"project1.exe"
我不清楚导致这种情况的原因.我用谷歌搜索了更多信息,但我找不到解决方案.
有两种解决方法:要么等一两分钟,要么手动删除project1.exe.不用说,这是行不通的.
我没有病毒扫描程序,也没有病毒.拥有相关文件夹的完全访问权限 以管理员身份运行一切
那是什么原因导致的?我该怎么做才能解决这个问题?
默认情况下,.DPR和.DPROJ的文件扩展名描述是相同的,因此在资源管理器中打开具有相同基本名称的项目文件时,两个文件描述都列为"Delphi项目文件"这为开发人员提供了一个选择 - 要打开哪个文件?
我通常打开列出的第二个文件,假设它是DPROJ.
当存在相应的DPROJ文件时,是否有打开DPR的缺点?IDE是否正常处理?
我有时打开列出的第一个文件,我没有注意到任何问题,但这是其中一个尚未得到答复的好奇心.我查看了帮助,找不到任何东西.
作为一个例子,给定下面的代码提取,我想定义一个断点,当对象字段值发生变化时触发该断点,并且可选地,在条件(False
或True
在这种情况下)中断.
type
TForm1 = class(TForm)
EnableButton: TButton;
DisableButton: TButton;
procedure EnableButtonClick(Sender: TObject);
procedure DisableButtonClick(Sender: TObject);
private
FValue: Boolean; // <== Would like to define a breakpoint here whenever FValue changes.
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DisableButtonClick(Sender: TObject);
begin
FValue := False;
end;
procedure TForm1.EnableButtonClick(Sender: TObject);
begin
FValue := True;
end;
Run Code Online (Sandbox Code Playgroud) 我有这个测试程序https://gist.github.com/real-mielofon/5002732
RttiValue := RttiMethod.Invoke(RttiInstance, [10]);
Run Code Online (Sandbox Code Playgroud)
和带接口的简单单元:
unit Unit163;
interface
type
{$M+}
ISafeIntf = interface
function TestMethod(aI: integer): integer; safecall;
end;
{$M-}
type
TSafeClass = class(TInterfacedObject, ISafeIntf)
public
function TestMethod(aI: integer): integer; safecall;
end;
implementation
function TSafeClass.TestMethod(aI: integer): integer;
begin
result := aI+1; // Exception !!
end;
end.
Run Code Online (Sandbox Code Playgroud)
我有kaboom
result := aI+1;
Run Code Online (Sandbox Code Playgroud)
如果它是程序或不安全,那么它没关系:-(
我们最近开始创建64位构建的应用程序.在比较测试期间,我们发现64位构建的计算方式不同.我有一个代码示例,演示了两个版本之间的差异.
var
currPercent, currGross, currCalcValue : Currency;
begin
currGross := 1182.42;
currPercent := 1.45;
currCalcValue := (currGross * (currPercent * StrToCurr('.01')));
ShowMessage(CurrToStr(currCalcValue));
end;
Run Code Online (Sandbox Code Playgroud)
如果您在32位版本中逐步执行此操作,则使用17.1451计算currCalcValue,而使用17.145返回64位版本.
为什么64位构建不计算额外的小数位?所有变量都定义为4个十进制货币值.
delphi ×10
delphi-xe2 ×10
32bit-64bit ×1
aqtime ×1
delphi-7 ×1
delphi-xe ×1
delphi-xe3 ×1
ide ×1
json ×1
nested ×1
rtti ×1
timagelist ×1
tstringgrid ×1
windows-7 ×1