小编use*_*073的帖子

Delphi - 如何在该表单上关闭来自WITHIN的表单?

在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

forms delphi tframe

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

Delphi - 使用可选的VAR参数调用过程?

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 var procedures

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

如何从用户的自然语言查询中选择FAQ条目?

我正在开发一个用户提交一系列问题的应用程序.这些问题是自由形式的文本,但基于特定的产品,因此我对上下文有一般性的了解.我有一个常见问题解答列表,我需要尝试将用户的问题与常见问题解答中的问题相匹配.

我的语言是Delphi.我的一般思维方法是抛弃小的"垃圾词",a,an,the,is,of,by等...对这些单词运行一个词干程序来获取根词,然后尝试匹配尽可能多的其余的话尽可能.

有更好的方法吗?我曾考虑过某种类型的自然语言处理,但我担心的是我会关注多年的发展,而不是一两周.

delphi text nlp matching

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

delphi应用程序有权限问题.为什么?

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)

delphi permissions inno-setup

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

当我在基类上调用方法时,如何调用后代的实现?

我的顶级课程是TBaseDB,有一个后代TCommonDB(,并且TCommonDB将有多个后代,像TProdDBTDevDB).

让我们在每个类定义中创建一个函数,称为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定义:

  1. 我可以声明我的变量为TBaseDB,
  2. 创建的类可以是TBaseDBTCommonDB,和
  3. 适当的 Test程序将取决于实例是一个被称为TBaseDB还是TCommonDB

delphi inheritance

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

APEX - 如何在菜单中获取行分隔符

我的 Apex 5 应用程序中有一个导航栏菜单。例如“信息 A”、“信息 B”、“注销”。对于“Info B”,它是一个下拉菜单,分为 2 个类别。例如,

Set 1
-----------------
Set 2A
Set 2B
Set 2C
Set 2D
Run Code Online (Sandbox Code Playgroud)

如何在两组之间绘制一条水平线(理想情况下)不可选择?这些是静态菜单条目,它们不会改变。

menu oracle-apex oracle-apex-5

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

Delphi - 将记录作为窗口消息发送

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 message record

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

Delphi 11 中的 Variant 行为是否发生了变化?

在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)

这个编译,乍一看,似乎运行良好。这是清除/处置亚历山大变体的正确方法吗?

delphi variant

3
推荐指数
2
解决办法
513
查看次数

Delphi - 如何从 TDataSet 中释放内存?

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 memory-leaks tdataset

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

Delphi - 为什么使用 VarArrayPut?

我正在使用 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。为什么我要使用它而不是像上面的代码那样直接将数据放回数组中?

arrays delphi variant

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