在某些时候,我的IDE Insight功能停止工作.我已经检查了我的系统上的XE5和XE6版本,但都没有工作,所以它必须是环保的.
当我点击菜单项时,没有任何内容弹出.没有给出错误,只是没有IDE插入屏幕.使用快捷方式时会发生相同的结果.
我正在运行Windows 7,Delphi Professional XE5和XE6.
有人知道怎么修这个东西吗?
基于此链接条件编译(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 XE6的IDE本身的字体大小.
IDE的对话框没有使用我的Windows字体首选项,我找不到任何更改IDE使用的字体的选项.

创建一个表单并放置一个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 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

谢谢你的帮助.
我有一个现有的类,它有一个现有的方法,允许你传递一个东西列表:
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> 来自 IEnumerableICollection 来自 IEnumerableICollection<T> 来自 IEnumerableIList 来自 IEnumerableIList<T> 来自 IEnumerableList 来自 IEnumerableList<T> 来自 IEnumerable所以我会这样做:
TContoso = class(TSkyrim) …Run Code Online (Sandbox Code Playgroud) 我创建了两个单元并将第一个类放入其中一个:
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) 为什么不允许在全局过程中使用泛型类型。例如:
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 可以有枚举类型,例如:
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 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 ×10
delphi-xe6 ×10
delphi-xe5 ×1
dll ×1
enums ×1
firemonkey ×1
generics ×1
vcl ×1
vcl-styles ×1