为什么变量被声明为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中的使用数据库组件(DB Aware Controls)是目前最好的选择.
这个争论始于他很多年前:今天他仍然相信使用简单的控件如TEdit,TStringGrid等,用一套getter和setter方法填充它们,是灵活性和可维护性方面的最佳解决方案.整个项目.
对我来说,这听起来至少是违反直觉的.
我认为在开发数据库应用程序时,使用DB Aware控件(如TDBEdit,TDBGrid等)是正确的做法.
所以:请帮助我说服他使用DB Aware Controls的声音建议!
提前感谢所有将至少发表自己建议的人,无论是支持一种解决方案还是其他解决方案.
- fabio vitale
我知道我可以这样做:
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')'预期,但','发现
说我有以下字符串:
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)
法比奥
如何按名称而不是索引访问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列索引,因为索引比名称更容易变化.
关于如何更好地封装它的任何想法?
为什么在同一台机器上计算同一文件的SHA-1哈希会在Windows中和msysgit Git bash中产生两个完全不同的SHA-1哈希值?
SHA-1算法是不是要为所有操作系统中的同一文件生成相同的哈希值?
在Windows上(使用HashCheck):
文件hello.txt
22596363b3de40b06f981fb85d82312e8c0ed511
在msysgit的Git bash窗口内(同一台机器,同一个文件):
$ git hash-object hello.txt
3b18e512dba79e4c8300dd08aeb37f8e728b8dad
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)
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) 在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) 我希望经过身份验证的用户只能:
基本上我想要阻止用户,甚至是经过身份验证的用户,推送到这个git repo.但对于同一个GitBlit的其他git回购,我可能希望认证用户也推送到那些回购.
先感谢您
我有一个带有进度指示器的主表单.在数据模块中,我有十个数据集,每个数据集都定义了一个OnBeforeOpen事件.
我想通过主窗体中的进度条显示打开的数据集的进度百分比.
由于我对多线程编程完全不熟悉,有人可以给我一些建议吗?
非常感谢你