标签: delphi-xe4

如何设置TPanel透明?

TPanel组件放入设计器时,似乎无法制作transparent?有一个不透明度选项,但只有动画才有效.我希望面板本身完全透明,所以我可以看到下面的图像.(我想使用面板作为控件布局的一种方式放置在它上面)

delphi ios firemonkey delphi-xe4

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

MSBuild在Cpp.Targets中使用新的XE4项目搜索"True.dpr"失败

msbuild在RAD Studio XE4中遇到了一些奇怪的错误,我正在寻求帮助来诊断正在发生的事情.我已经遇到了这个问题已经有几个星期了,但是我自己也没有成功解决这个问题 - 时间问得更广泛了.症状是:

  • 通过在IDE中构建和运行的项目,msbuild Project.cbproj似乎可以正常工作
  • 正常运行msbuild Project.cbproj /t:Clean,并删除中间文件.输出的可视扫描不显示任何异常文件被删除 - 只有.obj文件,链接器状态文件,最终EXE等.
  • 但是在清洁或干净结账后运行msbuild Project.cbproj /t:Build或只是简单失败,并显示以下错误消息:msbuild Project.cbproj

Microsoft(R)Build Engine版本3.5.30729.5420 [Microsoft .NET Framework,版本2.0.50727.5472]版权所有(C)Microsoft Corporation 2007.保留所有权利.

Build build 12/09/2013 10:35:03.节点0上的项目"C:\ projects\Project.cbproj"(默认目标).

_PasDepCheck:已修改:Source\Common\resample.pas _PasCoreCompile:Embarcadero Delphi for Win32编译器版本25.0版权所有(c)1983,2013 Embarcadero Technologies,Inc.C:\ Program Files(x86)\ Embarcadero\RAD Studio\11.0\Bin\CodeGear.Cpp.Targets(191 1,5):错误F1026:找不到文件:'True.dpr'完成构建项目"C:\ projects\Project.cbproj"(默认目标) - 失败.

建立失败.

"C:\ projects\Project.cbproj"(默认目标)(1) - >(_PasCoreCompile目标) - > C:\ Program Files(x86)\ Embarcadero\RAD Studio\11.0\Bin\CodeGear.Cpp.Targets(1 911,5):错误F1026:找不到文件:'True.dpr'

0 Warning(s)
1 Error(s)
Run Code Online (Sandbox Code Playgroud)

有些事情让我觉得这个:

  • 它在顶部列出了两个版本的.Net,在方括号中列出了较旧的版本.它可以加载或使用两个框架的一部分吗?
  • True.dpr不存在,也无法找到手动搜索.cbproj文件True.dprTrue …

msbuild c++builder delphi-xe4 c++builder-xe4

5
推荐指数
2
解决办法
1531
查看次数

如何在Firemonkey FM3中获得屏幕尺寸?

如何使用FiremonkeyFM³获得屏幕尺寸?以下代码:

var
  Size: TPointF;
begin
  Size := FMX.Platform.IFMXScreenService.GetScreenSize;
  ...
end;
Run Code Online (Sandbox Code Playgroud)

导致此编译器错误:

[dcc32 Error] Unit1.pas(46): E2018 Record, object or class type required
Run Code Online (Sandbox Code Playgroud)

我该如何使用IFMXScreenService界面来获取屏幕尺寸?

delphi firemonkey delphi-xe4 firemonkey-fm3

5
推荐指数
2
解决办法
8427
查看次数

紧凑的Access数据库

我试图压缩Microsoft Access数据库,但下面显示的代码不起作用.

procedure TForm1.Disconnect1Click(Sender: TObject);
begin
  ADODataSet1.Active := False;
  ADOTable1.Active := False;
  ADODataSet1.Connection := nil;
  DataSource1.Enabled := False;
  ADOConnection1.Connected := False;
  JetEngine1.Disconnect;
end;

function DatabaseCompact(const sdbName: WideString): boolean;
{ Compact ADO mdb disconnected database. }
var
  iJetEngine: TJetEngine; { Jet Engine }
  iTempDatabase: WideString; { TEMP database }
  iTempConn: WideString; { Connection string }
const
  iProvider = 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=';
begin
  Result := False;
  iTempDatabase := ExtractFileDir(sdbName) + 'TEMP' + ExtractFileName(sdbName);
  iTempConn := iProvider + iTempDatabase;
  if FileExists(iTempDatabase) then
    DeleteFile(iTempDatabase); …
Run Code Online (Sandbox Code Playgroud)

delphi ms-access ado delphi-xe4

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

TAdoQuery.ParseSql在xe4中不起作用

我在Delphi 7中有一个项目,我TAdoQuery.ParseSql();用来加载参数.现在我在XE4中编译它,参数类型有时是错误的.这真的是ftInteger创造了ftSmallint.我该怎么做才能解决这个问题?我的数据库是SQL Server 2008 R2.

表定义:

CREATE TABLE [dbo].[tblTest]( 
   [sysId] [int] IDENTITY(1,1) NOT NULL,  
   [Code] [nvarchar](50) NOT NULL, 
   [Name] [nvarchar](500) NOT NULL, 
CONSTRAINT [PK_tblTest] 
PRIMARY KEY CLUSTERED ( [sysId] ASC )
   WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
          ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) 
   ON [PRIMARY] )
ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

样本数据:

INSERT INTO tblTest ( Code, Name ) VALUES ( 'a1', 'name1' )
Run Code Online (Sandbox Code Playgroud)

德尔福代码:

ADOQuery.SQL.Text := 'SELECT * FROM tblTest …
Run Code Online (Sandbox Code Playgroud)

delphi ado delphi-7 delphi-xe4

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

Delphi - 如何将Generic参数传递给接受const参数数组的函数

我有一个'基类',它包含一个'函数',接受'Array of const'类型的参数,如下所示: -

type
  TBaseClass = class(TObject)
  public
    procedure NotifyAll(const AParams: array of const);
  end;

procedure TBaseClass.NotifyAll(const AParams: array of const);
begin
  // do something
end;
Run Code Online (Sandbox Code Playgroud)

我有另一个'通用类'派生自'基类'(上面定义)

type
  TEventMulticaster<T> = class(TBaseClass)
  public
    procedure Notify(AUser: T); reintroduce;
  end;

procedure TEventMulticaster<T>.Notify(AUser: T);
begin
  inherited NotifyAll([AUser]);   ERROR HERE
end;
Run Code Online (Sandbox Code Playgroud)

每次我编译这段代码时都会出错:

变量类型数组构造函数中的错误参数类型

它指的是什么错?

delphi generics delphi-xe4

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

在Delphi中具有继承性的流畅接口

我有以下流利的接口声明和实现该接口的类:

type
  IDocWriter = interface
    ['{8CB5799A-14B1-4287-92FD-41561B237560}']
    function Open: IDocWriter;
    function Close: IDocWriter;
    function Add(const s: string): IDocWriter;
    function SaveToStream(Stream: TStream): IDocWriter;
  end;

  TDocWriter = class(TInterfacedObject, IDocWriter)
  public
    function Open: IDocWriter;
    function Close: IDocWriter;
    function Add(const s: string): IDocWriter;
    function SaveToStream(Stream: TStream): IDocWriter;
  end;

{ TDocWriter }

function TDocWriter.Open: IDocWriter;
begin
  Result := Self;
  // DoOpen
end;

function TDocWriter.Close: IDocWriter;
begin
  Result := Self;
  // DoClose
end;

function TDocWriter.Add(const s: string): IDocWriter;
begin
  Result := Self;
  // DoAdd
end;

function TDocWriter.SaveToStream(Stream: …
Run Code Online (Sandbox Code Playgroud)

delphi fluent-interface delphi-xe4

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

Delphi .dproj文件中未使用的版本信息键

使用Delphi IDE处理版本信息并非易事。借助DDevExtensions,我设法获得了项目中的基本版本信息,该信息将在所有项目平台/配置中传播。在这种情况下为Win32 / Win64。

似乎VerInfo_Keys标记是负责在最终exe文件中包含正确的版本信息的标记。

<VerInfo_Keys>FileVersion=5.0.0.501;ProductVersion=5.0;CompanyName=;LegalCopyright=Copyright © 2015;FileDescription=Setup</VerInfo_Keys>
Run Code Online (Sandbox Code Playgroud)

但是,在.dproj文件的结尾附近,还有一组版本信息条目,由VersionInfo和覆盖VersionInfoKeys

                <VersionInfo>
                    <VersionInfo Name="IncludeVerInfo">False</VersionInfo>
                    <VersionInfo Name="AutoIncBuild">False</VersionInfo>
                    <VersionInfo Name="MajorVer">1</VersionInfo>
                    <VersionInfo Name="MinorVer">0</VersionInfo>
                    <VersionInfo Name="Release">0</VersionInfo>
                    <VersionInfo Name="Build">0</VersionInfo>
                    <VersionInfo Name="Debug">False</VersionInfo>
                    <VersionInfo Name="PreRelease">False</VersionInfo>
                    <VersionInfo Name="Special">False</VersionInfo>
                    <VersionInfo Name="Private">False</VersionInfo>
                    <VersionInfo Name="DLL">False</VersionInfo>
                    <VersionInfo Name="Locale">1050</VersionInfo>
                    <VersionInfo Name="CodePage">1250</VersionInfo>
                </VersionInfo>
                <VersionInfoKeys>
                    <VersionInfoKeys Name="CompanyName"/>
                    <VersionInfoKeys Name="FileDescription"/>
                    <VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
                    <VersionInfoKeys Name="InternalName"/>
                    <VersionInfoKeys Name="LegalCopyright"/>
                    <VersionInfoKeys Name="LegalTrademarks"/>
                    <VersionInfoKeys Name="OriginalFilename"/>
                    <VersionInfoKeys Name="ProductName"/>
                    <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
                    <VersionInfoKeys Name="Comments"/>
                    <VersionInfoKeys Name="CFBundleName"/>
                    <VersionInfoKeys Name="CFBundleDisplayName"/>
                    <VersionInfoKeys Name="UIDeviceFamily"/>
                    <VersionInfoKeys Name="CFBundleIdentifier"/>
                    <VersionInfoKeys Name="CFBundleVersion"/>
                    <VersionInfoKeys Name="CFBundlePackageType"/>
                    <VersionInfoKeys Name="CFBundleSignature"/> …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe4

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

在TRichEdit中加载长RTF文本不起作用

如果将长RTF-sequenz(例如150 000个字符串)流式传输到TRichEdit控件中(在XE4中),则控件不会显示文本,而是显示原始RTF代码:

{\rtf1\ansi\ansicpg1252\deff0...
Run Code Online (Sandbox Code Playgroud)

怎么了?

procedure TForm1.Button1Click(Sender: TObject);
var
    RtfText: string;
    Stream: TStringStream;
begin
    RtfText := GenerateRtfText();

    Stream := TStringStream.Create(RtfText);
    try
        RichEdit2.PlainText := False;
        RichEdit2.Lines.LoadFromStream(Stream); //<--- ERROR: RichEdit displays raw RTF-Code
                                                //     if RtfText is too long
        if StartsText('{\rtf', RichEdit2.Lines.Text) then
        begin
            ShowMessage('Oh no, not converted!');
            //WORKAROUND: 2nd try seems to work...
            //Stream.Position := 0;
            //RichEdit2.Lines.LoadFromStream(Stream);
        end;
    finally
        Stream.Free;
    end;
end;
Run Code Online (Sandbox Code Playgroud)

例如,具有以下RTF生成功能:

function TForm1.GenerateRtfText: string;
var
    I: Integer;
    Stream: TStringStream;
const
    DOES_WORK_COUNT = 10000;
    DOES_NOT_WORK_COUNT = 15000;
begin
    //Fill …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe4

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

如何在Delphi中检测等宽字体?

如何在Delphi中检测等宽字体?

TFont.Pitch应该是fpFixed我认为,但它对Delphi XE4不起作用:

var
  Font: TFont;
begin
  Font := TFont.Create;
  Font.Name := 'Courier New';
  if Font.Pitch = fpFixed then
    ShowMessage('Monospace Font!');
  ...
Run Code Online (Sandbox Code Playgroud)

Font.Pitch基于GetObjectWinAPI.它应该返回lfPitchAndFamily FIXED_PITCH,但我总是得到DEFAULT_PITCH所有字体(也适用于Arial).

delphi winapi delphi-xe4

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