我目前正在将用于随机二进制文件访问的Delphi方法转换为Java.Delphi程序使用:
TSingleArray = Array[0..MAXSIZE] of Single
...
procedure GetLinkValues(const LinkVar: Integer; const TimePeriod: Integer; var Value: PSingleArray);
...
BlockRead(Fout, Value^, Nlinks*SizeOf(Single));
Run Code Online (Sandbox Code Playgroud)
将字节数组读入Single数组.有没有一种相同的方法在Java中执行此操作而不迭代数组?
我正在使用
List<Float> l = new ArrayList<Float>();
…
for (int i = 0 ; i < nLinks ; i++ )
l.add( resultsFile.readFloat());
Run Code Online (Sandbox Code Playgroud)
但我很关心速度.字节序不是问题.
您更喜欢以下哪种款式?
你也有gui设计的好链接吗?
当用户在他/她的计算机上具有受限权限并运行我的 Inno Setup 安装程序时,Windows 会弹出管理员登录提示。
问题是,当管理员输入他/她的用户名和密码并登录时,Inno Setup 认为他或她是登录用户并为该用户安装我的应用程序而不是原始用户。(我正在目录中安装文件{userappdata}
)
有没有办法克服这个限制并为原始受限用户安装?
我有一个复杂的应用程序,在正常编译时按预期工作,但是在使用FastMM 4.97(最新版本)编译时关闭表单会产生访问冲突.当消息调度尝试处理已经被销毁的表单上的按钮的消息时,会发生AV.我还为项目启用了Eurekalog 6.1.0.1(最新版本).在禁用FastMM的FullDebug模式的情况下执行相同的代码时,它不会捕获任何运行时异常.
在某些情况下,FastMM是否可能会改变EXE的行为,从而导致或错误地报告访问冲突?
这是FastMM错误报告:
--------------------------------2011/3/21 13:30:17--------------------------------
FastMM has detected an attempt to call a virtual method on a freed object. An access violation will now be raised in order to abort the current operation.
Freed object class: TftGenericButton80
Virtual method: Offset +80
Virtual method address: 4A1FF0
The allocation number was: 5628628
The object was allocated by thread 0xE80, and the stack trace (return addresses) at the time was:
403110 [System][@GetMem]
404F03 [System][TObject.NewInstance]
42E85D [FastMM4][CreateComponent]
42EAD9 [FastMM4][TReader.ReadComponent]
42FEE1 [Classes][TReader.ReadValue]
42ED86 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将已安装的 Windows服务设置为C#中的自动延迟启动.如何设置Windows服务
Automatic (Delayed Start)
Run Code Online (Sandbox Code Playgroud)
无法在ServiceStartMode枚举中找到该值.
编辑:1
public class ServiceAutoStartInfo
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private struct SERVICE_DELAYED_AUTO_START_INFO
{
public bool fDelayedAutostart;
}
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool ChangeServiceConfig2(IntPtr hService, int dwInfoLevel, IntPtr lpInfo);
// Service configuration parameter
const int SERVICE_CONFIG_DELAYED_AUTO_START_INFO = 3;
public bool ChangeDelayedAutoStart(IntPtr hService, bool delayed)
{
// Validate service handle
if (hService != IntPtr.Zero)
{
// Create
SERVICE_DELAYED_AUTO_START_INFO info = new SERVICE_DELAYED_AUTO_START_INFO();
// Set the DelayedAutostart property …
Run Code Online (Sandbox Code Playgroud) 虚拟树视图垂直滚动的像素,不同的方式,标准德尔福网格,TListView
和TTreeView
(或大部分我所知道的其他此类管制的)滚动一行,并保持全线可见在任何时候控制的顶部.当我使用光标键进行导航时,根据方向,第一行或最后一行是完全可见的.使用鼠标滚动时无论如何都没有对齐.
例如,使用Delphi 2007和2009中的Structure窗口可以观察到此行为.
有没有办法设置许多属性以具有标准Windows控件的行为?或者是否有一组补丁来实现这一目标?
在下面的代码(灵感来自这个片段),我用一个单一的事件处理程序buttonClick
来改变窗口的标题.目前,我需要评估事件的Id是否与按钮的Id相对应.如果我决定添加50个按钮而不是2个,则此方法可能会变得很麻烦.有一个更好的方法吗?
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, 'wxBitmapButton',
pos=(300, 150), size=(300, 350))
self.panel1 = wx.Panel(self, -1)
self.button1 = wx.Button(self.panel1, id=-1,
pos=(10, 20), size = (20,20))
self.button1.Bind(wx.EVT_BUTTON, self.buttonClick)
self.button2 = wx.Button(self.panel1, id=-1,
pos=(40, 20), size = (20,20))
self.button2.Bind(wx.EVT_BUTTON, self.buttonClick)
self.Show(True)
def buttonClick(self,event):
if event.Id == self.button1.Id:
self.SetTitle("Button 1 clicked")
elif event.Id == self.button2.Id:
self.SetTitle("Button 2 clicked")
application = wx.PySimpleApp()
window = MyFrame()
application.MainLoop()
Run Code Online (Sandbox Code Playgroud) 好的,我有以下功能:
function TfPackagedItemEdit.GetRTFDescription: TStringList;
begin
Result.Text := richDescription.Lines.Text; //stringlist
end;
Run Code Online (Sandbox Code Playgroud)
编译器会对此行生成以下警告:
[DCC警告] W1035函数'GetRTFDescription'的返回值可能未定义
关于如何清除此警告的任何想法?(除了在项目选项中关闭它)
我试过了:
function TfPackagedItemEdit.GetRTFDescription: TStringList;
begin
Result.Text := '';
Result.Text := richDescription.Lines.Text;
end;
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.
任何人都可以帮助我保护选择组或组件。
举些例子
If ('Readme.txt').selected or ('compact').selected = True then
begin "Password wizard page";
else
result := true;
end;
Run Code Online (Sandbox Code Playgroud)
这个工作脚本与此类似:P
function CheckPassword(Password: String): Boolean;
begin
result := false;
if (Password='component') or (Password='type') then
result := true;
end;
Run Code Online (Sandbox Code Playgroud) 我正在开发一个多线程应用程序(RAD Studio XE5).在应用程序的开始,我创建一个单独的线程,只要主表单生效.
我能够将消息从线程发送到我的应用程序中创建的任何表单,但是我找不到相反的方法,从主VCL线程向工作线程发送消息.
在创建主窗体时,我创建了工作线程并将句柄复制到公共变量中:
serverThread := TMyThread.Create(True, ServerPort + 1);
serverThreadHandle := serverThread.Handle; // SAVE HANDLE
serverThread.Start;
Run Code Online (Sandbox Code Playgroud)
然后(从另一种形式FrmSender)我向线程发送一条消息:
PostMessage(uMain.serverThreadHandle, UM_LOC_VCLMSG, UM_LOC_VCLMSG, Integer(PStrListVar));
Run Code Online (Sandbox Code Playgroud)
这是线程的执行过程:
procedure TMyThread.Execute;
var
(..)
vclMSG : TMsg;
str1, str2 : string;
(..)
begin
while not(Terminated) do
begin
Sleep(10);
if Assigned(FrmSender) then
if FrmSender.HandleAllocated then
if PeekMessage(vclMSG, FrmSender.Handle, 0, 0, PM_NOREMOVE) then
begin
if vclMSG.message = UM_LOC_VCLMSG then
begin
try
pStrListVar := pStrList(vclMSG.lParam);
str1 := pStrListVar^.Strings[0];
str2 := pStrListVar^.Strings[1];
finally
Dispose(pStrListVar);
end;
end;
end;
(.. do other …
Run Code Online (Sandbox Code Playgroud)