小编Edu*_*ias的帖子

如何创建一个类似对话框的对话框,允许删除其中的其他控件?

它是一个Firemonkey组件,但是我可以看到VCL和FMX的大部分组件基础是相同的,所以如果你知道如何在VCL中分享你的知识,那么它最终可能是我案例的解决方案.

我使用TPopup作为祖先.它对我来说很方便,因为它保留在表单/框架上,我可以使用父进程的相同上下文/结构与LiveBindings连接,这对我来说非常方便.

我需要它的行为恰好是TPopup,作为一个容器.但我需要它看起来更好,并有我的特定按钮(我已经为我的软件内部创建了一些属性和自动化)

问题是我创建了一些内部控件,比如TLayouts,Tpanels和Tbuttons,看起来像这样:(空)

我空的弹出窗口

其中的黑色区域是我想放弃像TEdit和其他人一样的控件.

我已将所有内部创建的控件设置为Store = false,因此它不会存储在流式系统上.当我放弃一个TEdit时这样做,我得到的是这个(Tedit with aligned = top我需要这个):

我用TEdit弹出

但是我期待这个:

我的弹出窗口,TEdit位于正确的位置

如果我更改Store = true,我可以获得正确的效果,但所有内部控件都在Structure面板上公开,每次保存表单并重新打开时,所有内容都会重复.暴露的内部组件对我来说不是问题,但重复的是,如果我关闭并打开组件10次,我会将整个内部结构复制10次.

我将尝试显示一些与组件设计相关的代码:

舱位声明:

  [ComponentPlatformsAttribute(pidWin32 or pidWin64 or pidOSX32 or pidiOSSimulator or pidiOSDevice or pidAndroid)]
  TNaharFMXPopup = class(TPopup, INaharControlAdapter, INaharControl)
  private
  protected
    FpnlMain       : TPanel;
    FlytToolBar    : TLayout;
    FbtnClose      : TButton;
    FbtnSave       : TButton;
    FbtnEdit       : TButton;
    FpnlClientArea : TPanel;
    FlblTitle      : TLabel;
    procedure   Loaded; override;
    procedure   Notification(AComponent: TComponent; Operation: TOperation); override;

constructor Create:

    constructor TNaharFMXPopup.Create(AOwner: TComponent);
    begin
      inherited;

      FpnlMain         := TPanel.Create(Self);
      FlblTitle        := TLabel.Create(Self);
      FlytToolBar …
Run Code Online (Sandbox Code Playgroud)

delphi components firemonkey delphi-xe6

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

从Delphi项目中删除单例实例

我正在努力使我的第一个项目可以进行单元测试.令人惊讶的是,我必须重新编写一些恶意编码风格的大脑.

这篇文章让我注意到单身人士是病态的骗子

我不是试图激进,但我习惯了一件神器,我不知道怎么能摆脱它

例:

initialization
  ModelFactory.RegisterFactoryMethod('standard.contasmovimento',
    function(AParam: Variant) : TModel
    begin
      result := TModelContasMovimento.Create(AParam);
    end);

end.
Run Code Online (Sandbox Code Playgroud)

ModelFactory是一个单例,在其单元上定义,是该单元的uses子句的一部分.

在我的MVP结构中,我在其自己的单元(1个1级单元)中定义了每个模型,视图和演示者.根据每个项目的需要,可以使用所有这些单元.因此,我将其用作零件目录,根据项目我将单元添加到项目中,它会自动注册并准备好从工厂使用.

为了解决单例问题我正在考虑将它们移动到框架类,因此我可以在一个点创建对象,然后可以使用依赖注入来传递框架对象.所有的工厂和其他环境都坐在那里:

TMyFramework = class
  FModelFactory: IModelFactory;
  FViewFactory: IViewFactory;
  FPresenterFactory: IPresenterFactory;

  property ModeFactory: IModelFactory read FModelFactory;
  ...
Run Code Online (Sandbox Code Playgroud)

我的意思是以一种我可以在测试单元中模拟它们的方式移除单身人士.随着单身人士的到位,我无法轻易将其移除以进行测试.

但这将使我放松每个单元的自动初始化,我依靠它来添加单元.我不想手动创建可用类的列表.

有办法解决这种情况吗?

delphi mvp unit-testing

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

如何更改Margins属性的默认值?

使用Delphi XE2向导创建组件,我选择要继承的TPanel,并更改某些属性的默认值以适合我的应用程序.

我的问题是更改边距的默认值:

  TControl = class(TComponent)
    ...
    property Margins: TMargins read FMargins write SetMargins;
Run Code Online (Sandbox Code Playgroud)

Margins是一个TMargin类,使用4个属性声明,我需要重新定义默认值:

  TMargins = class(TPersistent)
  published
    property Left: TMarginSize index 0 read FLeft write SetMargin default 3;
    property Top: TMarginSize index 1 read FTop write SetMargin default 3;
    property Right: TMarginSize index 2 read FRight write SetMargin default 3;
    property Bottom: TMarginSize index 3 read FBottom write SetMargin default 3;
Run Code Online (Sandbox Code Playgroud)

我可以/将在调用组件的构造函数时将代码设置为边距,但是我不知道如何重新定义上面的这些默认值以便显示在属性编辑器上.

delphi components delphi-xe2

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

如何使用ZXing找出二维码方向?

我正在使用VCL 和 Delphi Rio从Spelt/ZXing.Delphi使用 ZXing 移植 Delphi

我正在使用快速富士通扫描仪扫描文档,实际上是收据。这是一个巨大的数量。

问题是,除了纸张的方向之外,ZXing 总是读取上面的二维码(这完全没问题)。

但是,出于存档目的,最好将文档保存在正确的水平位置。

这是我用来获取 qrcode 值的代码:

function TFormMain.DecodificaQRCodeImagemScanneada(ImagemScanneada: TBitmap): String;
var
  scanBitmap: TBitmap;
  ResultadoLeitura: TReadResult;
  ScanManager: TScanManager;
begin
  result := '';
  try
      ScanManager := TScanManager.Create(TBarcodeFormat.Auto, nil);
      scanBitmap := TBitmap.Create;
      scanBitmap.Assign(ImagemScanneada);
      ResultadoLeitura := nil;
      ResultadoLeitura := ScanManager.Scan(scanBitmap);
      if (ResultadoLeitura <> nil) then
      begin
        result :=  ResultadoLeitura.Text;
      end;
  finally
    ResultadoLeitura.Free;
    scanBitmap.Free;
    ScanManager.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法获取二维码的方向,将其用作扫描收据位置的指示器。因此我可以旋转位图并使所有收据以相同的方式定向。

delphi vcl zxing

5
推荐指数
0
解决办法
294
查看次数

在Delphi中创建表单编辑器

我的目标是创建一个简单的表单编辑器,就像我们在Delphi IDE上找到的那样.

现在,用户可以选择并添加组件,使其成为表单持有者的TPanel的父级.为简单起见,请将TPanel视为添加到表单中的可视组件.

我有2个缺少的部分,我想找出想法/代码来帮助完成:

1 - 如何移动创建的可视组件?在IDE中用于移动可视组件的效果相同,例如Tpanel,围绕它的顶部和左侧位置2 - 如何使用焦点在表单编辑器3上绘制组件的钩子 - 如何使用钩子调整大小

我只想要与处理视觉部分相关的部分.我没有生成DFM或类似的东西.

delphi vcl

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

获取有关已安装的网络适配器的信息

我在Windows XP sp3上使用Delphi XE2 Update 4

我希望从已安装的网络适配器(尤其是广播ip)获得最大可能的信息。

为此,我使用了从本文获得的Jan Schulz的代码。

单元:

Unit USock;

Interface

Uses Windows, Winsock;

{ Unit to identify the network interfaces
  This code requires at least Win98/ME/2K, 95 OSR 2 or NT service pack #3
  as WinSock 2 is used (WS2_32.DLL) }


// Constants found in manual on non-officially documented M$ Winsock functions
Const SIO_GET_INTERFACE_LIST = $4004747F;
      IFF_UP                 = $00000001;
      IFF_BROADCAST          = $00000002;
      IFF_LOOPBACK           = $00000004;
      IFF_POINTTOPOINT       = $00000008;
      IFF_MULTICAST          = $00000010;


Type SockAddr_Gen          = Packed …
Run Code Online (Sandbox Code Playgroud)

delphi winsock delphi-xe2

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

如何在 Delphi 上创建正则表达式以删除括号和引号

我以前从未使用过 TPerlRegEx,这是我第一次使用正则表达式。

我正在寻找一个在Delphi Xe2中使用TPerlRegEx的小例子来删除括号和引号,如下所示:

输入字符串:

["some text"]
Run Code Online (Sandbox Code Playgroud)

结果:

some text
Run Code Online (Sandbox Code Playgroud)

单行,没有嵌套的括号或引号。我已经使用 Regexbuddy 创建和测试正则表达式,但它没有给我结果。

regex delphi

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

如何处理在Delphi中以线程方式登录

德尔福XE2

我有一个带有TMemo的表单,我想展示应用程序启动的几个服务中发生了什么.

我运行的是什么:

  • 使用idContext运行的idHTTPServer响应请求
  • 线程从Dropbox下载更新
  • idUDPServer响应UDP请求
  • 另一个线程负责一些数据库的东西.
  • 主应用程序线程还需要添加日志

基本上,我需要知道如何创建一种标准的,统一的,线程安全的方式来将日志消息引导到我的TMemo,并让用户了解正在发生的事情.

delphi thread-safety

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

DWScript是否兼容为Android和IO创建Delphi XE5代码?

我可以在Delphi XE5程序中使用DWScript类在Android和/或IO下运行并使脚本工作吗?

delphi scripting dwscript delphi-xe5

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

是否有任何实现基本IDE结构的Delphi开源项目?

我已经为Android和Windows编写了一个框架,并获得了一些工具来绘制在两个环境中运行的表单和脚本.只是成千上万的另一个解

我现在想要做的是使用Delphi(在我的情况下是Xe2)来编写像Delphi这样的IDE.我可以管理项目中的源文件并拥有表单.我在DevExpress组件上已有很多功能.但我想知道是否有任何我可以重复使用的东西不再发明轮子.

Certanly绘图表格应该是必要的,以便对我的特定情况进行更改,但是它能够使用按钮,文本,我们在大多数平台中找到的那些常用控件来绘制表单.

现在我正在使用Balsamiq Mockup绘制并导出xml到我的编译器以集成到框架上,这很好,因为它是一个很棒的绘图产品,但是需要集成所有IDE属性并且需要放置每个控件上的事件,因为IDE在一个解决方案中更好.

TMS Scripter - >我找到了这个商业软件包,它基本上都是我需要的东西,脚本(我需要VB但有不同的味道,我相信它可以改变),表单设计师,项目管理等......这是非常的确实很好.但是,我想听听开源解决方案

ide delphi

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