我喜欢Delphi的是所有控件和组件的代码都可用.它全部在所谓的VCL(可视化组件库)中,这在设计自定义控件和组件时非常有用.总而言之,Delphi中的每个控件和组件都是用Delphi编写的,所以将这些代码包含在Delphi中是有意义的,这样我们就可以查看它甚至调试它.
所以我想知道C#是否也是如此?我怀疑像TextBox这样的控件是用C#编写的,所以可以像在Delphi中那样查看代码吗?
在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) 我需要获得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而这并没有给出我需要的结果.
有人可以解释一下,为什么我收到错误
将 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
我需要打印从扫描仪获取的图像。
当扫描适合一张 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 次,图像将变大,新的扫描将添加到底部的图像中。
这就是图像变得超过一页的原因。
现在我需要完整地打印此图像,因此如果需要,可以打印不止一页
程序员朋友们,我从这个优秀的网站上学到了很多,也许还有其他我可以学到的东西.
好吧,我从其他人那里接管了一个delphi 7项目,对它进行了一些小改动,主要是如果那么条款,我根本没有改变主要结构,只是做了一些改动,我甚至没有添加任何变量.问题是,它过去工作得很好,但现在我们有APP崩溃报告.我删除了我添加的内容,实际删除了整个文件夹,再次从usb磁盘重新复制它,按原样编译它,我们有时会再次收到APPCRASH报告.即使我编译原始版本,我们也会收到错误.
我在文件夹中搜索,我发现该文件夹包含一个DSK文件,其中包含有关另一台计算机的文件夹路径(我的意思是DSK文件中定义的路径属于另一台计算机,而不是我的!)
如果我删除这个dsk文件怎么办?如何使用文件夹路径重新创建它?由于这个DSK文件,我们有可能有这些APPCRASHES吗?
这是我在CTD之后拍摄的照片,我试图调试..
我有这个代码:
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的类型?不漂浮
我不能让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) 我最近得到了一台新的开发计算机,同样有 2 个显示器,但不幸的是它有 Windows 10。
现在我还有一些仍在 Delphi 7 中开发的工具,它们可以工作,但有一个恼人的问题。
当我启动 Delphi 7 应用程序时,icon任务栏上的任务栏不会移动到第二个显示器。
任务栏设置为在打开的监视器的任务栏上显示图标。这适用于除 Delphi 7 应用程序之外的所有应用程序。
该图标始终保留在主显示器上。
我有可用的源代码,所以我想知道是否需要将某些内容放入源代码中,或设置一些属性才能使其正常工作?
谷歌搜索后发现很多情况下,表单没有移动到第二个显示器,但我没有在任务栏上找到任何有关该图标的信息。
我已阅读此文档
所以我尝试了这个实验
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 |
编辑
这是我在文档中看到的