小编Ple*_*rds的帖子

如何使用TypInfo RTTI方法将值设置为子属性项?

在我的问题: 如何使用"发件人"参数与"As"运算符一次超过一个类

我选择了Remy Lebeau的答案,因为它是大多数情况下最具活力的技术.它使用RTTI TypInfo类.

但是当我使用这个类时,另一个问题出现了: 我们如何设置子属性值?

function TRemote.UpdateQuery(DataSet: TDataSet; SQL: String): Boolean;
var
  PropInfo: PPropInfo;
begin
{ atualiza o código SQL padrão de um dataSet de consulta tipo View }
  PropInfo := GetPropInfo(DataSet, 'SQL', []);
  if not Assigned(PropInfo) then
  begin
    Result := False;
    Exit;
  end;
  try
    DataSet.Close;
    SetPropValue(DataSet, PropInfo, SQL);
    DataSet.Open;
    Result := True;
  except
    Result := False;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

示例:我有一个TIBQuery,我想更新SQL属性的文本.但是SQL属性是一个TStrings类,所以我必须使用SQL.Text.在上面的代码中,它将引发错误"无效的属性类型",因为我有一个TStrings,后来我尝试设置一个普通的字符串.

如何使用GetPropInfo访问SQL.Text? 是否有TIBQuery和TZQuery的共同祖先具有SQL属性,所以我可以更改为,而不是函数参数中的TDataSet?

delphi rtti delphi-2006

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

如何在Delphi 2009之前处理UTF-8和ANSI转换?

在Delphi 2009中,我们有:

RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName,TEncoding.UTF8);
RichEdit1.Lines.SaveToFile(OpenDialog2.FileName,TEncoding.Unicode);    
Run Code Online (Sandbox Code Playgroud)

如果我还没有,我如何在Delphi 2006上做到这一点TEconding

有没有办法将那个较新的图书馆运回那里?或者是否存在隐藏在Web中的解决方案?

delphi unicode utf-8 delphi-2009 delphi-2006

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

在 DT/RT 创建后如何在自定义组件上绘制额外的东西?

我正在尝试使用一种新的边框(圆角)创建一组自定义组件,如 TEdit、TDBEdit、TComboBox,并且我创建了以下代码:

unit RoundRectControls;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Windows, Messages, Forms;

type
  TRoundRectEdit = class(TEdit)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    constructor Create(AOwner: TComponent); override;
    { Public declarations }
  published
    property BorderStyle default bsNone;
    property Ctl3D default False;
    { Published declarations }
  end;

procedure Register;
procedure DrawRoundedRect(Control: TWinControl);

implementation

constructor TRoundRectEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  DrawRoundedRect(Self);
end;

procedure Register;
begin
  RegisterComponents('Eduardo', [TRoundRectEdit]);
end;

procedure DrawRoundedRect(Control: TWinControl);
var
   r: TRect;
   Rgn: HRGN;
begin
   with …
Run Code Online (Sandbox Code Playgroud)

delphi user-interface

2
推荐指数
1
解决办法
873
查看次数

如何修复TScrollBar MouseWheel故障?

我有一个TScrollBox内部,TFrame当我使用我的鼠标滚轮时,它根本不会向上或向下滚动ScrollBox.

我试过用

TScrollBox(Sender).Perform(WM_VSCROLL,1,0); 
Run Code Online (Sandbox Code Playgroud)

FrameMouseWheelDown但它不会触发.

有任何想法吗?

delphi scroll delphi-2006

2
推荐指数
1
解决办法
6037
查看次数

我们如何激活(按需)一个对象是另一个对象的属性?

我正在实现一个对象TTextFile,它是一个使用低级pascal文件函数和OO范例的框架.我想向开发人员添加在同一对象中需要时将其用作TStringList的选项,如下所示:

 TTextFile = class(TObject)
   constructor Create(FileName: String);
   procedure OpenForRead;
   procedure OpenForWrite;
   {...}
   property Content: TStringList;
 end;
Run Code Online (Sandbox Code Playgroud)

但我的问题是我希望该Content属性LoadFromFile仅在应用程序第一次使用它时才使用用户.不在Create构造中,因为文件可能太大,程序员更喜欢在这种情况下使用其他函数.在Content将使用的时候,他知道他是用不会非常大的文件.

大文件的示例是包含所有客户端名称和公民ID的列表.一个非常小的文件的例子是相同的列表,但仅限于当天等待参加的客户端.

是否可以在OO pascal中完成?如果不可能,我将不得不进行一种激活程序或过载Create,并使程序员Content在使用之前始终检查是否已加载.

delphi oop file-io

2
推荐指数
1
解决办法
118
查看次数

可以将整个应用程序放入$ _SESSION吗?

我来自桌面开发,我习惯在计算机的内存中查看我的应用程序,直到用户终止它为止.但是对于PHP,我们必须在每次向服务器请求新页面时重建所有环境(类,对象,数据库连接等).我们在$_SESSION数组中存储了一些变量,以便在用户进行身份验证时保持用户身份.

如果在用户身份验证之后,我将application对象(以及应用程序创建的所有其他对象放入当前会话中,以便解释器不需要在每个请求上重新加载所有内容,这是一个好主意吗?如果这是一个好主意,它是否只是如果我的服务器专用,那会很好吗?

我不能认为它不会使响应更快,而且内存消耗更少.

<?php
    // if user and password match:
    session_start()
    $_SESSION['Application'] = new TApplication('index/index'); 
    $_SESSION['Application']->SetUser($userName);
    $_SESSION['Application']->ConfigureUserPermissions;
    $_SESSION['Application']->RUN;

<?php
    // any request after user is logged and application is set:
    session_start()
    if (isSet($_SESSION['Application']) && (!$_SESSION['Application']->GetUser = null))
    {
        $_SESSION['Application']->ExecuteAction($_GET['url']);  
    }
Run Code Online (Sandbox Code Playgroud)

我想知道它是否是:

  • 可能?
  • 服务器内存杀手?
  • 通过读取PHP我的所有文件,然后更快地重建应用程序MVC
  • 可靠的方法?

php session

2
推荐指数
1
解决办法
72
查看次数

如何将日期和时间添加到日期时间变量?

如果我需要得到一个类似的日期,12/30/2013并在晚上8点添加10天,如果我有一个TDateTime第一次约会的变量,我怎么能在Delphi中做到这一点?

delphi

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

是否有Delphi的"with..do"Java等价物?

考虑这个随机对象:

Object Test of Class TestClass:
  String Name;
  Integer Age;
  procedure setName(n);
  function getName(): String;
Run Code Online (Sandbox Code Playgroud)

Delphi中,如果我们想要使用对象的许多属性和方法轻松工作,我们可以这样做:

Test.Name = 'EASI';
Test.Age = 34;
Test.setName('Eduardo Alcantara');
ShowMessage(Test.getName);
Run Code Online (Sandbox Code Playgroud)

......或者我们可以这样做:

with Test do
begin
  Name = 'EASI';
  Age = 32;
  setName('Eduardo Alcântara');
  ShowMessage(getName);
end
Run Code Online (Sandbox Code Playgroud)

在Java中是否有类似的结构,我们可以在Delphi中缩短语法?

java delphi

2
推荐指数
1
解决办法
1006
查看次数

如何正确获取两个日期之间经过的日期和时间?

我正在创建这个函数:

\n\n
function LiteralTimePassed(FromDate: TDateTime; ToDate: TDateTime = 0): string;\nconst\n  Coma = \', \';\nvar\n  Dt, Mt: Integer; { se dos dias contarem mais que 30/31 ent\xc3\xa3o aumenta o m\xc3\xaas }\n  P: TDateTime;\n  HC: Boolean; { indica se j\xc3\xa1 h\xc3\xa1 um token antes do novo token, para colocar v\xc3\xadrgula }\n  Token: string; { a parte do timestamp verificada no loop }\n  Literal: string;\n  Y, M, D, H, N, S: Integer; { ano, m\xc3\xaas, dia, hora, minuto(n), segundo }\n  Ys, Ms, Ds, …
Run Code Online (Sandbox Code Playgroud)

delphi datetime delphi-xe6

2
推荐指数
1
解决办法
2620
查看次数

FireMonkey TListView:如何在运行时为项目着色?

可以对VCL TListView使用自定义工程图,该工程图允许您为单个项目着色(这是一个使用笨拙的方法TColorData项目中放入的示例。)

但是,在XE7 FMX版本的TListVew控件中,没有OnCustomDraw事件。我尝试了一些选项,但似乎没有任何改变。我该怎么做呢?

delphi android listview firemonkey

2
推荐指数
1
解决办法
6498
查看次数