小编nor*_*aul的帖子

在FireMonkey中更改TMemo的字体和背景颜色

我正在编写一个需要看起来像老式终端会话的备忘录组件.这应该非常简单,但FireMonkey样式的工作方式似乎令人难以置信的复杂.

在非移动FireMonkey应用程序中,我可以右键单击一个控件并选择"编辑自定义样式".此选项在移动应用中不可用.以下是其中一位FireMonkey开发人员给出的原因.

它支持iOS和Android上的不同风格.我们无法在iOS风格的Android上运行应用程序.但是当您尝试更改平台样式时,我们将自动在每个目标平台上使用它.如果要更改fm控件的默认样式,则应该在表单样式书中添加样式,或者加载到样式表平台样式并对其进行更改.

同样非常重要的是,当您在样式簿中加载平台样式时,您可能希望该应用程序实例不具有两个平台样式副本(一个 - fmx包中的系统和样式簿中的其他副本).为此,您应该在TStylebook.UseStyleManager中设置标志true.在这种情况下,样式书中的样式将取代平台样式.

好的,所以我想我需要创建一个自定义样式.如何创建自定义样式以仅覆盖字体和背景属性?

我想我可以覆盖这样的ApplyStyle过程.

procedure TMyMemo.ApplyStyle;
var
  BackgroundObject: TFmxObject;
begin
  inherited;

  BackgroundObject := FindStyleResource('content');

  if Assigned(BackgroundObject) then
  begin
    // Change the background color of the background
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我如何知道背景对象的类型以及需要更改的属性?

当然,改变一个控件的背景颜色不是这么难!我错过了FM风格的基本内容吗?

delphi styles firemonkey-fm3 delphi-xe5

8
推荐指数
2
解决办法
4042
查看次数

使用Generics创建接口对象

我编写了一个接受类类型(T)和接口类型(I)的函数,并将一个接口(I)返回给对象(T).这是代码.

interface

function CreateObjectInterface<T: Class, constructor; I: IInterface>(
  out AObject: TObject): I;
Run Code Online (Sandbox Code Playgroud)

...

implementation

function TORM.CreateObjectInterface<T, I>(out AObject: TObject): I;
begin
  AObject := T.Create;

  if not Supports(AObject, GetTypeData(TypeInfo(I))^.Guid, Result) then
  begin
    AObject.Free;
    AObject := nil;

    raise EORMUnsupportedInterface.CreateFmt(
      'Object class "%s" does not support interface "%s"',
      [AObject.ClassName, GUIDToString(GetTypeData(TypeInfo(I))^.GUID)]
    );
  end;
end;
Run Code Online (Sandbox Code Playgroud)

该功能按预期工作,没有内存泄漏或其他不受欢迎的问题.

还有其他方法可以达到相同的效果吗?

delphi generics interface delphi-xe7

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

使用Firebird和Delphi进行全文搜索

我正在考虑在我们的Firebird数据库上实现全文搜索.我们的要求是:

  1. 应该为几个表中的每个字段编制索引.找到结果后,我们应该能够找到原始表.
  2. 索引可以存储在数据库或文件系统中.
  3. 必须使用搜索结果(BigInt主键)与数据库中的原始记录连接,以显示表中的记录.

任何人都可以推荐一种体面的方式来实现我们的需求吗?我已经看过以某种方式将DotLucence集成到Delphi中,但是无法真正找到有关如何实现它的信息.

delphi firebird full-text-search sphinx

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

安装ASP.NET应用程序的先决条件是什么?

我们有一个ASP.NET 2.0应用程序,可以作为试用版下载.因此,我们无法控制将要安装的环境.尽管我们努力生产可靠的安装程序,但仍然有很多用户报告问题.

我们使用Web部署项目生成编译的.net文件.然后,我们获取输出并通过VS 2010部署项目运行它以生成msi安装程序.

以下是我们遇到的几个问题:

  • 似乎msi安装程序与IIS7不兼容.为了正确安装,需要安装IIS6兼容性,否则它会失败并且没有错误.
  • 即使"RemovePreviousVersions"设置为true,安装程序也几乎从不卸载该版本,只是抛出一个错误,说明该应用程序已经安装.

我们之前尝试过使用InnoSetup安装程序.它在某种程度上起作用,但是我们遇到了安装的应用程序连接到错误的应用程序池的问题,并且从未找到通过InnoSetup脚本定义应用程序池的方法.

有人可以给我一个明确的列表,列出在Windows XP或更高版本的配置未知的计算机上运行和运行ASP.NET应用程序所需的内容吗?例如,检查.NET 2.0是否已安装,检查是否安装了II6,将文件复制到x,创建虚拟目录等.

更好的是,是否有人知道安装程序(或InnoSetup扩展程序)可以为您完成大部分设置?

.net asp.net iis installation inno-setup

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

如何在透明表单上创建具有清晰背景的位图?

我正在尝试创建一个完全透明的表单,我在其上绘制具有Alpha透明度的位图.问题是我无法弄清楚如何将位图的背景设置为Alpha 0(完全透视).

这是表单现在的样子(注意右上角不透明).

在此输入图像描述

这就是我想要的样子(右上角完全透明):

在此输入图像描述

这是我的来源:

unit frmMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ActiveX,

  GDIPObj, GDIPAPI, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm7 = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
    function CreateTranparentForm: TForm;
  end;

var
  Form7: TForm7;

implementation

{$R *.dfm}

// Thanks to Anders Melander for the transparent form tutorial
// (http://melander.dk/articles/alphasplash2/2/)
function CreateAlphaBlendForm(AOwner: TComponent; Bitmap: TBitmap; Alpha: Byte): TForm;

  procedure PremultiplyBitmap(Bitmap: TBitmap);
  var
    Row, Col: integer;
    p: PRGBQuad;
    PreMult: array[byte, …
Run Code Online (Sandbox Code Playgroud)

delphi graphics delphi-xe2

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

升级到XE7 update 1后,在iOS下使用THTTPGet与OpenSSL进行访问冲突

升级到Delphi XE7更新1后,当使用带有TIdSSLIOHandlerSocketOpenSSL的TIdHTTP连接到服务器时,我看到以下错误.

---------------------------
Debugger Exception Notification
---------------------------
Project Test_iOS raised exception class EAccessViolation with message 'Access violation at address 8FE090C9, accessing address C03F1E32'.
---------------------------
Break   Continue   Help   
---------------------------
Run Code Online (Sandbox Code Playgroud)

异常在IdSSLOpenSSL的第3133行抛出.

经过测试,可在Windows和Android平台上正常运行.

升级之前一切正常.我也同时更新到XCode 6.1,所以这可能是问题的一部分.

还有其他人看到类似的错误吗?有解决方法吗?

delphi ssl indy ios delphi-xe7

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

如何检测应用程序外的拖拽?

我正在尝试模仿Chrome的标签拖动功能.我希望用户能够将选项卡拖动到选项卡条中的新位置,或将其拖放到应用程序外部以创建新窗口.在应用程序中拖动很容易,但是如何检测用户何时丢弃在我的应用程序上的某个位置?

本质上,我希望实现"撕下"标签.

delphi drag-and-drop delphi-xe2

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

如何在不访问源的情况下更改模态表单的标题?

我有一个显示打印预览表单的第三方组件.我想将预览表单的标题更改为更合适的标题.不幸的是,我没有第三方组件的源代码,组件也没有提供功能.

是否有可能以某种方式捕获模态形式,因为它正在显示并在显示之前设置它的属性?

delphi delphi-xe2

6
推荐指数
2
解决办法
2601
查看次数

在Delphi中实现EaseIn,EaseOut函数

我正在尝试在TChromeTabs中实现标签的流畅运动.我可以在这里看到缓动公式,但我不是数学家,也不知道如何将其转换为代码.到目前为止,我的尝试让我无处可去.

是否有可用的Easing功能的Delphi实现?

delphi animation easing-functions delphi-xe2 easing

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

检测TWebBrowser文档中的活动元素何时更改

是否有任何可以挂钩的事件来检测网页上的活动元素何时发生变化?例如,当用户聚焦编辑框时.

我知道我可以检查计时器中的活动元素,但如果可能的话我宁愿避免这种情况.

delphi twebbrowser delphi-xe6

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