小编Fab*_*ale的帖子

为什么变量被声明为TStrings并创建为TStringList?

为什么变量被声明为TStrings和创建为TStringList

例如:var sl声明为,TStrings但创建为TStringList

var
  sl : TStrings;
begin
  sl := TStringList.Create;

  // add string values...
  sl.Add( 'Delphi' );
  sl.Add( '2.01' );

  // get string value using its index
  // sl.Strings( 0 ) will return
  //   'Delphi'
  MessageDlg(
    sl.Strings[ 0 ],
    mtInformation, [mbOk], 0 );

  sl.Free;
end;
Run Code Online (Sandbox Code Playgroud)

delphi tstringlist

38
推荐指数
4
解决办法
2万
查看次数

在Delphi中使用DB Aware控件而不是非DB Aware控件有什么好处

我会说服一位朋友,在开发数据库应用程序时,使用Delphi中的使用数据库组件(DB Aware Controls)是目前最好的选择.

这个争论始于他很多年前:今天他仍然相信使用简单的控件如TEdit,TStringGrid等,用一套getter和setter方法填充它们,是灵活性和可维护性方面的最佳解决方案.整个项目.

对我来说,这听起来至少是违反直觉的.

我认为在开发数据库应用程序时,使用DB Aware控件(如TDBEdit,TDBGrid等)是正确的做法.

所以:请帮助我说服他使用DB Aware Controls的声音建议!

提前感谢所有将至少发表自己建议的人,无论是支持一种解决方案还是其他解决方案.

- fabio vitale

delphi

12
推荐指数
3
解决办法
2139
查看次数

如何为整个整数数组赋值?

我知道我可以这样做:

const
  arrayOfIntegers : Array[1..15] of Integer = (3,2,8,10,1,6,2,13,13,3,13,13,13,3,45);
Run Code Online (Sandbox Code Playgroud)

但是我该如何做呢?

var
  arrayOfIntegers : Array[1..15] of Integer;
begin
  arrayOfIntegers := (3,2,8,10,1,6,2,13,13,3,13,13,13,3,45);
end;
Run Code Online (Sandbox Code Playgroud)

一旦我尝试编译上面的代码,我得到E2029')'预期,但','发现

delphi

9
推荐指数
2
解决办法
9381
查看次数

如何删除角色周围的空间?

说我有以下字符串:

s := 'This , is,       the Delphi  ,    World!';
Run Code Online (Sandbox Code Playgroud)

我想要以下输出:

Result := 'This,is,the Delphi,World!';
Run Code Online (Sandbox Code Playgroud)

基本上我需要一个例程,只有当它们出现在逗号字符之前或之后(这是我的分隔符)时才会删除所有出现的空格,在其他字之间留下完整的空格.

任何帮助深表感谢.

您如何看待这个解决方案?

function RemoveSpacesAroundDelimiter(var aString: string; aDelimiter:
    string): string;
begin
  while AnsiContainsText(aString, aDelimiter + ' ') do
    begin
    aString := StringReplace(aString, ', ', aDelimiter, [rfReplaceAll, rfIgnoreCase]);
    end;

  while AnsiContainsText(aString, ' ' + aDelimiter) do
    begin
    aString := StringReplace(aString, ' ' + aDelimiter, aDelimiter, [rfReplaceAll, rfIgnoreCase]);
    end;

  Result := aString;
end;
Run Code Online (Sandbox Code Playgroud)

谢谢

法比奥

delphi string

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

如何按名称而不是按索引访问TDBGrid列?

如何按名称而不是索引访问TDBGrid列?

例如,现在我使用:

 grdInvoiceItems.Columns[2].Visible := False;
Run Code Online (Sandbox Code Playgroud)

但是写下这样的东西要好得多:

 grdInvoiceItems.Columns['UnitPrice'].Visible := False;
Run Code Online (Sandbox Code Playgroud)

与此同时,我使用for循环:

  for idx := 0 to grdInvoiceItems.Columns.Count - 1 do
    begin
    if (
         (grdInvoiceItems.Columns[idx].FieldName = 'UnitPrice') or
         (grdInvoiceItems.Columns[idx].FieldName = 'Discount') or
         (grdInvoiceItems.Columns[idx].FieldName = 'SecretCode')
       ) then
      grdInvoiceItems.Columns[idx].Visible := False;
    end;
Run Code Online (Sandbox Code Playgroud)

使用colum name是IMO更好的tham列索引,因为索引比名称更容易变化.

关于如何更好地封装它的任何想法?

delphi

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

为什么Windows或Linux下的同一文件有不同的SHA-1?

为什么在同一台机器上计算同一文件的SHA-1哈希会在Windows中和msysgit Git bash中产生两个完全不同的SHA-1哈希值?

SHA-1算法是不是要为所有操作系统中的同一文件生成相同的哈希值?

在Windows上(使用HashCheck):
文件hello.txt
22596363b3de40b06f981fb85d82312e8c0ed511

在msysgit的Git bash窗口内(同一台机器,同一个文件):

$ git hash-object hello.txt
3b18e512dba79e4c8300dd08aeb37f8e728b8dad

linux windows hash sha1 msysgit

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

如何发布RTL单元的私有类功能?

Delphi XE3,System.Rtti.pas

我需要访问两个私有类函数,但我已经读过如果我修改RTL单元的接口部分,那么我需要重新编译所有的RTL.不适合胆小的心!

两个私有类函数在System.Rtti.pas中:

    class function GetName<T{: enum}>(AValue: T): string; reintroduce; static;
    class function GetValue<T{: enum}>(const AName: string): T; static;
Run Code Online (Sandbox Code Playgroud)

System.Rtti.pas

  TRttiEnumerationType = class(TRttiOrdinalType)
  private
    function GetMaxValue: Longint; override;
    function GetMinValue: Longint; override;
    function GetUnderlyingType: TRttiType;
    constructor Create(APackage: TRttiPackage; AParent: TRttiObject; var P: PByte); override;
    {$HINTS OFF}
    function GetNames: TArray<string>;
    class function GetName<T{: enum}>(AValue: T): string; reintroduce; static;
    class function GetValue<T{: enum}>(const AName: string): T; static;
    {$HINTS ON}
  public
    property UnderlyingType: TRttiType read GetUnderlyingType;
  end;
Run Code Online (Sandbox Code Playgroud)

delphi

7
推荐指数
2
解决办法
425
查看次数

没有引用计数的接口

在StackOverflow上阅读了很多关于使用Interfaces自动引用计数的缺点后,我开始尝试手动引用计数每个接口实例化.

在尝试了整整一个下午后,我放弃了!

当我调用FreeAndNil(p)时,为什么会出现访问冲突?

以下是我的简单单元的完整列表.

unit fMainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm4 = class(TForm)
    btn1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  end;

type
  IPersona = interface(IInterface)
  ['{44483AA7-2A22-41E6-BA98-F3380184ACD7}']
    function GetNome: string;
    procedure SetNome(const Value: string);
    property Nome: string read GetNome write SetNome;
  end;

type
  TPersona = class(TObject, IPersona)
  strict private
    FNome: string;
    function GetNome: string;
    procedure SetNome(const Value: string);
  protected
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
    function QueryInterface(const IID: TGUID; …
Run Code Online (Sandbox Code Playgroud)

delphi

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

如何设置GitBlit存储库以防止用户推送?

我希望经过身份验证的用户只能:

  • 视图
  • 克隆
  • 从中取/拉?

基本上我想要阻止用户,甚至是经过身份验证的用户,推送到这个git repo.但对于同一个GitBlit的其他git回购,我可能希望认证用户推送到那些回购.

先感谢您

git gitblit

5
推荐指数
1
解决办法
2504
查看次数

如何从第二个线程更新进度指示器?

我有一个带有进度指示器的主表单.在数据模块中,我有十个数据集,每个数据集都定义了一个OnBeforeOpen事件.

我想通过主窗体中的进度条显示打开的数据集的进度百分比.

由于我对多线程编程完全不熟悉,有人可以给我一些建议吗?

非常感谢你

delphi omnithreadlibrary

5
推荐指数
1
解决办法
7259
查看次数

标签 统计

delphi ×8

git ×1

gitblit ×1

hash ×1

linux ×1

msysgit ×1

omnithreadlibrary ×1

sha1 ×1

string ×1

tstringlist ×1

windows ×1