小编RBA*_*RBA的帖子

Delphi - 从外部文件执行函数和过程

是否可以从文本文件中读取和执行过程或函数?

delphi delphi-7

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

Delphi将数据库表作为类

我的一个朋友问我如何在运行时创建一个"映射"数据库表的类.他正在使用ADO连接到数据库.

我的回答是,他可以使用'table_name'选择第一行来填充ADOQuery,设置与数据库的连接,打开查询,然后在ADOQuery.Fields上使用循环,他可以得到所有的FieldName和FieldType表中的字段.通过这种方式,他可以将表中的所有字段及其类型作为类的成员.

他的问题有其他解决方案吗?

delphi oop ado

4
推荐指数
1
解决办法
5749
查看次数

Delphi - 在引发它之后对它自己的构造函数进行异常处理

问题是:在提出异常之后,我可以阻止它从它自己的构造函数传播吗?考虑下面的代码:

unit Unit2;

interface

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

type
  TMyErrorClass = class(Exception)
    constructor Create(aMsg:String);
  end;
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
//
 raise TMyErrorClass.Create('test');
end;

{ TMyErrorClass}

constructor TMyErrorClass.Create(aMsg: String);
begin
 {$IFDEF DEBUG}
   Showmessage(aMsg);
 {$ELSE}
  //here I want to 'kill' the exception
 {$ENDIF}
end;

end.
Run Code Online (Sandbox Code Playgroud)

在调用raise之后,如何在不添加try的情况下终止异常,而不是在我提出异常的地方?

LE:我有一个应用程序,它有近2000个这样的加注......而我正试图找到一个替代解决方案来为它编写错误处理....

delphi exception-handling delphi-2006

4
推荐指数
1
解决办法
1991
查看次数

Delphi XE - [DCC错误]:E2004标识符重新声明:'系统'

我不明白为什么会出现这个错误...这是XE中的错误,还是IDE设置中的错误?

在此输入图像描述

delphi delphi-xe

4
推荐指数
1
解决办法
3252
查看次数

Delphi XE - System.Pos功能的更快替代品

我知道FastStrings中的很多代码都包含在Delphi XE中.我需要处理数千个文件并进行一些文本处理.System.Pos例程是否有"更快"的替代方案?

delphi delphi-xe delphi-xe3

4
推荐指数
1
解决办法
3593
查看次数

Delphi - 从TImageList获取位图

我正在将图像添加到像这里的图像列表中 - 使用Delphi XE在运行时将png图像添加到图像列表.从此列表中获取位图并将其保存到硬盘驱动器时会出现此问题.

bmp:=tbitmap.create;
imagelist.getbitmap(0,bmp);
bmp.savetofile()
Run Code Online (Sandbox Code Playgroud)

这发生在很多白色bmp文件和几个带有"图像"的文件中.它应该非常容易,但我无法理解什么是错的.

LE:这个例子更像伪代码.下面是:

填写清单

   FImageList := TImageList.Create(nil);
   FImageList.Masked:=false;
   FImageList.ColorDepth:=cd32bit;
   FImageList.SetSize(32,32);//I am sure that all images are 32x32
   while not dsTemp.eof do//dstemp is a Tdatasetdescendant
    begin
     ststream := dsTemp.CreateBlobStream(dsTemp.FieldByName('FLAG'), bmRead);

     pngImage := TPngImage.Create;
     pngImage.LoadFromStream(ststream);

     btBitmap := TBitmap.Create;
     btBitmap.PixelFormat := pf32bit;
     btBitmap.Width := pngImage.Width ;
     btBitmap.Height := pngImage.Height ;
     pngImage.AssignTo(btBitmap);
     btBitmap.AlphaFormat:=afIgnored;

     res := FImageList.Add(btBitmap,nil);
//     pngImage.savetofile('C:\a\'+inttostr(res)+'.png');-works. image is ok
//     btBitmap.savetofile('C:\a\'+inttostr(res)+'.bmp');-works. image is ok
     dsTemp.Next;
     freeandnil(btBitmap);
     freeandnil(pngImage);
    end;
Run Code Online (Sandbox Code Playgroud)

加载位图的问题

 for iPos := 0 to FImageList.Count-1 …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

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

Delphi - 即使尚未创建对象,也可以使用布尔属性

我今天正在测试一些东西,我注意到你可以访问一个对象的布尔类型属性,即使没有创建实例.这怎么可能?尝试修改布尔属性时会引发AV.

unit Unit4;

interface

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

type
  TTest = class(TObject)
    public
     bBool : Boolean;
  end;
  TForm4 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.FormCreate(Sender: TObject);
var t : TTest;
begin
 if t.bBool then
  ShowMessage('what????');//this message is showed
 t.bbool := false; //AV...
end;

end.
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

4
推荐指数
1
解决办法
304
查看次数

Delphi - 认证机制建议

这个问题只有教育目的.此时我正在制作一个小应用程序,我希望在其中包含一个身份验证机制.应用程序在安装时应该可以访问Internet,但是可以脱机工作.到目前为止,我一直在考虑以下解决方案:

1)经典:发送到身份验证Web服务的用户名和密码(加密) - Internet连接断开时出现问题.
2)根据主板/硬盘序列号生成密码否 - 这会在组件更改时产生问题.

另外,我想要包含一个"记住密码"复选框.这是最安全的方法吗?我应该在哪里存储这些信息?

我相信你们大多数人已经建立了一个或多或少复杂的认证机制,我在征求你的意见.此外,我知道一切都可以被黑客攻击,但我想尽可能地让它变得困难.

delphi authentication

3
推荐指数
1
解决办法
828
查看次数

Delphi - TValue指针和背面

我正在努力处理一段简单的代码,即使很简单,我找不到解决方案.在某个方面,我有一个像这样的事件

OnReadMessageParameter(Self, aName, aTypeInfo, pointer(@aValue), [psIsTValue]);
Run Code Online (Sandbox Code Playgroud)

重要的是aValue参数,它是TValue类型.当这被称为aValue.IsObject时为true.为了处理来自它的数据,我已经为此事件分配了我的例程:

.DoOnReadMessageParameter(Sender: TROMessage; const aName: string;
  aTypeInfo: PTypeInfo; const DataRef: pointer; Attributes: TParamAttributes);
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,我已经尝试过几种方法将DataRef转换回TValue项:

var val: tvalue;

tvalue.Make(@DataRef^,TypeInfo(TValue),val);
or another attempt
val := TValue(@DataRef^);
Run Code Online (Sandbox Code Playgroud)

但IsObject属性为false.它一定是非常简单的东西,我错过了.任何的想法?

delphi delphi-10.1-berlin

3
推荐指数
1
解决办法
314
查看次数

获取类的所有静态属性

我知道有很多这样的问题,但我找不到我想做的事情的任何答案。

考虑以下抽象类:

public abstract class TestBase
{
    public static ITest Test => Container.Resolve<ITest>();
    public static ITest1 Test1 => Container.Resolve<ITest1>();
    public static ITest2 Test2 => Container.Resolve<ITest2>();
    public static ITest3 Test3 => Container.Resolve<ITest3>();
}
Run Code Online (Sandbox Code Playgroud)

我试图获取从 IDummy 接口继承的所有属性,如下所示:

    var members = typeof(TestBase).GetMembers(BindingFlags.Static | BindingFlags.Public)
        .Where(f => f.GetType().IsAssignableFrom(typeof(IDummy)) == true);
Run Code Online (Sandbox Code Playgroud)

但列表是空的。如果不添加 where 子句“ .Where(f => f.GetType().IsAssignableFrom(typeof(IDummy)) == true)”,我会得到所有结果,包括属性的 getter。

可能是一些微不足道的事情,但由于我对反射不太熟悉,我无法弄清楚我做错了什么。

.net c# reflection

3
推荐指数
1
解决办法
1741
查看次数