在Delphi 2010中,我创建一个表单,然后创建一个TFrame,将TFrame.Parent分配给表单,然后显示表单MODALLY.工作得很好......框架有一个DBNavigator,一个字段DBFields等.当用户点击发布/保存时,我想自动关闭表单.我尝试了一些东西,比如Close,Action = caFree,(DBNav.parent.parent)作为TForm.Free等,似乎什么都没有用.我如何 - 从TFrame中关闭表格?
创建这个东西的代码是......
// Create the Window
ThisWin := TEmptyFrameWin.Create(nil);
// Create the Frame for the Window
ThisFrame := TFrameUsage.Create(Application);
ThisFrame.Parent := ThisWin;
// Load the data
ThisFrame.tUsage.Open;
ThisFrame.tUsage.FindKey([StrToInt(ID)]);
ThisFrame.LoadDateFields;
ThisWin.Caption := 'Change Appointment Information';
// Only show the POST button
ThisFrame.UsageNav.VisibleButtons := [sbPost];
try
ThisWin.ShowModal;
finally
ThisWin.Free;
end;
Run Code Online (Sandbox Code Playgroud)
谢谢,
GS
Delphi 2010 - 我有一个例程,它接受一个字符串并处理它.有3种不同类型的处理,我可能需要任何组合,包括所有3种处理方式.我试图确定如何调用我的例程,但我尝试的一切都会导致问题.我想做的是调用这样的程序......
StringProcess(StartString1, VarProcess1, VarProcess2, VarProcess3);
Run Code Online (Sandbox Code Playgroud)
但它可能很容易就是这个我只想要2个进程
StringProcess(StartString1, '', VarProcess2, VarProcess3);
Run Code Online (Sandbox Code Playgroud)
程序定义类似于
procedure StringProcess(StartString: string; var S1:String; var S2:string; var S3:string);
Run Code Online (Sandbox Code Playgroud)
总而言之...如何定义我的过程以返回1到3个VAR变量?Delphi希望我总是传递3个变量,如果我不需要它,我只需要忽略它.有没有办法传递"不存在"的VAR参数,并根据需要忽略它们?
谢谢
我正在开发一个用户提交一系列问题的应用程序.这些问题是自由形式的文本,但基于特定的产品,因此我对上下文有一般性的了解.我有一个常见问题解答列表,我需要尝试将用户的问题与常见问题解答中的问题相匹配.
我的语言是Delphi.我的一般思维方法是抛弃小的"垃圾词",a,an,the,is,of,by等...对这些单词运行一个词干程序来获取根词,然后尝试匹配尽可能多的其余的话尽可能.
有更好的方法吗?我曾考虑过某种类型的自然语言处理,但我担心的是我会关注多年的发展,而不是一两周.
Delphi 2010
Windows 7 - 64位.
我有一个相当微不足道的应用程序.这是一个数据库应用程序.它启动,找到它的当前目录,查找数据库文件IN THAT DIRECTORY,打开它,并显示一些数据.它在我的开发计算机上工作正常.我把它带到另一台计算机,也是Windows 7,64位,我收到一个错误.(具体来自数据库库 - 组件Ace - 表示列不存在).我不得不相信这是一个通用的访问错误.当我右键单击桌面图标,然后选择RUN AS ADMINISTRATOR时,它运行正常.我没有明确地锁定任何东西.我作为管理员用户在计算机上.管理员已安装该应用.我正在尝试将此应用分发给多个人.我正在使用的安装例程是InnoSetup.遇到什么类型的权限问题?
为了完整起见,我包含了INNO SETUP.iss文件.谢谢GS
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "DocAssist"
#define MyAppVerName "DocAssist 3.2"
#define MyAppPublisher "GS"
#define MyAppExeName "DocAssist.exe"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a …Run Code Online (Sandbox Code Playgroud) 我的顶级课程是TBaseDB,有一个后代TCommonDB(,并且TCommonDB将有多个后代,像TProdDB和TDevDB).
让我们在每个类定义中创建一个函数,称为Test1.现在,它所做的ShowMessage('Some literal')只是向我展示正在执行的代码.
直到运行时我才知道类类型.我希望有共同的代码,但行为不同.
我想要的是这样的:
var
MyObj: TBaseDB;
begin
//pseudo-code...
if RadioButton1.Checked then
MyObj := TBaseDB.Create
else
MyObj := TCommonDB.create;
MyObj.Test1;
end;
Run Code Online (Sandbox Code Playgroud)
我似乎无法让这个工作,我想它是在我的班级定义.应该如何Test1定义:
TBaseDB,TBaseDB或TCommonDB,和Test程序将取决于实例是一个被称为TBaseDB还是TCommonDB?我的 Apex 5 应用程序中有一个导航栏菜单。例如“信息 A”、“信息 B”、“注销”。对于“Info B”,它是一个下拉菜单,分为 2 个类别。例如,
Set 1
-----------------
Set 2A
Set 2B
Set 2C
Set 2D
Run Code Online (Sandbox Code Playgroud)
如何在两组之间绘制一条水平线(理想情况下)不可选择?这些是静态菜单条目,它们不会改变。
Delphi Tokyo - 我想通过Windows Messages在表单之间发送记录结构.具体来说,我有一个"显示运行状态"类型的窗口.当行为发生在我的应用程序的其他地方时,我需要发送一个"更新状态窗口"类型的消息.我找到了一个通过Windows消息传递记录的示例(但只在同一个进程中),但是我遇到了使它工作的问题.具体来说,在接收方,我无法编译Windows消息处理程序代码.我有一个'不兼容类型'错误,但我无法弄清楚如何进行类型转换以使其正常工作.以下是适用的代码段.
在globals.pas单元中,所有单元都可以访问.
// Define my message
const WM_BATCHDISPLAY_MESSAGE = WM_USER + $0001;
...
// Define the record which is basically the message payload
type
TWMUCommand = record
Min: Integer;
Max: Integer;
Avg: Integer;
bOverBudget: Boolean;
Param1: Integer;
Param2: String;
end;
...
// define a global variable
PWMUCommand : ^TWMUCommand;
Run Code Online (Sandbox Code Playgroud)
现在发送消息.这只是一个按钮,以便测试.
procedure TMainForm.BitBtn1Click(Sender: TObject);
var
msg_prm: ^TWMUCommand;
begin
New(msg_prm);
msg_prm.Min := 5;
msg_prm.Max := 10;
msg_prm.Avg := 7;
msg_prm.bOverBudget := True;
msg_prm.Param1 := 0;
msg_prm.Param2 := 'some …Run Code Online (Sandbox Code Playgroud) 在Delphi 10.3中,我编写了一些Excel自动化代码。我使用了变体。当例程完成后,我清除并释放了 AndNil 变体......
VarClear(arrData);
FreeAndNil(arrData);
Run Code Online (Sandbox Code Playgroud)
这编译并运行良好。我刚刚升级到D11,即亚历山大。这段代码现在给出了一个错误。...不兼容的类型:TObject 和 Variant。
我将这部分代码重写为:
VarClear(arrData);
arrData.Free;
Run Code Online (Sandbox Code Playgroud)
这个编译,乍一看,似乎运行良好。这是清除/处置亚历山大变体的正确方法吗?
D2010,Win7 64 位。你好,
我有一个需要处理在另一个例程中打开的 TDataSet 的 buttonClick 事件... GetDBGenericData。
函数 GetDBGenericData 返回一个 TDataSet。该例程基本上采用 tQuery 组件,设置它的 SQL 属性,然后打开它。然后它将 TDataSet 返回给我的 buttonclick。
procedure TForm1.Button2Click(Sender: TObject);
var
DS : TDataSet;
begin
DS := TDataSet.Create(nil);
DS := GetDBGenericData(dbSOURCE, 'LIST_ALL_SCHEMAS', [] );
while Not DS.EOF do
begin
ShowMessage(DS.FieldByName('USERNAME').AsString);
DS.Next;
end;
DS.Close;
DS.Free;
Run Code Online (Sandbox Code Playgroud)
我的问题是——了解 DS。我在这个例程中在这里创建它。我将它“分配”给一个指向组件的 TDataSet。如果我不释放它,就会出现内存泄漏(如 EurekaLog 报告的那样)。如果我释放它,下次我运行这个程序时我会得到一个 AV。(特别是在 GetDBGenericData 例程中)。
我认为正在发生的是 DS 被分配给(而不是复制)到正在返回的 TDataSet,所以实际上,我在这个例程中释放了两个 DS,以及 GetDBGenericData 中的 tQuery,当我做一个免费的.
如何“中断”链接,然后删除仅与我动态创建的内存关联的内存。
谢谢,GS
我正在使用 Delphi Rio 来控制 Excel。我正在读取和写入整列,所以我使用 VarArrayCreate 创建一个变量数组来读取列的数据。我更新数据的特定部分,然后将更新写回 Variant 数组。完成后,我将整个 Variant 数组写回我的专栏。
在循环遍历数组时,我读取了数组的一个元素......并可能写回数组的那个元素......
... read from the array
CellText := arrData[i, 1];
... possibly update data
... write the updated data back to the array
arrData[i,1] := CellPadded;
Run Code Online (Sandbox Code Playgroud)
这没有问题。我的问题与将更新写回数组有关。我遇到了函数 VarArrayPut。为什么我要使用它而不是像上面的代码那样直接将数据放回数组中?
delphi ×9
variant ×2
arrays ×1
forms ×1
inheritance ×1
inno-setup ×1
matching ×1
memory-leaks ×1
menu ×1
message ×1
nlp ×1
oracle-apex ×1
permissions ×1
procedures ×1
record ×1
tdataset ×1
text ×1
tframe ×1
var ×1