我创建了一个名为TRecord的类来存储数据.我创建了另一个包含TRecord类作为对象列表的类.我使用TRecord在对象列表中添加记录,然后在完成后将其设置为父类TTableStore.FManyrecords.
我可以检索列表,COUNT显示相同数量的记录,但它不会让我检索每个单独的记录.
问题是我无法访问记录程序/方法甚至定义记录的检索.查看最后一行伪代码:
TRecord = class(TObject)
private
FDescription : Variant;
FDirectDeposit : Double;
public
function GetDescription : Variant;
function GetDirectDeposit : Double;
procedure SetDescription(Value: Variant; DoValidation: Boolean = True);
procedure SetDirect(Value: Double; DoValidation: Boolean = True);
end;
TTableStore = class(TObject)
private
FManyRecords : TObjectList ;
FTitle2 : Variant;
FNormalEarn : Double;
public
function GetTitle2 : String;
function GetNormalEarn : Double;
function GetManyRecords: TObjectList;
procedure SetManyRecords(Value: TObjectList; DoValidation: Boolean = True);
procedure SetTitle2(Value: String; DoValidation: Boolean = True);
procedure SetNormalEarn(Value: Double; …Run Code Online (Sandbox Code Playgroud) 我注意到TOpenPictureDialog的奇怪行为.
在创建和执行TOpenPictureDialog时,会创建13个线程,当对话框被销毁时,根据Windows活动监视器,线程仍然存在,除了1个线程消失.
为什么会这样?
我使用的代码如下:
var opd: TOpenPictureDialog;
begin
opd := TOpenPictureDialog.Create(self);
opd.Execute;
if opd.FileName = '' then exit;
opd.Free;
begin;
Run Code Online (Sandbox Code Playgroud)
我在Windows 8.1中使用Delphi XE2
我有一个DLL函数,返回一个指向ANSI文本(PAnsiChar)的指针.我想将它分配给(unicode-)字符串(这是Delphi XE2.).以下编译,但我得到一个警告"W1057隐式字符串从'AnsiChar'转换为'字符串'":
function TProj4.pj_strerrno(_ErrorCode: Integer): string;
var
Err: PAnsiChar;
begin
Err := Fpj_strerrno(_ErrorCode);
Result := Err;
end;
Run Code Online (Sandbox Code Playgroud)
编辑:有问题的文本是英文错误信息,因此这里不太可能有任何转换问题.
我现在很想明确地将Err明确强制转换成这样的字符串......
Result := String(Err);
Run Code Online (Sandbox Code Playgroud)
..摆脱警告.这可能会出错吗?我宁愿使用临时的AnsiString变量吗?
var
s: AnsiString;
[...]
s := Err;
Result := String(s);
Run Code Online (Sandbox Code Playgroud)
如果是,为什么?
或者我应该明确说明,代码首先将PAnsiChar转换为AnsiString,然后将AnsiString转换为String?
Result := String(AnsiString(Err));
Run Code Online (Sandbox Code Playgroud)
当然,我可以使它成为一个功能:
function PAnsicharToString(_a: PAnsiChar): string;
begin
// one of the above conversion codes goes here
end;
Run Code Online (Sandbox Code Playgroud)
所有这些选项都可以编译,但它们会起作用吗 这里最好的做法是什么?
加分:理想情况下,代码应该与Delphi 2007和更新版本一起编译和使用.
我需要应用程序的主要形式执行ClientToParent()和不成功,因为我在一个DLL并且Application变量是nil.我感谢任何人的帮助.
这是一个Delphi XE2应用程序.很简单.只需调用CreateOleObject('Outlook.Application')并将结果分配给Variant.
如果程序以管理员身份运行,则会因"服务器执行失败"而失败,但它运行正常,如果我以登录用户身份运行(没有提升权限),我可以返回版本号.
为什么是这样?以管理员身份运行会阻止它创建对象的内容是什么?
我有一个函数,我从数据库中获取数据,我的测试数据集返回6500行(我从SQLText变量中提取格式化的SQL语句并将其作为测试运行),但是当我运行以下代码时,Eof永远不会触发,我已经看到导入了超过10万行.
ADOQuery := TADOQuery.Create(nil);
ADOQuery.ConnectionString := CONNECT_STRING;
// Build SQL Query
SQLText := Format( 'Select Temp.Serial, Temp.QCSample , Temp.Scrap , Temp.StationID , Temp.Defect , Temp.AddData , Temp2.Serial as Parent_Serial ' +
'from TAB_ELEMENT as Temp ' +
'left join TAB_ELEMENT as Temp2 on Temp.Parent_Id = Temp2.Element_Id ' +
'where Temp.Batch_ID = %d and Temp.StationID = 0 ',[iSearchID]);
ADOQuery.SQL.Clear; // Clear query of garbage values
ADOQuery.SQL.Text := SQLText; // Add query text to query module
ADOQuery.Open;
// Handle Results
iIndexPos := …Run Code Online (Sandbox Code Playgroud) 我做了:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
DataTable.qOrders.Next;
end;
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但问题是当我点击按钮到达最后一条记录时,按钮没有被禁用,就像在a TDBNavigator.
我是如何进行TSpeedButton禁用并自动启用的TDBNavigator?
我无法编译此代码.我可以帮忙吗?谢谢.
procedure ChangeOutsideDateTime(h: HWND; dt: TDateTime);
var
st: TSystemTime;
pst: Pointer;
hDTP: Cardinal;
hProc: THandle;
dwWrote: DWORD;
begin
DateTimeToSystemTime(dt, st);
pst:= VirtualAllocEx(h, nil, SizeOf(st), MEM_COMMIT, 0);
if pst <> nil then begin
if GetWindowThreadProcessId(h, hDTP) > 0 then begin
hProc:= OpenProcess(PROCESS_VM_OPERATION, false, hDTP);
if WriteProcessMemory(hProc, pst, @st, SizeOf(st), dwWrote) > 0 then begin
SendMessage(h, DTM_SETSYSTEMTIME, GDT_VALID, hDTP);
CloseHandle(hProc);
end;
end;
VirtualFreeEx(h, pst, 0, MEM_RELEASE);
end;
end;
Run Code Online (Sandbox Code Playgroud)
它显示"实际和正式var参数的类型必须相同"在使用"WriteProcessMemory"的行.
我越来越
无法访问受保护的符号TParent.Test
用于以下代码:
在Unit1:
TParent = class
protected
function Test: TParent;
end;
implementation
function TParent.Test: TParent;
begin
Result := Self
end;
Run Code Online (Sandbox Code Playgroud)
在第2单元:
uses Unit1;
type
TChild = class(TParent)
end;
implementation
var c: TChild;
begin
c := TChild.Create;
c.Test.Test
end;
Run Code Online (Sandbox Code Playgroud)
TChild不应该可以访问返回值吗?
c.Test;
c.Test
Run Code Online (Sandbox Code Playgroud)
当然是有效的.
delphi ×10
delphi-xe2 ×10
delphi-2007 ×1
delphi-2010 ×1
delphi-7 ×1
destruction ×1
dialog ×1
outlook ×1
pchar ×1
protected ×1
sql-server ×1
unicode ×1
windows ×1