对于delphi–为什么TForm.SetBounds仅在设计时将TForm.Position设置为poDefault时才能正常工作感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于Causedb
对于delphi – 为什么TForm.SetBounds仅在设计时将TForm.Position设置为poDefault时才能正常工作感兴趣的读者,本文将会是一篇不错的选择,并为您提供关于Caused by: java.lang.ClassNotFoundException: kafka.DefaultSource、Caused by: java.lang.ClassNotFoundException: org.springframework.web.filter.FormContentFilter、Codeforces 1082 C. Multi-Subject Competition-有点意思 (Educational Codeforces Round 55 (Rated for Div...、codeforces 981 C.Useful Decomposition的有用信息。
本文目录一览:- delphi – 为什么TForm.SetBounds仅在设计时将TForm.Position设置为poDefault时才能正常工作
- Caused by: java.lang.ClassNotFoundException: kafka.DefaultSource
- Caused by: java.lang.ClassNotFoundException: org.springframework.web.filter.FormContentFilter
- Codeforces 1082 C. Multi-Subject Competition-有点意思 (Educational Codeforces Round 55 (Rated for Div...
- codeforces 981 C.Useful Decomposition
delphi – 为什么TForm.SetBounds仅在设计时将TForm.Position设置为poDefault时才能正常工作
这是奇怪的部分.看似重要的是在设计时将Position属性设置为什么.我可以在运行时将此属性的值更改为podefault,并且对SetBounds的调用仍然无法正常工作.我尝试过类似下面的内容
if Self.Position <> podefault then Self.Position := podefault;
在表单的OnCreate事件处理程序中,以及从重写的构造函数(并在构造函数中将Position设置为podefault,并在OnCreate事件处理程序中调用SetBounds).在所有情况下,在运行时将表单的Position属性更改为podefault并不能解决我在SetBounds中观察到的问题.我发现的唯一一致模式是SetBounds只有在设计时表单的Position属性为podefault才能正常工作.
当表单的Position属性在设计时未设置为podefault时,还有其他一些我注意到SetBounds的工作原理.例如,如果调用SetBounds,则在设计时将Position属性设置为poScreenCenter的表单不一定会显示在屏幕的中心.但是,它不会出现在由SetBounds定义的左上角位置,也不会出现在调用SetBounds时指定的宽度和高度.但是,让我重复一遍,我在调用SetBounds之前将表单的Position属性设置为podefault.我甚至在两个操作之间调用了Application.ProcessMessages,但这并没有解决问题.
我已经在Windows 10上运行Delphi 10.1 Berlin进行了广泛的测试.我还在Windows 7上使用Delphi XE6对其进行了测试.结果相同.
如果您有疑问,请创建一个包含四种表单的VCL应用程序.在第一个表单上放置三个按钮,并为每个按钮添加如下OnClick:
with TForm2.Create(nil) do try ShowModal; finally Release; end;
构造函数创建TForm2,然后TForm3和TForm4.
在表单2到4的OnCreate上,添加以下代码:
if Self.Position <> podefault then Self.Position := podefault; Self.SetBounds(500,500,500);
在form2上,将Position设置为podefault,在form3上将Position设置为poScreenCenter,并在form4上将Position设置为默认值podefaultPosOnly.只有form2将出现在500,宽度为500,高度为500.
有没有人对这个结果有合理的解释?
解决方法
你刚刚创建了Delphi对象 – 但我想知道它是否也创建/显示了Windows对象(HWND句柄和所有相应的Windows内部结构).特别是对于使用主题应用程序,而不是使用标准的XP前外观 – 它们在显示时倾向于ReCreateHWND,因为预加载那些花哨的Windows主题是相对昂贵的操作,只应在需要时完成.
我认为您的默认边界(构造函数中设置的每个属性值可能被视为默认的非调整值,在构造对象后稍后调整)会被正确忽略(或者TApplication – 这对主题没什么影响)做FormXXX.Show.
当你的表单查看其属性时,它会在“让我成为一个窗口并显示它”序列中,并告诉MS Windows“现在我想创建你的内部HWND对象,并根据你的判断将它定位在默认坐标/大小” .
这是绝对正确的行为 – 否则何时和TFOW如何应用Position属性???向Windows询问屏幕上不存在的窗口的坐标是没有意义的,也许永远不会. Windows提供默认的坐标/尺寸,查看它的第二个窗口,查看有多少其他窗口以及它们的位置(AMD / NVidia视频驱动程序也可能对它进行校正).
现在获取默认值并在两小时之后应用它们毫无意义,一切都可能不同 – 不同数量的其他窗口和不同的位置,不同的监视器组和不同的分辨率等.
只考虑一种“台式机替代”类型的笔记本电脑.它被安装在连接到大型固定外部监视器的桌子上.然后 – 让我们想象一下 – 我运行你的应用程序,它创建了tform Delphi对象,并在构造函数中询问了MS Windows的位置 – 而Windows正确地提供了该次要大型监视器的位置.但是一个小时之后我拔掉了笔记本电脑并随便走开了.现在一小时后我告诉你的应用程序显示表单 – 它会做什么?用属于现在分离的外部显示器的坐标显示它?在笔记本内部显示器的视口之外,我目前只有这个显示器?这个表单应该显示在现在的“隐形”位置,因为当我启动应用程序时,那个地方仍然可见吗?我认为,混淆用户无益的方法.
因此,唯一正确的行为是在窗体从隐藏到可见而不是之前的第二个时,请求Windows提供默认坐标.
这意味着如果你想要移动你的表单 – 你应该在它显示后进行.放置Self.SetBounds(500,500);进入OnShow事件处理程序.因此,让MS Windows将您的表单实现为默认位置,就像位置属性中的podefault所需 – 并在此之后移动您的Window.试图移动不存在的窗口看起来对我来说是徒劳的.
预设你的表单(在构造序列中)以明确地忽略MS Windows默认值并使用预设的线(通过podesigned值),或者让表单询问Windows坐标,但是在通过OnShow处理程序可见之后使用SetBounds移动它.
Caused by: java.lang.ClassNotFoundException: kafka.DefaultSource
Started o.s.j.s.ServletContextHandler@49096b06{/static/sql,null,AVAILABLE}
Exception in thread "main" java.lang.ClassNotFoundException: Failed to find data source: kafka. Please find packages at http://spark.apache.org/third-party-projects.html
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:569)
at org.apache.spark.sql.execution.datasources.DataSource.providingClass$lzycompute(DataSource.scala:86)
at org.apache.spark.sql.execution.datasources.DataSource.providingClass(DataSource.scala:86)
at org.apache.spark.sql.execution.datasources.DataSource.sourceSchema(DataSource.scala:197)
at org.apache.spark.sql.execution.datasources.DataSource.sourceInfo$lzycompute(DataSource.scala:87)
at org.apache.spark.sql.execution.datasources.DataSource.sourceInfo(DataSource.scala:87)
at org.apache.spark.sql.execution.streaming.StreamingRelation$.apply(StreamingRelation.scala:30)
at org.apache.spark.sql.streaming.DataStreamReader.load(DataStreamReader.scala:124)
at org.apache.spark.examp.JavaKafkaWordCountDataRow.main(JavaKafkaWordCountDataRow.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit