在我的问题: 如何使用"发件人"参数与"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 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中的解决方案?
我正在尝试使用一种新的边框(圆角)创建一组自定义组件,如 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) 我有一个TScrollBox
内部,TFrame
当我使用我的鼠标滚轮时,它根本不会向上或向下滚动ScrollBox.
我试过用
TScrollBox(Sender).Perform(WM_VSCROLL,1,0);
Run Code Online (Sandbox Code Playgroud)
在FrameMouseWheelDown
但它不会触发.
有任何想法吗?
我正在实现一个对象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
在使用之前始终检查是否已加载.
我来自桌面开发,我习惯在计算机的内存中查看我的应用程序,直到用户终止它为止.但是对于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
?如果我需要得到一个类似的日期,12/30/2013
并在晚上8点添加10天,如果我有一个TDateTime
第一次约会的变量,我怎么能在Delphi中做到这一点?
考虑这个随机对象:
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中缩短语法?
我正在创建这个函数:
\n\nfunction 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 ×9
delphi-2006 ×3
android ×1
datetime ×1
delphi-2009 ×1
delphi-xe6 ×1
file-io ×1
firemonkey ×1
java ×1
listview ×1
oop ×1
php ×1
rtti ×1
scroll ×1
session ×1
unicode ×1
utf-8 ×1