你们在哪里存储第三方(和你自己的)组件?
你是否为每个Delphi版本保留单独的副本?
多年来我一直在使用c:\program files\borland\delphi7\lib\Delphi 2006,2007,2009和2010,就像这样:
c:\program files\borland\delphi7\lib\AggPas\
c:\program files\borland\delphi7\lib\DeHL\
c:\program files\borland\delphi7\lib\DevExpress\
c:\program files\borland\delphi7\lib\FastCode\
c:\program files\borland\delphi7\lib\FastMM\
c:\program files\borland\delphi7\lib\Fundamentals\
c:\program files\borland\delphi7\lib\Graphics32\
c:\program files\borland\delphi7\lib\JCL\
c:\program files\borland\delphi7\lib\JVCL\
c:\program files\borland\delphi7\lib\OmniThread\
c:\program files\borland\delphi7\lib\Raize\
c:\program files\borland\delphi7\lib\TeeChartPro\
c:\program files\borland\delphi7\lib\TurboPower\
c:\program files\borland\delphi7\lib\VirtualTreeView\
c:\program files\borland\delphi7\lib\Zeos\
Run Code Online (Sandbox Code Playgroud)
但是,现在我甚至不再使用Delphi7了(2010年它不能做什么呢?),所以这条道路不再有意义了.我即将在家用机器上安装windows7,所以我在考虑这样的事情:
c:\src\DelphiLib\
有更好的想法吗?
我想写一些高质量的C代码.有人能指点我一些文章,网站......无论我需要什么样的东西都有例子.我已经看过并阅读过K&R C书.
但时代已经改变,有些人必须对质量C代码有更多的说法.另一个重要的事情是你如何确保你作为程序员有书面质量的C代码?
我正在尝试使用VirtualStringTree而不是Listview来构建我的项目,因为速度差异巨大.事情是,即使在通过演示看之后,我也无法弄清楚我将如何将其用作ListView.比如,添加,删除,基本上只是使用ListView项目是如此简单,但是当我看到VT时,它变得非常复杂.
我正在寻找的是一个看起来像ListView的VT,子项目等.
以下是使用ListView的一些例程,我想与VT一起使用(这只是一个伪示例:
procedure Add;
begin
with ListView.Items.Add do
Begin
Caption := EditCaption.Text;
SubItems.Add(EditSubItem.Text):
End;
end;
Procedure ReadItem(I : Integer);
begin
ShowMessage(ListView.Items[I].Caption);
ShowMessage(ListView.Items[I].SubItems[0]);
end;
Run Code Online (Sandbox Code Playgroud)
当然,也是删除功能,但由于那就像1行,我没有打扰:P
任何人都可以将上面的例子翻译成使用ListView风格的VT吗?
谢谢!
有谁知道一个TDataSet的后裔,与泛型和RTTI的作品,让我可以写这样的代码,并利用数据感知组件的GUI的?:
...
ds:TDataset<TPerson>;
...
procedure DoStuff;
begin
ds:=TDataset<TPerson>.create;
ds.add(TPerson.Create('A.','Hitler',77));
ds.add(TPerson.Create('O.','Bin Laden',88));
end;
Run Code Online (Sandbox Code Playgroud)
这应该是可能的.fielddef可以通过RTTI创建,因为已知数据的确切类型.值也可以来回自动编组,因此您可以查看和编辑类或记录中的数据.
我讨厌必须编写大量无用的编组代码,而已经通过RTTI获得所需的信息.
或者有人曾经写过某种TEnumerable < - > TDataset适配器?
这样的事情是存在的,还是我应该开始写一个?
...
我能找到的最接近的东西是来自Mastering Delphi 7的Marco Cantu的一个(优秀的!)示例,但是代码本身并没有使用泛型,新RTTI系统或属性等新语言功能,而且它没有使用Unicode delphi.自D7以来,TDataset也发生了变化.
假设您有一个您想要初始化的本地记录:
type
TMyRec=record
Val1, Val2:Integer;
end;
procedure MyProc;
var
MyVar:TMyRec;
begin
// ... ?
WriteLn(Val1,Val2);
end;
Run Code Online (Sandbox Code Playgroud)
除了"手动"设置每个字段外,还有几种方法可以实现.
使用Initialize():
Initialize(MyVar);
Run Code Online (Sandbox Code Playgroud)使用默认值():
MyVar := Default(TMyVar);
Run Code Online (Sandbox Code Playgroud)使用FillChar:
FillChar(MyVar,SizeOf(MyVar),0);
Run Code Online (Sandbox Code Playgroud)定义一个空常量,并将其赋值给var
const cMyVar:TMyVar=();
...
MyVar := cMyVar;
Run Code Online (Sandbox Code Playgroud)以上所有似乎都适用于这个例子.我想你甚至可以定义一个全局变量来初始化它.
但是有一种首选方法吗?或者在某些情况下,不建议使用上述任何一种情况,或者它根本不起作用?
把它短,有什么明确的正确方法TM初始化一个局部堆栈变量?:-)
Delphi中的类完成节省了大量时间,但我还没有找到一种方法来定制它.
我希望将一个属性的getter和setter组合在一起,而不是被整个单元抛出; 接口部分是正确生成的,但如果将内容留给IDE,实现部分就会变得一团糟.我希望默认情况下按这样排序方法:
function TAaa.getAaa();
程序TAaa.setAaa();
程序TAaa.Baa();
function TAaa.getCow();
程序TAaa.setCow();
程序TBbb.getAaa()
我希望实现部分与接口的顺序相同;
我希望生成的方法的主体看起来像这样:
.
procedure TMyClass.MyProc;
begin
{ TODO -oWouter -cimplement autogenerated stuff : implement Procedure MyProc() }
raise Exception.create('procedure TMyClass.MyProc() is not yet implemented');
end;
Run Code Online (Sandbox Code Playgroud)
有没有工具可以做到这一点,还是需要深入到opentools API来完成这样的事情?
在表单设计器中,我有时需要查看属性的类型,因此我知道它期望的输入类型.不幸的是,Object Inspector似乎没有显示它.
例:

这个组件显然希望我链接一个"网格",但我不知道我需要什么类型的网格.TDBGrid中?TDrawGrid?TColorGrid?TGridPanel?
当然,我可以通过查看组件的来源来看到这一点,但有没有人知道更快的方式?
我正在使用Delphi 10 Seattle处理VCL应用程序,并且当我注意到Delphi Ref为该Rect参数添加了自定义属性时,通过IDE创建了一个TDBGrid事件处理程序:
procedure TfrmXxx.yyyDrawColumnCell(Sender: TObject;
const [Ref] Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
//
end;
Run Code Online (Sandbox Code Playgroud)
更新
delphi custom-attributes parameter-passing pass-by-reference
偶尔我需要一个GUI来设置数值范围,但到目前为止,我从来没有真正找到任何组件可以很好地完成它.
我尝试过以下方法:
2 TTrackbars:1表示最小值,1表示最大值
2 TTackbars:1表示分钟,1表示范围
2 TSpinEdit控件手动键入数字
1个TTrackbar控制,带一个小按钮,可在最小模式和最大模式之间切换.在min-mode中我设置了selStart,在max-mode中我设置了selEnd(将ShowSelRange设置为true).
大多数选项占用的屏幕比我想象的要多,而且它们不直观.
理想情况下,我喜欢像Sony ACID中的滚动条一样的东西.您可以单击并拖动3个不同的点到最小值,最大值或两者:

是否有可用于设置范围的免费组件,或者可以通过创造性地使用开箱即用的VCL组件来完成类似的操作?
我修改了TMkRangeSlider以满足我的需求.它现在就像一个魅力.我已将修改后的组件和演示发送给原作者.

当您将函数标记inline为时,您提示编译器此函数是内联的候选函数.编译器仍然可以确定它不是一个好主意,并忽略它.
有没有办法在不使用反汇编程序的情况下查看函数是否内联?是否有一些我不知道的编译器警告?
内联编译器使用的规则是什么?是否存在导致函数永远不会被内联的结构?