小编Gui*_*doG的帖子

.Net Framework控件的源代码在哪里?

我喜欢Delphi的是所有控件和组件的代码都可用.它全部在所谓的VCL(可视化组件库)中,这在设计自定义控件和组件时非常有用.总而言之,Delphi中的每个控件和组件都是用Delphi编写的,所以将这些代码包含在Delphi中是有意义的,这样我们就可以查看它甚至调试它.

所以我想知道C#是否也是如此?我怀疑像TextBox这样的控件是用C#编写的,所以可以像在Delphi中那样查看代码吗?

c# delphi

3
推荐指数
1
解决办法
865
查看次数

找不到.pas文件,但.dcu在那里,这还不够吗?

在Delphi 7中,我在'Libray path'下的'Tools/Environment options/Library'中有以下目录:

C:\ggProgramFiles\QR-synopse-pdf-files
Run Code Online (Sandbox Code Playgroud)

在那里我有一些Pas文件和他们的Dcu文件.其中一个文件是QRPDFSynFilt.pas和QRPDFSynFilt.dcu

现在我的问题是,由于pas文件可用,我总是在调试时插入它们,我觉得很烦人.
所以我创建了一个新目录:

C:\ggProgramFiles\QR-synopse-pdf-files\dcu  
Run Code Online (Sandbox Code Playgroud)

并且只复制那里的dcu文件.
然后我改变了"工具/环境选项/库"中的路径以指向这个新目录.
但现在Delphi 7告诉我他找不到

C:\ggProgramFiles\QR-synopse-pdf-files\dcu\QRPDFSynFilt.pas
Run Code Online (Sandbox Code Playgroud)

这是正确的只有dcu在那里.
但我一直认为,当Delphi找到足够的DCU文件时,如果找到DCU则不需要PAS文件.

所以我的问题是Delphi是否需要PAS文件进行编译,或者DCU是否足够,如果后者是真的,可能导致Delphi给我这个错误?

编辑Deltic回答

我可以使用编译器指令{$ debuginfo OFF},但由于这些单元是第3方,我不想编辑它们.如果没有别的办法,我仍然会这样做.

编辑Davids评论: 编译器错误是

[Fatal Error] File not found 'C:\ggProgramFiles\QR-synopse-pdf-files\dcu\QRPDFSynFilt.pas'
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7

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

计算2个日期之间的包含周数

我需要获得2个日期之间的周数.
对我来说一周是星期一到星期天.
因此,如果第一个日期是在星期六,那么应该包括本周.
如果第二个日期是星期一,那么应该包括本周.

最有效的方法是什么?

例如:

startdate   enddate      nbr of weeks
17/09/2016  26/09/2016   3 weeks
17/09/2016  25/09/2016   2 weeks
19/09/2016  26/09/2016   2 weeks
12/09/2016  25/09/2016   2 weeks
Run Code Online (Sandbox Code Playgroud)

我找到了很多答案,例如这个如何计算2个日期的周数?但他们最终都将天数除以7而这并没有给出我需要的结果.

c#

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

为什么我的日期时间转换超出了 999 毫秒的范围?

有人可以解释一下,为什么我收到错误

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

当我在 SQL Server 2017 上执行以下代码时。我只收到 0.999 毫秒的错误

SELECT CAST('9999-12-31 23:59:59.999' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

结果:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

然后我尝试:

SELECT CAST('9999-12-31 23:59:59.998' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

结果:9999-12-31 23:59:59.997

然后我尝试:

SELECT CAST('9999-12-31 23:59:59.997' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

结果:9999-12-31 23:59:59.997

sql-server datetime sql-server-2017

2
推荐指数
1
解决办法
1558
查看次数

如何打印大于一页的图像

我需要打印从扫描仪获取的图像。
当扫描适合一张 A4 纸时,没有问题,我的代码打印完美。

但是,当扫描不适合,但需要 2 页时,仅打印一页。首先。

到目前为止,这是我的代码

procedure TFormMain.PrintPicture;
var
  MyRect: TRect;
  Scale: Double;
begin
  try
    Printer.BeginDoc;

    Scale := Printer.PageWidth / ImgHolder.Picture.Bitmap.Width;
    MyRect.Left := 0;
    MyRect.Top := 0;
    MyRect.Right := trunc(ImgHolder.Picture.Bitmap.Width * Scale);
    MyRect.Bottom := trunc(ImgHolder.Picture.Bitmap.Height * Scale);
    Printer.Canvas.StretchDraw(MyRect, ImgHolder.Picture.Bitmap);

    Printer.EndDoc;
  except
    on E:Exception do
    begin
      MessageBox(Handle, PChar('Printing failed' + chr(13) + E.Message), PChar(Caption), MB_OK or MB_ICONWARNING);
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

图片MyRect占一页
时高度=13092当图片占2页时高度26185

这对我来说似乎是正确的,但仍然只打印了第一页。所以我一定做错了,有人可以指出我如何打印高于一页高度的图像的正确方向吗

编辑
如果图像较大,我想打印不止一页。
我不想将图像缩小到一页。
我的代码中出现比例的原因是因为我一开始无法正确打印,我在另一个问题中找到了这个代码,为我解决了这个问题。
但现在看来这种做法是错误的。
因此,如果我能在正确设置打印方面获得一些帮助,我将不胜感激。

如果用户扫描 2 或 3 次,图像将变大,新的扫描将添加到底部的图像中。
这就是图像变得超过一页的原因。
现在我需要完整地打印此图像,因此如果需要,可以打印不止一页

printing delphi canvas delphi-10.3-rio

2
推荐指数
1
解决办法
94
查看次数

由于项目的DSK文件来自另一台计算机,Delphi项目有APPCRASH?

程序员朋友们,我从这个优秀的网站上学到了很多,也许还有其他我可以学到的东西.

好吧,我从其他人那里接管了一个delphi 7项目,对它进行了一些小改动,主要是如果那么条款,我根本没有改变主要结构,只是做了一些改动,我甚至没有添加任何变量.问题是,它过去工作得很好,但现在我们有APP崩溃报告.我删除了我添加的内容,实际删除了整个文件夹,再次从usb磁盘重新复制它,按原样编译它,我们有时会再次收到APPCRASH报告.即使我编译原始版本,我们也会收到错误.

我在文件夹中搜索,我发现该文件夹包含一个DSK文件,其中包含有关另一台计算机的文件夹路径(我的意思是DSK文件中定义的路径属于另一台计算机,而不是我的!)

如果我删除这个dsk文件怎么办?如何使用文件夹路径重新创建它?由于这个DSK文件,我们有可能有这些APPCRASHES吗?

这是我在CTD之后拍摄的照片,我试图调试..

在此输入图像描述

delphi crash

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

如何从float复制一个值?浮动,如果浮动,则放零?一片空白?

我有这个代码:

StartPosLongitude = (object)time.StartPosition.Position.Long ?? 0
Run Code Online (Sandbox Code Playgroud)

它没有编译错误:

无法将类型'object'隐式转换为'float'

StartPosLongitude声明如下:float StartPosLongitude;
time.StartPosition.Position.Long由wsdl返回,是float类型?并且有时为空.

错误告诉我我正在尝试将对象转换为浮点数,但这不是我正在做的事情.
在我看来,我试图将浮动投射到一个物体.

那么为什么编译器会告诉我别的什么呢?
什么是正确的方法,我需要将值time.StartPosition.Position.Long放入,StartPosLongitude但如果time.StartPosition.Position.Long为null 则放0 .

编辑 time.StartPosition.Position.Long是float的类型?不漂浮

c# casting type-conversion

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

如何将`sp_executesql`与'like`和'parameter`一起使用?

我不能让sp_executesql使用一个非常简单的语句.

当我这样做

select * from vwChassisHistory t where t.ChassisNumber like '%1234%' 
Run Code Online (Sandbox Code Playgroud)

正如我所料,它会重新调整214行

但是当我这样做的时候

exec sp_executesql 
  N'select * from vwChassisHistory t where t.ChassisNumber like ''%@ChassisNumber%'' ',
  N'@ChassisNumber varchar(4)',@ChassisNumber='1234'
Run Code Online (Sandbox Code Playgroud)

它返回0行

所以我必须在这里犯一个非常愚蠢的错误,但我看不到它.
如何使用sp_executesqla like和a parameter?

我注视在这,但是这个问题是关于动态地构建语句,以便它不会帮我
还这并不有我一个答案

编辑
为了SqlCommand在接受的答案中生成sql,我不得不修改代码

string chassisNumber = "1234";

string sql = "select * from vwChassisHistory t ";
string where += "where t.ChassisNumber like '%@ChassisNumber%' ";
Run Code Online (Sandbox Code Playgroud)

对此

string where = "where t.ChassisNumber like '%' + @ChassisNumber + '%' ";
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server stored-procedures sql-like sql-server-2014

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

任务栏上的图标不会移动到第二个显示器

我最近得到了一台新的开发计算机,同样有 2 个显示器,但不幸的是它有 Windows 10。
现在我还有一些仍在 Delphi 7 中开发的工具,它们可以工作,但有一个恼人的问题。

当我启动 Delphi 7 应用程序时,icon任务栏上的任务栏不会移动到第二个显示器。
任务栏设置为在打开的监视器的任务栏上显示图标。这适用于除 Delphi 7 应用程序之外的所有应用程序。
该图标始终保留在主显示器上。

我有可用的源代码,所以我想知道是否需要将某些内容放入源代码中,或设置一些属性才能使其正常工作?

谷歌搜索后发现很多情况下,表单没有移动到第二个显示器,但我没有在任务栏上找到任何有关该图标的信息。

delphi delphi-7

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

@@DATEFIRST 未返回文档中所述的结果

我已阅读此文档

所以我尝试了这个实验

declare @t table (test date)
insert into @t values ('20220404'), ('20220405'),('20220406'),('20220407'),('20220408'),('20220409'),('20220410')

select datename(weekday, test),
       datepart(weekday, test)
from   @t
Run Code Online (Sandbox Code Playgroud)

它返回这个

第一栏 第2栏
周一 2
周二 3
周三 4
周四 5
星期五 6
周六 7
星期日 1

我检查了我的值或@@DATEFIRST

select @@DATEFIRST
Run Code Online (Sandbox Code Playgroud)

它返回7

那么为什么我没有得到文档中描述的结果呢?

第一栏 第2栏
周一 1
周二 2
周三 3
周四 4
星期五 5
周六 6
星期日 7

编辑

这是我在文档中看到的

在此输入图像描述

t-sql sql-server date sql-server-2019

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