小编lin*_*luk的帖子

delphi - 局部变量和TPair <Int,Int>数组 - 内存分配的奇怪行为

我有以下代码示例在delphi xe5 update 2中编译.

procedure TForm1.FormCreate(Sender: TObject);
var i,t:Integer;
    buf: array [0..20] of TPair<Integer,Integer>;
begin
  t := 0;
  for i := Low(buf) to High(buf) do begin
    ShowMessage(
      Format(
        'Pointer to i = %p;'#$d#$a+
        'Pointer to buf[%d].Key = %p;'#$d#$a+
        'Pointer to buf[%d].Value = %p;'#$d#$a+
        'Pointer to t = %p',
        [@i, i, @(buf[i].Key), i, @(buf[i].Value), @t]
      )
    );
    buf[i].Key := 0;
    buf[i].Value := 0;
    t := t + 1;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

如果我运行它它会向我显示变量的地址.变量it在内存范围内有地址buf!
i达到3时,赋值buf[i].Value …

delphi local-variables delphi-xe5

10
推荐指数
2
解决办法
1714
查看次数

为什么我的类实现子接口,而不是父母?

在Delphi中使用接口继承时,我发现了(至少对我而言)意外行为.

我有这个简单的类和接口层次结构:

+---------------+
| << IMyBase >> |
+---------------+
        ^
        |
+---------------+
| << IMyIntf >> |
+---------------+
        ^
        |
   +---------+
   | TMyObj  |
   +---------+
Run Code Online (Sandbox Code Playgroud)

我想声明一个类型的变量IMyBase.创建一个TMyObj并将其分配给我的变量.IHMO这是正常的OOP练习.但事实证明它没有编译.

我也尝试声明一个类型的变量IMyIntf并检查它是否支持IMyBase,恕我直言它应该支持它,但事实并非如此.

这是一个简单的测试代码:

program interface_inheritance;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  IMyBase = interface
    ['{CC7C61B8-3FBA-481F-AF0D-A93C603B5202}']
    procedure Hello;
  end;

  IMyIntf = interface(IMyBase)
    ['{01CE01D9-A753-431C-A30E-64BAEC6C4E26}']
    //
  end;

  TMyObj = class(TInterfacedObject, IMyIntf)
    procedure Hello;
  end;

{ TMyObj }

procedure TMyObj.Hello;
begin
  Writeln('Hello World');
end;

var
  b: IMyBase;
  i: IMyIntf;
begin …
Run Code Online (Sandbox Code Playgroud)

delphi inheritance interface

10
推荐指数
1
解决办法
224
查看次数

使用元类时出现Pylint错误

我尝试修复项目中的所有pylint错误和pylint警告.但是当我设置元类时,我一直都会收到错误(https://www.python.org/dev/peps/pep-3115/).

这是我的示例代码:

#!/usr/bin/env python3

class MyMeta(type):
    pass

class MyObject(object, metaclass=MyMeta): # pylint error here
    pass
Run Code Online (Sandbox Code Playgroud)

错误只是说"语法无效".我通过vim插件合成使用pylint(https://github.com/scrooloose/syntastic).

我的pylint版本是(pylint --version):

pylint 1.4.3, 
astroid 1.3.6, common 0.63.2
Python 3.4.2 (default, Oct  8 2014, 10:45:20) 
[GCC 4.9.1]
Run Code Online (Sandbox Code Playgroud)

我的syntastic插件是与github最新的.

有任何想法吗?

python vim pylint python-3.x syntastic

8
推荐指数
1
解决办法
766
查看次数

从python中的网络驱动器号获取完整的计算机名称

我使用python来填充一个表,其中包含许多存储文件的文件路径.但是,该路径需要具有完整的网络驱动器计算机名称,而不仅仅是驱动器号,即

//计算机名/文件夹/子文件夹/文件

病人:/文件夹/子文件夹/文件

我已经使用win32api,win32file和os.path模块进行了调查,但没有任何东西看起来像它能够做到这一点.我需要类似win32api.GetComputerName()的功能,但能够将已知的驱动器号作为参数放入,并返回映射到该字母的计算机名称.

那么在python中是否有查找驱动器号并取回计算机名称?

python windows network-drive computer-name

7
推荐指数
3
解决办法
2002
查看次数

作为函数的结果的"函数引用"

我有一个返回函数的功能TFunc<Integer>reference to function:Integer.我有一个过程,它接受一个函数TFunc<Integer>作为参数,调用它并打印其结果.

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

function GetFunction:TFunc<Integer>;
begin
  result := function:Integer begin result := 42 end;
end;

procedure FunctionCall(AFunc:TFunc<Integer>);
var i:Integer;
begin
  i := AFunc;
  WriteLn(Format('Function Result = %d',[i]));
end;

begin
//  FunctionCall(GetFunction);    // error
  FunctionCall(GetFunction());  // works as excpected
end.
Run Code Online (Sandbox Code Playgroud)

这个call(FunctionCall(GetFunction);)会导致错误.和()作品一样被打电话.

我的问题是:
在delphi中我需要使用brakets来调用函数,何时不需要(我认为我从不需要它们)
或者
我不需要它们而且它是否是一个bug?

我在windows 7 dcc32上使用delphi xe5.

delphi function-pointers delphi-xe5

6
推荐指数
1
解决办法
539
查看次数

如何为我自己的组件创建Vcl-Theme-Style?

我使用BitmapStyleDesigner.exe(随delphi xe5一起提供)编辑vcl样式到我的应用程序.

如何将自定义组件添加到样式器调色板?我希望我的TMyButton,继承TButton,具有不同于标准的颜色,形状等TButton.

这可以只通过编辑样式来完成,还是我必须编辑源代码TMyButton

Embarcadero的维基并没有帮助(到目前为止).

提前致谢!

delphi vcl-styles delphi-xe5

6
推荐指数
1
解决办法
1005
查看次数

Canvas.TransparentColor和Canvas.Draw与不透明度的组合

我想在不透明的画布上绘制位图,其中位图具有透明色.

  • 我可以创建一个透明色的位图,并将其绘制成一个
  • canvas我可以创建一个位图并将其绘制到具有不透明度的画布上

但我无法结合它.如果我合并它,则忽略不透明度.

这是我写的代码:

procedure TForm1.FormPaint(Sender: TObject);
var b1,b2:TBitmap;
begin
  // Example how it opacity works:
  b1 := TBitmap.Create;
  b1.SetSize(20,20);
  b1.Canvas.Brush.Color := clBlue;
  b1.Canvas.Rectangle(0,0,20,20);
  Canvas.Draw(10,10,b1,$ff);  // Works
  Canvas.Draw(40,10,b1,$66);  // Works

  // I need it in combination with TransparentColor:
  b2 := TBitmap.Create;
  // next 3 lines are different from above
  b2.Transparent := true;
  b2.TransparentColor := clFuchsia;
  b2.Canvas.Brush.Color := clFuchsia;
  b2.SetSize(20,20);
  b2.Canvas.Brush.Color := clBlue;
  b2.Canvas.Ellipse(0,0,20,20);
  Canvas.Draw(10,40,b2,$ff);  // Works (full opacity)
  Canvas.Draw(40,40,b2,$66);  // Ignores the $66 Opacity

  b1.Free;
  b2.Free;
end;
Run Code Online (Sandbox Code Playgroud)

生产:
在此输入图像描述

我怎么能用透明背景绘制(一个蓝色的圆圈),只有40%的不透明度? …

delphi canvas bitmap alpha-transparency delphi-xe5

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

如何在TIdTcpClient和TIdTcpServer之间建立一个简单的连接,以便从客户端向服务器发送字符串?

我使用Delphi xe6来阻止简单的客户端/服务器连接.客户端表单应具有TEdit组件,并应将Edit.text字符串发送到服务器备忘录.我想使用Indy组件:TIdTcpServer和TIdTcpClient但我不知道如何在客户端和服务器之间建立简单的连接.

我很感激你的帮助.

windows delphi indy

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

我用C语言编写的库的最佳实践

这很尴尬,但直到现在我总是将*.h和*.c文件复制到我的projekts位置.这是一团糟,我想改变它!

我想建立自己的c库,并有一些问题.

我应该在哪里找到*.h文件?
我应该将它们复制到全局/ usr/include /文件夹中,还是应该在$ HOME(或其他任何地方)创建自己的文件夹?
我应该在哪里找到*.a文件和*.o文件以及*.c文件的位置.

我正在使用debian和gcc.我的c项目在$ HOME/dev/c /中.

我会将我的lib-sources保存在$ HOME/dev/c/lib中(如果这是你推荐的方式)并将*.o,*.a和*.h文件复制到我要求的位置.

你如何将lib-location引入编译器?我应该将它添加到$ PATH,还是应该在我的projekt的makefile中引入它(如-L PATH/TO/LIBRARY -l LIBRARY).

你有建立自己的图书馆的进一步提示和技巧吗?

c linux gcc libraries

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