小编Wou*_*ick的帖子

Delphi库的路径

你们在哪里存储第三方(和你自己的)组件?

你是否为每个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\

有更好的想法吗?

delphi path

9
推荐指数
1
解决办法
2981
查看次数

您如何确保您作为程序员具有书面质量的C代码?

我想写一些高质量的C代码.有人能指点我一些文章,网站......无论我需要什么样的东西都有例子.我已经看过并阅读过K&R C书.

但时代已经改变,有些人必须对质量C代码有更多的说法.另一个重要的事情是你如何确保你作为程序员有书面质量的C代码?

c software-quality

8
推荐指数
4
解决办法
2041
查看次数

从ListView切换到VirtualStringTree

我正在尝试使用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吗?

谢谢!

delphi listview virtualtreeview

8
推荐指数
4
解决办法
3790
查看次数

如何获取内存中对象的数据集?

有谁知道一个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也发生了变化.

delphi generics rtti data-aware tdataset

8
推荐指数
1
解决办法
3903
查看次数

Initialize(),Default()和FillChar()之间的区别

假设您有一个您想要初始化的本地记录:

type 
  TMyRec=record
    Val1, Val2:Integer;
  end;

procedure MyProc;
var
  MyVar:TMyRec;
begin
  // ... ?

  WriteLn(Val1,Val2);
end;
Run Code Online (Sandbox Code Playgroud)

除了"手动"设置每个字段外,还有几种方法可以实现.

  1. 使用Initialize():

    Initialize(MyVar);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用默认值():

    MyVar := Default(TMyVar);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用FillChar:

    FillChar(MyVar,SizeOf(MyVar),0);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 定义一个空常量,并将其赋值给var

    const cMyVar:TMyVar=();  
    ...    
    MyVar := cMyVar;    
    
    Run Code Online (Sandbox Code Playgroud)

以上所有似乎都适用于这个例子.我想你甚至可以定义一个全局变量来初始化它.

但是有一种首选方法吗?或者在某些情况下,不建议使用上述任何一种情况,或者它根本不起作用?

把它短,有什么明确的正确方法TM初始化一个局部堆栈变量?:-)

delphi initialization

8
推荐指数
1
解决办法
1570
查看次数

Delphi-IDE:如何改变类完成的工作方式?

Delphi中的类完成节省了大量时间,但我还没有找到一种方法来定制它.

  1. 我希望将一个属性的getter和setter组合在一起,而不是被整个单元抛出; 接口部分是正确生成的,但如果将内容留给IDE,实现部分就会变得一团糟.我希望默认情况下按这样排序方法:

    function TAaa.getAaa();

    程序TAaa.setAaa();

    程序TAaa.Baa();

    function TAaa.getCow();

    程序TAaa.setCow();

    程序TBbb.getAaa()

  2. 我希望实现部分与接口的顺序相同;

  3. 我希望生成的方法的主体看起来像这样:

.

 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来完成这样的事情?


相关问题: Class Completion以什么顺序发布其结果?

ide delphi code-generation class-completion opentools

7
推荐指数
1
解决办法
1372
查看次数

如何在Object Inspector中查看属性的类型?

在表单设计器中,我有时需要查看属性的类型,因此我知道它期望的输入类型.不幸的是,Object Inspector似乎没有显示它.


例:

近乎完美的圆圈

这个组件显然希望我链接一个"网格",但我不知道我需要什么类型的网格.TDBGrid中?TDrawGrid?TColorGrid?TGridPanel?

当然,我可以通过查看组件的来源来看到这一点,但有没有人知道更快的方式?

delphi

7
推荐指数
1
解决办法
262
查看次数

[ref]在VCL应用程序中做了什么?

我正在使用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)
  • 何时或为何IDE决定插入此内容?
  • 它在VCL应用程序中有任何影响吗?

更新

这是一个无法重现行为的视频: 在此输入图像描述

delphi custom-attributes parameter-passing pass-by-reference

7
推荐指数
1
解决办法
188
查看次数

用于在Delphi中设置数值范围的GUI

偶尔我需要一个GUI来设置数值范围,但到目前为止,我从来没有真正找到任何组件可以很好地完成它.

我尝试过以下方法:

  • 2 TTrackbars:1表示最小值,1表示最大值

  • 2 TTackbars:1表示分钟,1表示范围

  • 2 TSpinEdit控件手动键入数字

  • 带有范围的ttrackbar 1个TTrackbar控制,带一个小按钮,可在最小模式和最大模式之间切换.在min-mode中我设置了selStart,在max-mode中我设置了selEnd(将ShowSelRange设置为true).

大多数选项占用的屏幕比我想象的要多,而且它们不直观.

理想情况下,我喜欢像Sony ACID中的滚动条一样的东西.您可以单击并拖动3个不同的点到最小值,最大值或两者:

令人敬畏的mspaint绘图

是否有可用于设置范围的免费组件,或者可以通过创造性地使用开箱即用的VCL组件来完成类似的操作?


更新

我修改了TMkRangeSlider以满足我的需求.它现在就像一个魅力.我已将修改后的组件和演示发送给原作者.

TMkRangeSlider 1.1

delphi user-interface range

6
推荐指数
1
解决办法
883
查看次数

我怎么知道Delphi函数是否会被内联?

当您将函数标记inline为时,您提示编译器此函数是内联的候选函数.编译器仍然可以确定它不是一个好主意,并忽略它.

  1. 有没有办法在不使用反汇编程序的情况下查看函数是否内联?是否有一些我不知道的编译器警告?

  2. 内联编译器使用的规则是什么?是否存在导致函数永远不会被内联的结构?

delphi inline compiler-warnings

6
推荐指数
1
解决办法
1044
查看次数