问题:为子项目A(具有源文件)构建Sencha CMD工作空间应用程序时"捕获主题时出错",但是子项目B(没有源文件)构建正常.
场景:
sencha app build -c production)我添加了一个主视图并引用了一个公共文件夹(/ project/common/js /)中包含的模块.
sencha app watch工作正常,但sencha app build -c production现在在项目A上失败.
项目A仍然失败并出现此错误:
[INF] Writing content to /MyWorkspace/ProjectA/sass/example/bootstrap.json
[INF] Writing content to /MyWorkspace/ProjectA/sass/example/bootstrap.js
[INF] Capturing theme image
[ERR] loading page /MyWorkspace/ProjectA/sass/example/theme.html
== Unhandled Error ==
TypeError: '''undefined''' is not a function (evaluating '''Ext.require([
'''Ext.layout.Context'''
])''')
file:///MyWorkspace/ext/packages/ext-theme-base/sass/example/render.js:7
[ERR]
[ERR] BUILD FAILED
[ERR] com.sencha.exceptions.ExProcess: phantomjs process exited with code 2
[ERR]
[ERR] Total time: 46 seconds
[ERR] …Run Code Online (Sandbox Code Playgroud) 任何人都可以建议如何以编程方式更改默认的Windows XP代码页(我是从Delphi这样做的)?(这相当于进入控制面板 - >区域设置 - >非Unicode应用程序的语言).
在这种情况下,我想切换到中文(PRC),所以写入以下注册表字符串:HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP = 936 MACCP = 10008 OEMCP = 936
(这正是在控制面板中更改非Unicode代码页下拉的原因).必须有另一个我需要更改的设置 - 我更喜欢使用Win API调用(如果可用)而不是自己写入注册表.
我也试过设置HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\Default = 0804(中华人民共和国)无济于事.
我不想更改"区域设置"本身,因为这也会更改时间/日期设置,分隔符等.
这是因为我正在使用需要渲染中文字符的ANSI应用程序,而我正在编写一个工具来自动切换系统显示字符(同时保留UI的其他方面完整).
谢谢!
邓肯
我打开了一个ExtJs项目,我已经有一段时间不知道了,这让我感到困惑.
我有一个Ext.form.ComboBox,它使用远程JSON存储来列出用户.我使用XTemplate格式化下拉列表中列出的用户:
'<tpl for="."><div class="x-combo-list-item">',
'{firstname} {lastname} ({email})',
'</div></tpl>'
Run Code Online (Sandbox Code Playgroud)
当我展开下拉列表时,我看到我的用户列出正确:
约翰史密斯(jsmith@company.com)
约翰福特(jford@company.com)
但是,当我单击用户时,组合框内容将更改为您期望的valueField属性('firstname').
问题:
而不是显示John,我想要显示组合框:John Smith(jsmith@company.com).
当我有两个John(John Smith和John Ford)并加载表单时,ExtJs逻辑与它在列表中找到的第一个John匹配,并将该字段的值更改为它匹配的第一个John.
例如:John Smith(ID = 1)John Ford(ID = 2)
用户选择John Ford,并且在他们单击组合菜单项后,"John"出现在组合框中,并且user_id = 2被写入数据库.
然而,当我重新加载页面时,名称"John"匹配(从数据库加载)到第一个列表条目,如果操作员没有在下拉对话框中手动更改选择,则选择John Smith并且user_id =现在将1写入数据库(当用户保存表单时).
任何输入都将非常感激.我的直觉告诉我在加载和发布列表单击期间应该有几个钩子,这将允许我操作写入元素的innerHTML元素的内容.
~~~~~~~~~~~~~
注意:我继承了一个自定义类,它允许我提前输入查询,名字,姓氏和电子邮件地址(因为我们可能有数百个用户要搜索).
我继承的ComboBox元素:
CW.form.CustomComboBox = Ext.extend( Ext.form.ComboBox, {
filterKeys:[],
// Note: This overrides the standard doQuery function in Ext 3.3
doQuery: function(q, forceAll){
q = Ext.isEmpty(q) ? '' : q;
var qe = {
query: q,
forceAll: forceAll,
combo: this,
cancel:false
};
if(this.fireEvent('beforequery', qe)===false || qe.cancel){ …Run Code Online (Sandbox Code Playgroud) 新手问题:我有一个表单应用程序.它有一个单独的线程,它进行Web服务调用,然后将调用的结果发布到主窗体.
在我的线程中,在X秒过后(使用TTimer),我调用:
procedure TPollingThread.OnTimer(Sender: TObject);
var
SystemProbeValues : TCWProbeValues;
begin
SystemProbeValues := Remote.Run.GetSystemProbeValues;
PostMessage( ParentHandle, WM_APIEVENT ,Integer(apiMultiCellStatus), Integer(SystemProbeValues) );
end;
Run Code Online (Sandbox Code Playgroud)
Remote.Run.GetSystemProbeValues函数具有以下原型:
function GetSystemProbeValues : TCWProbeValues; stdcall;
Run Code Online (Sandbox Code Playgroud)
TCWProbeValues是一个TCWProbeValue对象的动态数组(都来自TRemotable).
在我的主要表单中,我收到消息就好并将LParam强制转换回TCWProbeValues:
procedure TFrmCWMain.OnAPIEvent(var msg: TMessage);
begin
ProbeValues := TCWProbeValues(msg.LParam);
end;
Run Code Online (Sandbox Code Playgroud)
我的问题是,动态数组及其对象是由Delphi HTTORIO系统创建的,谁负责释放它们?在我的OnTimer函数返回后,Delphi是否认为内存可重用?(在这种情况下,我的主要形式消息处理程序实际上可以读取消息的LParam引用的内存吗?)或者更确切地说,我是否有责任释放HTTPRIO请求自动实例化的对象?
非常感谢,如果以上需要更多细节/代码,请大声说出来,我会加入它!
干杯,邓肯
使用Delphi XE2中的TSQLConnection组件连接到DataSnap服务器.
我的问题是,如果我们在3秒后无法连接,我想中止连接尝试,但是设置驱动程序的ConnectTimeout属性似乎没有任何影响(它在放弃之前仍然等待大约20秒) .
我在一个线程中运行它,所以我可以向线程发布一条消息(线程消息队列是否被服务取决于我认为这个阻塞调用是如何创建的).即使我的线程消息处理程序运行,我也不确定如何中断阻塞调用以设置TSQLConnection.Connected属性(在线程的Execute方法中设置).
我不想调用TerminateThread,因为这似乎有点过分,并且会留下(如果我理解的话)分配给线程堆栈的内存.有关如何中断此连接过程,或访问基础Indy组件并明确设置连接超时的任何想法将不胜感激.
谢谢!
fConnection := TSQLConnection.Create(nil);
with fConnection do
begin
DriverName := 'DataSnap';
Params.Values['CommunicationProtocol'] := 'tcp/ip';
Params.Values['DatasnapContext'] := 'datasnap/';
Params.Values['HostName'] := '127.0.0.1';
Params.Values['Port'] := '211';
Params.Values['ConnectTimeout'] := '3000';
KeepConnection := true;
LoginPrompt := true;
end;
// Where it blocks for up to 20 seconds (if host unavailable)
fConnection.Connected := True;
Run Code Online (Sandbox Code Playgroud) 场景是这样的:
如果我在Screen.Width属性大于1200px 的监视器上运行此应用程序(我在没有任何DPI虚拟化AFAIK的情况下运行),那么TGroupBox渲染就像您期望的那样.
但是..如果显示器的宽度小于1200px,则无论您如何调整窗体大小,屏幕上都会丢失控件的右手部分.
我已经Create()用override;指令覆盖了我的表单方法并验证我width正确设置了属性,但是控件仍然被裁剪.
任何人都可以建议如何:
a)设置表单的width属性,使其影响子组件的定位或...
b)建议在表单呈现后强制重新布局所有子组件的方法?
这是几分钟前我问过的这个问题的扩展/下一步.
我有一个主表单和线程的Delphi应用程序.每隔X秒,线程就会对远程对象发出Web服务请求.然后它回发到主窗体,它处理用新信息更新UI.
我以前在我的线程中使用了TTimer对象,当TTimer回调函数运行时,它在主线程的上下文中运行(但远程Web服务请求确实有效).这反而破坏了单独线程的目的,所以我现在在我的线程的Execute函数中有一个简单的循环和睡眠例程.问题是,从GetIMySOAPService()返回时会抛出异常.
procedure TPollingThread.Execute;
var
SystemStatus : TCWRSystemStatus;
begin
while not Terminated do
begin
sleep(5000);
try
SystemStatus := GetIMySOAPService().GetSystemStatus;
PostMessage( ParentHandle, Integer(apiSystemStatus), Integer(SystemStatus), 0 );
SystemStatus.DataContext := nil;
LParam(SystemStatus) := 0;
except
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议从线程调用此函数时为什么抛出此异常?我敢肯定我会忽略一些基本而简单的东西.
谢谢,邓肯
在Delphi XE2中,当系统区域设置为英语时,我只能使用AssignFile和ReadLn()例程读取和显示unicode字符(来自UTF8编码文件).
失败的地方
如果我将非unicode应用程序的系统区域设置设置为朝鲜语(代码页949,我认为)并重复相同的读取,我的一些UTF8多字节对将被替换为$3F.这仅适用于使用ReadLn而不适用于使用TFile.ReadAllText(aFilename, TEncoding.UTF8)或TFileStream.Read().
测试
1.我创建了一个文本文件,UTF8没有BOM(Notepad ++),其中包含以下字符(第二行显示的十六进制等效值):
???
ed 85 8c ec 8a a4 ed 8a b8
Run Code Online (Sandbox Code Playgroud)
使用TMemo控件编写Delphi XE 2 Windows窗体应用程序:
procedure TForm1.ReadFile(aFilename:string);
var
gFile : TextFile;
gLine : RawByteString;
gWideLine : string;
begin
AssignFile(gFile, aFilename);
try
Reset(gFile);
Memo1.Clear;
while not EOF(gFile) do
begin
ReadLn(gFile, gLine);
gWideLine := UTF8ToWideString(gLine);
Memo1.Lines.Add(gWideLine);
end;
finally
CloseFile(gFile);
end;
end;
Run Code Online (Sandbox Code Playgroud)我gLine在执行UTF8ToWideString对话之前检查了内容,在英语/美国语言环境Windows下,它是:
$ED $85 $8C $EC $8A $A4 $ED …
delphi ×6
codepages ×2
delphi-xe2 ×2
extjs ×2
web-services ×2
combobox ×1
extjs3 ×1
extjs5 ×1
javascript ×1
localization ×1
phantomjs ×1
sencha-cmd ×1
soap ×1
unicode ×1
utf-8 ×1