小编Ian*_*oyd的帖子

Excel数字格式:什么是"[$ -409]"?

我正在自动化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)

我发现的参考文献说数字格式"@"是文本占位符

所以我的问题是:

  1. 什么是有条件的$ -409测试?是比较-409(即负四百九十)的东西,如果是这样,那么它与之比较的美元符号是什么?

  2. 如果条件失败,并且它转向文本占位符 "at-sign",它显示为什么?

excel number-formatting

35
推荐指数
3
解决办法
6万
查看次数

如何诊断COM可调用包装器对象创建失败?

我使用以下命令创建一个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

如果这是一个正常的 COM DLL,我写,我就开始把OutputDebugStringDLL_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,不是我.故障永远不会发生在我的开发机器上,但始终在客户机器上间歇性地失败.

如何启用.NET日志记录?

问题是,因为mscoree.dll返回的是E_FAIL(而不是任何有用的):我如何告诉我问题是什么?

例如,似乎唯一遇到故障的客户(除了是唯一大量使用COM对象的客户)恰好在Windows XP上.也许他们遇到了.NET框架中的已知错误(版本4之前),您无法在同一进程中加载​​不同版本的.NET运行时 …

.net delphi com ccw com-callable-wrapper

35
推荐指数
1
解决办法
835
查看次数

Delphi:理解构造函数

我希望了解

  • 虚拟
  • 覆盖
  • 超载
  • 重新引入

当应用于对象构造函数时.每次我随机添加关键字直到编译器关闭 - 并且(在使用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.因为在尝试关键字的所有组合时,组合的数量会爆炸:

  • 虚拟; 超载;
  • 虚拟; 覆盖;
  • 覆盖; 超载;
  • 覆盖; 虚拟; …

delphi constructor delphi-5 constructor-chaining

34
推荐指数
2
解决办法
2万
查看次数

如何在不破坏封装的情况下使用依赖注入?

如何在不破坏封装的情况下执行依赖注入?

使用维基百科依赖注入示例:

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

32
推荐指数
2
解决办法
3403
查看次数

Sql Server在insert语句后返回identity列的值

在使用存储过程的SQL Server中是否可以在表中返回一些值插入的表中的标识列值?例如,如果我们在表中插入数据,则使用存储过程:

表TBL

  • UserID整数,标识,自动递增
  • 名称varchar
  • UserName varchar
  • 密码varchar

因此,如果我运行存储过程插入一些值,如:

 Insert into TBL (Name, UserName, Password)
 Values ('example', 'example', '$2a$12$00WFrz3dOfLaIgpTYRJ9CeuB6VicjLGhLset8WtFrzvtpRekcP1lq')
Run Code Online (Sandbox Code Playgroud)

如何返回UserID此插入的值.我需要UserID的值用于其他一些操作,任何人都可以解决这个问题吗?

sql sql-server-2008

32
推荐指数
4
解决办法
15万
查看次数

C#DateTime:当我只使用"时间"时使用什么"日期"?

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)

c# time datetime

31
推荐指数
4
解决办法
2万
查看次数

Aero:如何在玻璃上绘制实心(不透明)颜色?

使用GDI +绘制各种颜色:

brush = new SolidBrush(color);
graphics.FillRectangle(brush, x, y, width, height);
Run Code Online (Sandbox Code Playgroud)

您会注意到在玻璃上没有显示不透明的颜色: 替代文字

我如何在玻璃上画出纯色?


您还会注意到完全不透明的颜色会根据颜色的不同而有所不同:

  • 不透明的黑色:完全透明
  • 不透明的颜色:部分透明
  • 不透明的白色:完全不透明

替代文字

有人能指出我在桌面合成器上的文档,解释了如何处理不同的颜色?


更新3

您还会注意到FillRectangle行为与以下不同FillEllipse:

  • FillEllipse 不透明的颜色会产生不透明的颜色
  • FillRectangle 不透明的颜色部分(或完全)透明

替代文字

请解释非感性行为.

更新4

Alwayslearning建议我改变合成模式.来自MSDN:

CompositingMode枚举

CompositingMode枚举指定如何呈现的颜色与背景颜色组合.此枚举由使用Graphics::GetCompositingMode"图形:: SetCompositingMode"的方法图形类.

CompositingModeSourceOver
Run Code Online (Sandbox Code Playgroud)

指定在渲染颜色时,它与背景颜色混合.混合由要渲染的颜色的alpha分量确定.

CompositingModeSourceCopy
Run Code Online (Sandbox Code Playgroud)

指定在渲染颜色时,它会覆盖背景颜色.此模式不能与TextRenderingHintClearTypeGridFit一起使用.

从描述来看CompositingModeSourceCopy,听起来这不是我想要的选择.从它所施加的限制来看,它听起来像我想要的选项.并且通过禁用合成或透明度,它不是我想要的选项,因为它执行SourceCopy而不是SourceBlend:

替代文字

幸运的是,这不是一个我必须考虑的邪恶,因为它不能解决我的实际问题.构建我的graphics对象后,我尝试更改合成模式:

graphics = new Graphics(hDC);
graphics.SetCompositingMode(CompositingModeSourceCopy); //CompositingModeSourceCopy = 1
Run Code Online (Sandbox Code Playgroud)

结果对输出没有影响:

替代文字

笔记

  • Win32原生
  • 不是.NET(原生)
  • 不是Winforms(原生)
  • GDI +( …

aero dwm aero-glass

31
推荐指数
1
解决办法
3617
查看次数

Google Visualization的注释时间轴的替代方案?(图形库)

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

在此输入图像描述

注释时间轴中存在一些错误,并且似乎不会解决它们.

它也是基于Flash的图表.Canvas + Javascript实现更具可移植性.


使注释时间轴有价值的品质(与我迄今为止发现的所有其他图表库相对)是:

  • 支持多行
  • 缩放; 钻进和退出日期范围
  • 随着时间的推移来回摇摆
  • 支持数千个数据点
  • 能够即时提供新数据

据我所知,Google的Annotated Timeline是唯一的交互式折线图库.

charts data-visualization google-visualization annotatedtimeline

31
推荐指数
2
解决办法
2万
查看次数

Visual Studio 2010:Projectitem不可用

尝试在Visual Studio 2010中设计表单时:

在此输入图像描述

我如何告诉Visual Studio忽略导致问题的原因并继续?


研究问题显示了两种可能的解决方案

在我的情况下,重新启动Visual Studio会使它从它自己的汇编程序中脱颖而出.

有人以答案的形式说出那些,并得到自由的代表.(因此阻止我发布自己的答案).

visual-studio-2010 windows-forms-designer

31
推荐指数
1
解决办法
9752
查看次数

为什么在使用XPath查询时需要CROSS APPLY?

TL;博士

为什么不:

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)

甚至从MSDN联机丛书:

SELECT nref.value('first-name[1]', 'nvarchar(32)') FirstName,
       nref.value('last-name[1]', 'nvarchar(32)') …
Run Code Online (Sandbox Code Playgroud)

sql-server xpath

31
推荐指数
2
解决办法
2万
查看次数