我正在自动化excel,使用宏系统作为我应该通过自动化做什么的指南.当我将列格式化为日期时,宏NumberFormat为列生成a :
[$-409]m/d/yy h:mm AM/PM;@
Run Code Online (Sandbox Code Playgroud)
我试图破译这意味着什么.我从谷歌搜索,方括号中的值是一个"条件",如果条件:
$-409
Run Code Online (Sandbox Code Playgroud)
满足,然后它将使用 NumberFormat
m/d/yy h:mm AM/PM
Run Code Online (Sandbox Code Playgroud)
如果没有,它使用 NumberFormat
@
Run Code Online (Sandbox Code Playgroud)
我发现的参考文献说数字格式"@"是文本占位符
所以我的问题是:
什么是有条件的$ -409测试?是比较-409(即负四百九十)的东西,如果是这样,那么它与之比较的美元符号是什么?
如果条件失败,并且它转向文本占位符 "at-sign",它显示为什么?
我使用以下命令创建一个COM对象(来自本机代码)CoCreateInstance:
const
CLASS_GP2010: TGUID = "{DC55D96D-2D44-4697-9165-25D790DD8593}";
hr = CoCreateInstance(CLASS_GP2010, nil, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IUnknown, out unk);
Run Code Online (Sandbox Code Playgroud)
实际上,我在Delphi中,这意味着我调用了辅助函数:
CreateComObject(CLASS_GP2010);
Run Code Online (Sandbox Code Playgroud)
大部分时间这个功能都成功了.但有时,在同一个可执行文件中,在同一进程中,调用CoCreateInstance失败的原因是:
Unspecified error (0x80004005 = E_FAIL)
Run Code Online (Sandbox Code Playgroud)
再次调用该函数可能会成功,或者可能会失败.没有(明显的)押韵或理由.
如果这是一个正常的 COM DLL,我写,我就开始把OutputDebugString在DLL_ATTACH,当有人试图打电话DllGetClassObject,我会确认COM是正确加载我的DLL,并且它被正确要求被实例化的类.
不幸的是,它不是COM dll; 它是一个.NET程序集dll.COM子系统并不是简单地 "加载"我的dll.相反,COM被指示加载mscoree.dll:
HKEY_CLASSES_ROOT
CLSID
{DC55D96D-2D44-4697-9165-25D790DD8593}
InprocServer32
@default = mscoree.dll
Run Code Online (Sandbox Code Playgroud)
并mscoree.dll导出所需的GetClassObject功能.那mscoree.dll个人回来了E_FAIL,不是我.故障永远不会发生在我的开发机器上,但始终在客户机器上间歇性地失败.
问题是,因为mscoree.dll返回的是E_FAIL(而不是任何有用的):我如何告诉我问题是什么?
例如,似乎唯一遇到故障的客户(除了是唯一大量使用COM对象的客户)恰好在Windows XP上.也许他们遇到了.NET框架中的已知错误(版本4之前),您无法在同一进程中加载不同版本的.NET运行时 …
我希望了解
当应用于对象构造函数时.每次我随机添加关键字直到编译器关闭 - 并且(在使用Delphi开发12年之后)我宁愿知道我在做什么,而不是随意尝试.
给出一组假设的对象:
TComputer = class(TObject)
public
constructor Create(Cup: Integer); virtual;
end;
TCellPhone = class(TComputer)
public
constructor Create(Cup: Integer; Teapot: string); virtual;
end;
TiPhone = class(TCellPhone)
public
constructor Create(Cup: Integer); override;
constructor Create(Cup: Integer; Teapot: string); override;
end;
Run Code Online (Sandbox Code Playgroud)
我希望它们表现的方式可能从声明中可以明显看出,但是:
TComputer 有简单的构造函数,后代可以覆盖它TCellPhone 有一个替代构造函数,后代可以覆盖它TiPhone 覆盖两个构造函数,调用每个构造函数的继承版本现在该代码无法编译.我想明白为什么它不起作用.我也想了解覆盖构造函数的正确方法.或许你永远不能覆盖构造函数?或者覆盖构造函数是完全可以接受的?也许你永远不应该有多个构造函数,也许完全可以接受多个构造函数.
我想了解原因.修复它会很明显.
编辑:我也期待获得的订单上的推理virtual,override,overload,reintroduce.因为在尝试关键字的所有组合时,组合的数量会爆炸:
如何在不破坏封装的情况下执行依赖注入?
public Car {
public float getSpeed();
}
Run Code Online (Sandbox Code Playgroud)
注意:为清楚起见,省略了其他方法和属性(例如PushBrake(),PushGas(),SetWheelPosition())
这很好用; 你不知道我的对象getSpeed是如何实现的- 它是" 封装的 ".
实际上我的对象实现getSpeed为:
public Car {
private m_speed;
public float getSpeed( return m_speed; );
}
Run Code Online (Sandbox Code Playgroud)
一切都很好.有人建造我的Car物体,捣碎踏板,喇叭,方向盘,汽车响应.
现在让我说我改变了我的汽车的内部实现细节:
public Car {
private Engine m_engine;
private float m_currentGearRatio;
public float getSpeed( return m_engine.getRpm*m_currentGearRatio; );
}
Run Code Online (Sandbox Code Playgroud)
一切都很好.将Car是继二OO正确的原则,隐藏的细节如何采取某些措施.这使得呼叫者可以解决他的问题,而不是试图了解汽车的工作原理.它还让我可以自由地改变我的实现.
但依赖注入会迫使我将我的类暴露给Engine我没有创建或初始化的对象.更糟糕的是,我现在已经暴露了我Car甚至有一个引擎:
public Car {
public constructor(Engine engine);
public float getSpeed();
}
Run Code Online (Sandbox Code Playgroud)
现在,外面的词语意识到我使用的是 …
language-agnostic oop unit-testing encapsulation dependency-injection
在使用存储过程的SQL Server中是否可以在表中返回一些值插入的表中的标识列值?例如,如果我们在表中插入数据,则使用存储过程:
表TBL
因此,如果我运行存储过程插入一些值,如:
Insert into TBL (Name, UserName, Password)
Values ('example', 'example', '$2a$12$00WFrz3dOfLaIgpTYRJ9CeuB6VicjLGhLset8WtFrzvtpRekcP1lq')
Run Code Online (Sandbox Code Playgroud)
如何返回UserID此插入的值.我需要UserID的值用于其他一些操作,任何人都可以解决这个问题吗?
我DateTime在C#中使用a 来显示时间.在构建时间时,每个人都使用什么日期部分?
例如,以下内容无效,因为没有零日或零日:
// 4:37:58 PM
DateTime time = new DateTime(0, 0, 0, 16, 47, 58);
Run Code Online (Sandbox Code Playgroud)
我使用COM的零日期吗?
// 4:37:58 PM
DateTime time = new DateTime(1899, 12, 30, 16, 47, 58);
Run Code Online (Sandbox Code Playgroud)
或者也许是SQL Server的?
//4:37:58 PM
DateTime time = new DateTime(1900, 1, 1, 16, 47, 58);
Run Code Online (Sandbox Code Playgroud)
我意识到这是随意的,因为我会忽略代码中的日期部分,但是能够使用它仍然是很好的:
DateTime duration = time2 - time1;
Run Code Online (Sandbox Code Playgroud)
我想我喜欢MinValue
DateTime time = DateTime.MinValue.Date.Add(new TimeSpan(16, 47, 58));
Run Code Online (Sandbox Code Playgroud)
注意:我不能使用a TimeSpan,因为它不会存储当天的时间.我知道的原因是因为没有办法将其内容显示为时间.
也就是说,TimeSpan记录一段时间,而不是一天中的时间,例如:
TimeSpan t = new …Run Code Online (Sandbox Code Playgroud) 使用GDI +绘制各种颜色:
brush = new SolidBrush(color);
graphics.FillRectangle(brush, x, y, width, height);
Run Code Online (Sandbox Code Playgroud)
您会注意到在玻璃上没有显示不透明的颜色:

我如何在玻璃上画出纯色?
您还会注意到完全不透明的颜色会根据颜色的不同而有所不同:

有人能指出我在桌面合成器上的文档,解释了如何处理不同的颜色?
您还会注意到FillRectangle行为与以下不同FillEllipse:
FillEllipse 不透明的颜色会产生不透明的颜色FillRectangle 不透明的颜色部分(或完全)透明
请解释非感性行为.
Alwayslearning建议我改变合成模式.来自MSDN:
CompositingMode枚举
该CompositingMode枚举指定如何呈现的颜色与背景颜色组合.此枚举由使用
Graphics::GetCompositingMode和"图形:: SetCompositingMode"的方法图形类.Run Code Online (Sandbox Code Playgroud)CompositingModeSourceOver指定在渲染颜色时,它与背景颜色混合.混合由要渲染的颜色的alpha分量确定.
Run Code Online (Sandbox Code Playgroud)CompositingModeSourceCopy指定在渲染颜色时,它会覆盖背景颜色.此模式不能与TextRenderingHintClearTypeGridFit一起使用.
从描述来看CompositingModeSourceCopy,听起来这不是我想要的选择.从它所施加的限制来看,它听起来像我想要的选项.并且通过禁用合成或透明度,它不是我想要的选项,因为它执行SourceCopy而不是SourceBlend:

幸运的是,这不是一个我必须考虑的邪恶,因为它不能解决我的实际问题.构建我的graphics对象后,我尝试更改合成模式:
graphics = new Graphics(hDC);
graphics.SetCompositingMode(CompositingModeSourceCopy); //CompositingModeSourceCopy = 1
Run Code Online (Sandbox Code Playgroud)
结果对输出没有影响:

Google的Annotated Timeline Visualization API 有替代品吗?

注释时间轴中存在一些错误,并且似乎不会解决它们.
它也是基于Flash的图表.Canvas + Javascript实现更具可移植性.
使注释时间轴有价值的品质(与我迄今为止发现的所有其他图表库相对)是:
据我所知,Google的Annotated Timeline是唯一的交互式折线图库.
charts data-visualization google-visualization annotatedtimeline
尝试在Visual Studio 2010中设计表单时:

我如何告诉Visual Studio忽略导致问题的原因并继续?
研究问题显示了两种可能的解决方案
在我的情况下,重新启动Visual Studio会使它从它自己的汇编程序中脱颖而出.
有人以答案的形式说出那些,并得到自由的代表.(因此阻止我发布自己的答案).
为什么不:
SELECT
SomeXmlColumn.nodes('/people/person') AS foo(b)
FROM MyTable
Run Code Online (Sandbox Code Playgroud)
工作?
几乎所有我在SQL Server中看到(或得到)使用XPath查询的答案要求您使用XML将XML文档加入自身CROSS APPLY.
为什么?
SELECT
p.value('(./firstName)[1]', 'VARCHAR(8000)') AS firstName,
p.value('(./lastName)[1]', 'VARCHAR(8000)') AS lastName
FROM table
CROSS APPLY field.nodes('/person') t(p)
Run Code Online (Sandbox Code Playgroud)
例如:
SELECT a.BatchXml.value('(Name)[1]', 'varchar(50)') AS Name,
a.BatchXml.value('(IDInfo/IDType)[1]', 'varchar(50)') AS IDType,
a.BatchXml.value('(IDInfo/IDOtherDescription)[1]', 'varchar(50)') AS IDOtherDescription
FROM BatchReports b
CROSS APPLY b.BatchFileXml.nodes('Customer') A(BatchXml)
WHERE a.BatchXml.exist('IDInfo/IDType[text()=3]')=1
Run Code Online (Sandbox Code Playgroud)
例如:
SELECT b.BatchID,
x.XmlCol.value('(ReportHeader/OrganizationReportReferenceIdentifier)[1]','VARCHAR(100)') AS OrganizationReportReferenceIdentifier,
x.XmlCol.value('(ReportHeader/OrganizationNumber)[1]','VARCHAR(100)') AS OrganizationNumber
FROM Batches b
CROSS APPLY b.RawXml.nodes('/CasinoDisbursementReportXmlFile/CasinoDisbursementReport') x(XmlCol);
Run Code Online (Sandbox Code Playgroud)
SELECT nref.value('first-name[1]', 'nvarchar(32)') FirstName,
nref.value('last-name[1]', 'nvarchar(32)') …Run Code Online (Sandbox Code Playgroud) delphi ×2
.net ×1
aero ×1
aero-glass ×1
c# ×1
ccw ×1
charts ×1
com ×1
constructor ×1
datetime ×1
delphi-5 ×1
dwm ×1
excel ×1
oop ×1
sql ×1
sql-server ×1
time ×1
unit-testing ×1
xpath ×1