在我维护的一些代码中,我看到TClientDataSet.OnCalcFields事件处理程序中使用了两种不同的方法:
with DataSet do
begin
// 1. Call FieldByName twice
if AMinDate > FieldByName(SPlanAllocatieFromDate).AsDateTime then
AMinDate := FieldByName(sPlanAllocatieFromDate).AsDateTime;
// 2. Put the retrieved FieldByName value in a temp var
lEmpID := FieldByName(SPlanAllocatieEmpID).AsInteger;
if lEmpID <> 0 then lTSAllocatedEmpIDs.Add(IntToStr(lEmpID));
end;
Run Code Online (Sandbox Code Playgroud)
编译器(Delphi XE2,Win32 app)是否会优化方法2以使用temp var?这两个FieldByNames非常接近,你甚至可以说是嵌套的.
如果没有,我应该重写1.因为OnCalcFields经常执行.
BTW.我知道Fields []和FieldByName(),或者在运行EOF循环时使用temp TField var,这些不是问题.
我有一个带有HWND句柄的数据模块,可以接收PostMessage调用.
手柄被分配在DataModuleCreate像这样(被TTNONVISUAL 没有定义):
{$IFNDEF TTNONVISUAL}
FHWND := AllocateHWND(WindProc);
{$ELSE}
FHWND := 0;
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
该数据模块还用于在TTNONVISUAL非可视程序被定义.
数据模块中的WindProc包含在{$ IFNDEF TTNONVISUAL}中,因此在非可视程序中没有WindProc和FHWND = 0
在该程序中,对这个0句柄进行PostMessage调用是否安全?
注意:PostMessage不发送任何其他数据:
PostMessage(FHWND,WM_SYNC_PROGRESS,0,0)
和WM_SYNC_PROGRESS是WM_USER + 111,并且没有其他WM_SYNC_PROGRESS处理程序.
我有一个包含许多记录的数组。像这样设置:
Tcustomer= record
Name: string[40];
Address: string[100];
phone: string[15];
email:string[50];
end;
Run Code Online (Sandbox Code Playgroud)
现在,假设我想在这个数组中搜索具有特定姓名和地址的人。我该怎么办?所以基本上搜索不仅仅是1个元素。(我可以专门搜索 1 个属性,但不能过滤超过 1 个)
附件是我的表单如何设置的图片,这将更详细地显示我所指的内容:

我正在尝试使用XML将文件加载到Delphi数据集中 mydataset.loadfromfile("myfile.xml")
问题是我不知道XML字段名称和它有多少字段.我知道XML只有一个级别,例如:
<DOCTO id ="3892" usuario="2" data="22/12/2015 10:33:22">
<CONDUTA_1>teste conduta 1</CONDUTA_1>
<CONDUTA_2>teste conduta 2</CONDUTA_2>
</DOCTO>
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来加载xml而不创建之前的字段.
库ipworks提供了一些获取textmessage的方法.
在文档中,我找不到如何使用imaps通过ipworks库读取附件.
你能帮助我吗?谢谢
我是C#的新手.
在表单设计中,假设我有一个Textbox,Listview和一个按钮.我为这个按钮编写代码:
listBox1.Items.Add(textBox1.Text);
Run Code Online (Sandbox Code Playgroud)
...它只是将文本框中的文本添加到ListView中.
另一种方式是:
我创建了一个Person.cs类,在那里我添加了它
string FirstName;
public string FN {
get { return FirstName; }
set { FirstName = value; }
}
Run Code Online (Sandbox Code Playgroud)
在按钮上我添加:
Student NewStudent = new Student();
NewStudent.FN = textBox1.Text;
listBox1.Items.Add(NewStudent.FN);
Run Code Online (Sandbox Code Playgroud)
这两个会做同样的事情.
第一行只需要一行代码,但第二行是几行.为什么不使用只需要一行的第一个呢?
我尝试用FireMonkey编写照片编辑器.我有50个在运行时创建的TImage组件.如果我将大图像(大约3 MB)加载到这些组件中,我会收到"内存过载"错误.
这是我的图像传输代码;
img1:=(sender as timage).Name;
strm:=TMemoryStream.Create;
(data.Source as timage).Bitmap.SaveToStream(strm);
(sender as timage).Bitmap.LoadFromStream(strm);
strm.Free;
Run Code Online (Sandbox Code Playgroud) 我是Delphi 10 Seattle的新手,突然间我每次按下时都会得到一些额外的文字ENTER.这很烦人......
任何人都知道为什么会这样,以及我如何回到普通ENTER代码?
按下ENTER它会导致换行和换行
until ;
Run Code Online (Sandbox Code Playgroud)
我不知道我做了什么来获得额外的文字until ;.
我有一个包含许多DFM文件和匹配的PAS文件的Delphi项目。我可以通过重建项目来编译PAS,但是如何重建DFM文件并使它们与PAS文件保持同步?
现在,我收到很多“ [[Variable.field]]没有相应的组件。要删除声明吗?” 从IDE进行提示。
Button1: TButton;
Label2: TLabel;
procedure TForm5.Button1Click(Sender: TObject);
begin
if Button1.Click = True then
Label2.Caption := 'lol';
Run Code Online (Sandbox Code Playgroud)
基本上我想要的是,当用户点击按钮时,Label2会改变那里写的内容.是的我有Label2.出现的错误是" E2008不兼容的类型 "......任何人都可以帮助我吗?