GVKun编程网logo

如何获取Delphi中的当前过程/函数的名称(作为字符串)(delphi 获取程序路径)

24

此处将为大家介绍关于如何获取Delphi中的当前过程/函数的名称(作为字符串)的详细内容,并且为您解答有关delphi获取程序路径的相关问题,此外,我们还将为您介绍关于C#:如何从XElement获取

此处将为大家介绍关于如何获取Delphi中的当前过程/函数的名称(作为字符串)的详细内容,并且为您解答有关delphi 获取程序路径的相关问题,此外,我们还将为您介绍关于C#:如何从XElement获取名称(带前缀)作为字符串?、Dart 如何将枚举的名称作为字符串获取、database – Delphi:如何获取存储过程的输出参数的值?、delphi – 如何获取DBGrid单元格的屏幕坐标的有用信息。

本文目录一览:

如何获取Delphi中的当前过程/函数的名称(作为字符串)(delphi 获取程序路径)

如何获取Delphi中的当前过程/函数的名称(作为字符串)(delphi 获取程序路径)

在程序/函数内可以获取当前过程/函数的名称作为字符串吗?我想在编译时会扩展一些“宏”。

我的方案是这样的:我有很多程序被给予记录,并且他们都需要从检查记录的有效性开始,所以他们将记录传递到“验证程序”。验证器过程(对于所有过程相同)会引发异常,如果记录无效,并且我希望异常的消息不包括验证器过程的名称,而是调用验证器的函数/过程的名称程序(自然)。

就是我有

procedure ValidateStruct(const Struct: TMyStruct; const Sender: string);
begin
 if <StructIsInvalid> then
    raise Exception.Create(Sender + ': Structure is invalid.');
end;

接着

procedure SomeProc1(const Struct: TMyStruct);
begin
  ValidateStruct(Struct,'SomeProc1');
  ...
end;

...

procedure SomeProcN(const Struct: TMyStruct);
begin
  ValidateStruct(Struct,'SomeProcN');
  ...
end;

如果我可以写一些类似的东西,这样会更容易出错

procedure SomeProc1(const Struct: TMyStruct);
begin
  ValidateStruct(Struct,{$PROCNAME});
  ...
end;

...

procedure SomeProcN(const Struct: TMyStruct);
begin
  ValidateStruct(Struct,{$PROCNAME});
  ...
end;

然后每次编译器遇到一个{$ PROCNAME}时,它只需将“宏”替换为当前函数/过程的名称作为字符串文字。

更新

第一种方法的问题是容易出错。例如,由于复制粘贴,容易发生错误:

procedure SomeProc3(const Struct: TMyStruct);
  begin
    ValidateStruct(Struct,'SomeProc1');
    ...
  end;

或打字错误:

procedure SomeProc3(const Struct: TMyStruct);
begin
  ValidateStruct(Struct,'SoemProc3');
  ...
end;

或只是暂时的混乱:

procedure SomeProc3(const Struct: TMyStruct);
begin
  ValidateStruct(Struct,'SameProc3');
  ...
end;

解决方法

我们正在做类似的事情,只依赖于一个约定:在一开始就放置一个保持函数名的const SMethodName。
然后我们所有的例程都遵循相同的模板,我们在Assert和其他异常提升中使用这个const。
由于const与常规名称的接近,很少有机会错字或任何差异会留在那里很久。
YMMV当然…
procedure SomeProc1(const Struct: TMyStruct);
const
  SMethodName = 'SomeProc1';
begin
  ValidateStruct(Struct,SMethodName);
  ...
end;

...

procedure SomeProcN(const Struct: TMyStruct);
const
  SMethodName = 'SomeProcN';
begin
  ValidateStruct(Struct,SMethodName);
  ...
end;

C#:如何从XElement获取名称(带前缀)作为字符串?

C#:如何从XElement获取名称(带前缀)作为字符串?

这可能是重复的,因为我的问题似乎微不足道,但我在 stackoverflow.com找不到答案.

我有一个XElement,其数据如下:

<abc:MyElement>My value</abc:MyElement>

题:
如何从XElement获取带有前缀的完整名称作为字符串?

预期结果:

abc:MyElement

解决方法

到目前为止,我的解决方案是使用XElement中可用的方法GetPrefixOfNamespace.

虽然不是一个漂亮的解决方案,它给了我我想要的东西:

XElement xml = new XElement(...);
string nameWithPrefix = xml.GetPrefixOfNamespace(xml.Name.Namespace) + 
                        ":" + 
                        xml.Name.LocalName;

更优雅的解决方案非常受欢迎:)

Dart 如何将枚举的名称作为字符串获取

Dart 如何将枚举的名称作为字符串获取

在 Dart 中提供枚举之前,我编写了一些繁琐且难以维护的代码来模拟枚举,现在想要简化它。我需要将枚举的名称作为字符串获取,例如可以用 Java
完成但不能。

例如,当我想要的是“MONDAY”时,小测试代码片段在每种情况下都会返回“day.MONDAY”

enum day {MONDAY,TUESDAY}
print( 'Today is $day.MONDAY');
print( 'Today is $day.MONDAY.toString()');

我是否更正了只需要解析字符串的“星期一”?

database – Delphi:如何获取存储过程的输出参数的值?

database – Delphi:如何获取存储过程的输出参数的值?

我想在Delphi中以编程方式创建一个sqlDataSet,并使用它来执行存储过程并获取输出参数的值.看起来很简单,但我不能让它工作.

这是sql Server中的一个哑存储过程:

CREATE PROCEDURE [dbo].getValue  @x INT OUTPUT
AS
BEGIN
  SET @x = 10;
END

现在,这是我尝试过但不起作用的变体之一:

proc := TsqlDataSet.Create(nil);
proc.sqlConnection := DefaultConnection;
proc.CommandText := 'getValue';
proc.Params.CreateParam(ftInteger,'@x',ptOutput);
proc.Params.ParamByName('@x').Value := 0;
proc.Execsql(False);
value := newIdProc.Params.ParamByName('@x').AsInteger;

我认为这很容易,但是围绕这个问题有一些registred bugs.

解决方法

看起来如果你设置CommandType和SchemaName并且不创建Param它是有效的:
proc := TsqlDataSet.Create(nil);
proc.sqlConnection := DefaultConnection;

proc.CommandType := ctStoredProc;
proc.SchemaName  := 'dbo';
proc.CommandText := 'getValue';

proc.Execsql(False);

value := proc.Params.ParamByName('@x').AsInteger;

delphi – 如何获取DBGrid单元格的屏幕坐标

delphi – 如何获取DBGrid单元格的屏幕坐标

我想在当前行的特定单元格的右下角显示弹出按钮或花哨的消息(带有彩色背景等).

现在我只想知道如何获得网格坐标:
x = DBGrid.DataSource.DataSet.RecNo
y = DBGrid.Columns [index]

还有TCustomGrid.CellRect,它会做我想要的,但它受到保护,我不想继承和创建另一个组件类.

我能想到的一个疯狂的解决方法是将onDrawColumnCell事件中的TRect-s保存到某个数组中.

所以你怎么看 ?

编辑
如何获取当前行中第二个单元格的屏幕坐标?

解决方法

您可以使用一点点欺骗来获取当前的单元格坐标.

总结

以上是小编为你收集整理的delphi – 如何获取DBGrid单元格的屏幕坐标全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

关于如何获取Delphi中的当前过程/函数的名称(作为字符串)delphi 获取程序路径的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于C#:如何从XElement获取名称(带前缀)作为字符串?、Dart 如何将枚举的名称作为字符串获取、database – Delphi:如何获取存储过程的输出参数的值?、delphi – 如何获取DBGrid单元格的屏幕坐标的相关信息,请在本站寻找。

本文标签: