有人可以解释一下Delphi中公共和已发布的班级成员之间有什么区别吗?
我试着看看Delphi的帮助,我理解这些成员具有相同的可见性,但我不太清楚他们的差异如何,我何时应该使用已发布的成员而不是公共成员.
非常感谢.
我正在Delphi中编写一个多线程应用程序,需要使用一些东西来保护共享资源.
在C#中,我使用"lock"关键字:
private someMethod() {
lock(mySharedObj) {
//...do something with mySharedObj
}
}
Run Code Online (Sandbox Code Playgroud)
在Delphi中我找不到类似的东西,我发现只有TThread.Synchronize(someMethod)方法,它通过在主VCL线程中调用someMethod来防止潜在的冲突,但它并不是我想要做的......
编辑:我正在使用Delphi 6
我需要以某种方式确定某个TDateTime值是否在我的时区的夏令时范围内(在C#中与DateTime.IsDaylightSavingTime()方法相同).
我知道在Delphi中没有类似的功能,因为Delphi不TDateTime包含有关时区的信息,但我想有一些方法可以使用Win32 API来实现.
我看过Win32 API GetTimeZoneInformation和GetTimeZoneInformationForYear函数,但我不太明白如何使用它们,所以我想请你帮忙.提前感谢任何提示.
编辑:
例:
在我的时区(中欧)夏令时从今年3月28日凌晨2点开始,到2010年10月31日凌晨3点结束.
我需要一个带标题的函数:
function IsDaylightSavingTime(input: TDateTime): boolean;
Run Code Online (Sandbox Code Playgroud)
将返回true如果输入的日期是2010年3月2:00和2010年10月31日3:00至28日之间false,如果没有.
(这个例子仅适用于2010年,但我需要它可以工作多年.)
再一次,我知道单独保存在TDateTime中的信息是不够的,但我认为通过一些Win32 API函数,我应该能够从Windows设置获得有关当前时区的信息.
我遇到以下代码的问题:
string latString = "50.09445";
float lat = Convert.ToSingle(latString);
Run Code Online (Sandbox Code Playgroud)
第二个命令抛出FormatException异常.我知道问题是我正在使用的文化设置(cs-CZ)使用逗号作为小数点分隔符,而这个字符串包含小数点.
是否有一些简单的方法可以"忽略"文化设置并始终使用小数点进行转换?或者我应该先通过检查字符串并用小数点替换逗号来避免问题?
我有多线程应用程序,当应用程序结束时我遇到了一些问题:我可以通过TThread.Terminate在Form1.OnDestroy事件处理程序中调用方法来正确终止线程,但终止确实需要一些时间,因此我无法释放内存(通过TThread.Free方法).不幸的是,由于某些其他原因,我必须将TThread.FreeOnTerminate属性设置为false,因此线程终止后线程对象不会自动销毁.
我的问题可能有点傻了,我很久以前就已经知道了,但是这样就可以了,线程会被自动销毁(因为应用程序刚刚结束),或者它是一个问题而内存会"丢失" ?非常感谢您的解释.
我在代码隐藏中定义了以下动画:
DoubleAnimation dbAscending = new DoubleAnimation(0, 15, new Duration(TimeSpan.FromMilliseconds(300)));
(myImage.RenderTransform as RotateTransform).BeginAnimation(RotateTransform.AngleProperty, dbAscending);
Run Code Online (Sandbox Code Playgroud)
这工作正常,启动时旋转myImage15度.现在我只需要创建new Storyboard并将动画添加到其中,因为我需要使用它的Completed事件.我有一点问题,我注意到我可以添加动画Storyboard.Children,但我没有设法定义我要将此动画应用于的对象和属性...
在此先感谢您的帮助,直到现在我才在XAML中创建故事板......
我对带有(多)触摸屏的平板电脑的 WPF 应用程序/演示文稿有疑问。演示文稿的一张“幻灯片”由背景上的 Canvas 和一个小的 UserControl 组成。这个 UserControl 在开始时是不可见的,但是每当用户触摸屏幕时,它就会变得可见,并且如果用户移动他的手指,控件就会相应地移动(“跟随”手指,就像光标一样)。然后,当用户停止触摸屏幕时,该控件再次变得不可见。
使用 TouchDown、TouchUp 和 TouchMove 事件处理程序做到这一点并不难,如果用户仅用一根手指触摸屏幕,则效果很好。但是,当用户将一根手指放在位置 X(例如画布坐标 [100,100])并将另一根手指放在位置 Y(例如 [500, 100])时,UserControl 开始在位置 X 和 Y 之间跳转,这看起来不太好...
现在,我希望屏幕一次仅对一次触摸做出反应,我可以在操作系统(Windows 7)中使用“控制面板”->“笔和触摸”->“触摸”,通过取消选中“启用多点触摸手势和墨迹书写”来实现这一点”。
这工作得很好,完全按照我想要的那样,不幸的是它不是很方便,因为有时我需要使用多点触控,而每次我决定使用该应用程序时我无法更改它......
这就是为什么我想询问是否有任何方法可以在我需要的应用程序(或仅在 WPF UserControl 中)中以编程方式禁用多点触控。预先非常感谢您的帮助。