标签: delphi-xe6

IDE Insight退出工作

在某些时候,我的IDE Insight功能停止工作.我已经检查了我的系统上的XE5和XE6版本,但都没有工作,所以它必须是环保的.

当我点击菜单项时,没有任何内容弹出.没有给出错误,只是没有IDE插入屏幕.使用快捷方式时会发生相同的结果.

我正在运行Windows 7,Delphi Professional XE5和XE6.

有人知道怎么修这个东西吗?

delphi delphi-xe5 delphi-xe6

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

如何检查应用程序是否在Delphi XE6中的iOS设备或模拟器上运行

基于此链接条件编译(Delphi) CPUARM条件,如果模拟器应为false,设备为true,问题是它对我不起作用.我在用Delphi XE6, iOS Simulator 7.1

这是我的代码

    {$IFDEF CPUARM}
s := 'iOS device';
    {$ELSE}
s := 'iOS Simulator';
    {$ENDIF}
Run Code Online (Sandbox Code Playgroud)

ps iOS模拟器正在VMWare虚拟机中运行.

delphi delphi-xe6

7
推荐指数
2
解决办法
1426
查看次数

如何更改Delphi XE6 IDE的字体大小

如何更改Delphi XE6的IDE本身的字体大小.

IDE的对话框没有使用我的Windows字体首选项,我找不到任何更改IDE使用的字体的选项.

在此输入图像描述

或者,我如何让Delphi XE6尊重用户的字体偏好?

delphi delphi-xe6

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

使用带有docolumnTitles的TValueListEditor的Delphi XE6网格索引超出范围错误DisplayOption设置为False且仅限一行

创建一个表单并放置一个TValueListEditor.将doColumnTitlesdisplay选项设置为False.尝试删除第一行.你会收到一个'Grid Index out of Bounds'错误.这是一头丑陋的猪,所以我在这里问一下,除了块之外是否只是尝试处理它的唯一方法?

背景:

行继承自TCustomGridvia TCustomDrawGrid(第493行VCL.grids.pas)属性getter是私有变量FCurrent.Y,其类型是来自两个值记录的值/字段.我无法找到FCurrent默认值设置的位置(因此整数默认为0).如果TValueListEditor只有一行和/或没有选择行,则不清楚存在什么值.

在任何情况下,我得到一个网格索引超出范围错误 - 可能是从 - 提出TCustomGrid- 但只有当只有一行和/或我尝试在TValueListEditorwith 的第一行删除doColumnTitles := false.删除其他行很好.无论这是否是一个错误,它似乎有些愚蠢和不一致.

TValueList编辑器构造函数是否有继承的原因RowCount := 2;

根据以下内容引发错误TValueListEditor.DeleteRow:

  try
if (Strings.Count = 0) or
   (ARow < 1) or (ARow > RowCount - FixedRows) then
  {$IF DEFINED(CLR)}
  raise EInvalidGridOperation.CreateRes(SIndexOutOfRange);
  {$ELSE}
  raise EInvalidGridOperation.CreateRes(@SIndexOutOfRange);
  {$ENDIF}

Strings.Delete(ARow - FixedRows);
  finally
    FDeleting := False;
  end;
Run Code Online (Sandbox Code Playgroud)

(参见VCL.Valedit.pas,804) …

delphi delphi-xe6

7
推荐指数
0
解决办法
1785
查看次数

DLL中的VCL样式正在影响应用程序中的TMenuItem

我使用的是Delphi XE6和VCL样式.我有主要的应用程序和dll.我的主应用程序启用了运行时主题,我正在使用vcl样式文件.我对我的DLL做了类似的事情.我启用了运行时主题,并在其中添加了VCL.Themes,VCL.Styles以及其中包含VCL样式文件的资源文件.当加载DLL时,我从资源加载VCL样式并将其设置为DLL gui.主应用程序和DLL不是使用运行时包构建的.

现在我有主要的应用程序GUI风格与自己的风格和DLL gui风格也有自己的风格.这似乎工作正常,直到......

当我点击我的主应用程序中的按钮时,该事件打开TPopupMenu,它的样式与DLL GUI相同,而不是主应用程序样式.如果我浏览菜单,我也会得到AV并且程序崩溃.看一下附图.

我究竟做错了什么?我目前看到的唯一解决方法是使我自己定制的TPopupMenu来自其他一些控件.在此输入图像描述


正如我所承诺的,我准备了一个类似于我的应用程序的简单演示程序.它由具有自己样式的主机应用程序和添加到资源的样式的DLL组成.运行它并单击Popup按钮然后尝试从弹出窗口中选择一些内容.它会崩溃并停在一些StdWindowProc或类似的东西.此外,如果您在尝试从该菜单中选择某些内容时转到窗口系统菜单(左上角),您会注意到系统菜单的样式为DLL gui并且也崩溃了.链接到rar文件:dropbox.com/sh/f2jmbsmw18akpyg/AAA6SWdBmVhf6n6K-mvYLLmua?dl=0

在此输入图像描述

谢谢你的帮助.

delphi dll vcl vcl-styles delphi-xe6

7
推荐指数
2
解决办法
1610
查看次数

传递清单的目的是什么?

我有一个现有的类,它有一个现有的方法,允许你传递一个东西列表:

TContoso = class(TSkyrim)
public
   procedure AddObjects(Objects: TList);
end;
Run Code Online (Sandbox Code Playgroud)

所以,在之前的时代,有人可以传递一个TList或一个TObjectList方法:

var
   list: TList;

list := TObjectList.Create(True);
contoso.AddObjects(list);
Run Code Online (Sandbox Code Playgroud)

没关系,就像TObjectList一个TList.我的方法很灵活; 它可能需要.

现在在以后的时代

现在在以后,我更喜欢打字列表:

var
   list: TList<TGrobber>;

list := TObjectList<TGrobber>.Create(True);
contoso.AddObjects(list);
Run Code Online (Sandbox Code Playgroud)

当然,这并不编译,既不的TList<T>,也不TObjectList<T>从下降TList.哪个不是这个问题.我直觉地明白,我实际上并不需要TList,我只需要"可枚举"的东西:

根据我在.NET FCL中的经验,这意味着我只需要声明参数是IEnumerable,因为一切都是可枚举的:

  • IEnumerable<T> 来自 IEnumerable
  • ICollection 来自 IEnumerable
  • ICollection<T> 来自 IEnumerable
  • IList 来自 IEnumerable
  • IList<T> 来自 IEnumerable
  • List 来自 IEnumerable
  • List<T> 来自 IEnumerable

所以我会这样做:

TContoso = class(TSkyrim) …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe6

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

无法理解Delphi XE6保护类型

我创建了两个单元并将第一个类放入其中一个:

  unit UBaseClass;

  interface

  type
    TBaseOuterClass = class
    protected type

      TBaseInnerClass = class
      public
      end;

    protected
      function GetInnerInstance: TBaseOuterClass.TBaseInnerClass; virtual;
    end;

  implementation

  { TBaseOuterClass }

  function TBaseOuterClass.GetInnerInstance: TBaseOuterClass.TBaseInnerClass;
  begin
  // doesn't matter
  end;

  end.
Run Code Online (Sandbox Code Playgroud)

我将派生类放入第二个单元:

unit UDerClass;

interface

uses
  UBaseClass;

type
  TDerOuterClass = class(TBaseOuterClass)
  protected type

    TDerInnerClass = class(TBaseInnerClass)

    end;

  protected
    function GetInnerInstance: TBaseOuterClass.TBaseInnerClass; override;
  end;

implementation

{ TDerOuterClass }

function TDerOuterClass.GetInnerInstance: TBaseOuterClass.TBaseInnerClass;
begin

end;

end.
Run Code Online (Sandbox Code Playgroud)

当我正在尝试编译时,我得到了

[dcc32错误] UDerClass.pas(22):E2362无法访问受保护的符号TBaseOuterClass.TBaseInnerClass

在行函数TDerOuterClass.GetInnerInstance:TBaseOuterClass.TBaseInnerClass;

我无法理解为什么TBaseOuterClass.TBaseInnerClass(作为内部受保护类)无法从TDerOuterClass(为TBaseOuterClass派生)访问.在这种情况下,实际上受保护类型是什么?

我在嵌套类型声明主题中没有找到任何解释.那么这种行为有什么理由吗?

它也与简单的受保护类型相关

protected type    
  TSimpleType = Integer; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe6

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

全局范围程序不能是通用的?这个限制有技术原因吗?

为什么不允许在全局过程中使用泛型类型。例如:

  procedure Foo<T>(bar : T);
Run Code Online (Sandbox Code Playgroud)

编译器错误:E2530 全局过程或函数不允许使用类型参数

但它作为类方法是可以接受的

TFoo = class(TObject)
public
  class procedure Foo<T>(bar : T);
end;
Run Code Online (Sandbox Code Playgroud)

这显然是我的解决方法,但我对限制是否存在实际的技术原因感兴趣。

delphi generics delphi-xe6

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

在 Delphi 中是否可以将枚举合并为一个更大的枚举?

Delphi 可以有枚举类型,例如:

type
   TDay = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);   // Enumeration values
Run Code Online (Sandbox Code Playgroud)

是否可以联合枚举类型:

type
   TWeekDay    = (Mon, Tue, Wed, Thu, Fri);
   TWeekendDay = (Sat, Sun);
   TDay        = (TWeekday, TWeekendDay);    //hypothetical syntax
Run Code Online (Sandbox Code Playgroud)

实际上,我需要在不破坏源代码兼容性的情况下一个大列表分解为它们实际上是不相交的项目:

type
   TWeekDay =    (Mon, Tue, Wed, Thu, Fri);
   TWeekendDay = (Sat, Sun);
   TDay =        (Mon, Tue, Wed, Thu, Fri, Sat, Sun); //identifier redeclared syntax error
Run Code Online (Sandbox Code Playgroud)

然后更改一些变量:

  • Day: TWeekday;TDay;
  • Day: TWeekendDay;TDay

这在道德上相当于严格打字。

delphi enums delphi-xe6

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

线程不一致Delphi xe6

因此,在delphi xe4-6中进行线程处理时,我总是面临严重的问题,无论是来自未执行的线程,还是异常处理导致应用程序崩溃,或者只是on terminate方法永远不会被调用.我已被指示使用的所有变通方法变得非常乏味,在XE6中仍然困扰着我的问题.我的代码通常看起来像这样:

procedure TmLoginForm.LoginClick(Sender: TObject);
var
  l:TLoginThread;
begin
  SyncTimer.Enabled:=true;
  l:=TLoginThread.Create(true);
  l.username:=UsernameEdit.Text;
  l.password:=PasswordEdit.Text;
  l.FreeOnTerminate:=true;
  l.Start;
end;



procedure TLoginThread.Execute;
var
  Success     : Boolean;
  Error       : String;
begin
  inherited;
  Success := True;
  if login(USERNAME,PASSWORD) then
  begin
    // do another network call maybe to get dif data.
  end else
  begin
    Success := False;
    Error   := 'Login Failed. Check User/Pass combo.';
  end; 

  Synchronize(
  procedure
    if success = true then
    begin
      DifferentForm.Show;
    end else
    begin
      ShowMessage('Error: '+SLineBreak+Error);
    end;
    SyncTimer.Enabled := False;
  end);
end;
Run Code Online (Sandbox Code Playgroud)

然后我从Delphi和论坛的样本中看到了这个单元:

unit …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading firemonkey delphi-xe6

6
推荐指数
0
解决办法
1445
查看次数