小编Eva*_*man的帖子

使用NSLayoutConstraints使用Swift在ScrollView中垂直对齐动态视图

我有一个应用程序,它具有动态生成的视图,并且每次加载视图时都可以不同.主视图包含一个设置为主视图边界的ScrollView.然后将子视图动态添加到ScrollView,但这些视图的高度将不同,并且它们可以随时更改高度(例如,用户单击视图的内容并更改).我想使用布局约束来确保每个视图保持与其上方的视图对齐,并使用一些任意填充.见下图:

需要布局

现在所有填充值都设置为10(顶部,左侧和右侧).我正在使用他们的框架手动设置这些子视图的位置,但如果视图改变大小,这不起作用,所以我想改变它以使用NSLayoutConstraints,但我遇到了一些问题.

作为测试,我像之前一样设置子视图的框架,但后来我添加了约束:

// newView is created and its frame is initialized
self.scrlView?.addSubview(newView)
let constr = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.previousView, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10)
NSLayoutConstraints.activateConstraints([constr])
newView.translatesAutoResizingMaskIntoConstraints = false
self.previousView = newView
Run Code Online (Sandbox Code Playgroud)

但这些观点无处可见.我究竟做错了什么?所需要的只是确保每个视图的顶部在前一个视图下方对齐,并且无论视图高度如何,它们都保持这种状态.

此外,由于这些视图都被添加到滚动视图中,使用上面的布局约束如何设置滚动视图的正确内容大小?

ios nslayoutconstraint swift

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

Delphi 2007:GlobalMemoryStatus 获取总 RAM

我需要使用 Delphi 2007 获取系统的总物理内存。在 4GB 或更大的系统上使用 GlobalMemoryStatus 似乎会给我带来错误。在 Delphi 2007 中,GlobalMemoryStatusEx 不存在,因此我手动将函数调用添加到我的程序中。它在我的 Windows 7 x64 上正确返回内存 (8GB),但在 Vista x32 系统上它仍然返回错误值(在此系统上应为 4GB,但返回 2.9GB)。知道我可能做错了什么吗?GlobalMemoryStatusEx 可以在旧操作系统上运行吗?

type
  DWORDLONG = UInt64;

  PMemoryStatusEx = ^TMemoryStatusEx;
  TMemoryStatusEx = packed record
    dwLength: DWORD;
    dwMemoryLoad: DWORD;
    ullTotalPhys: DWORDLONG;
    ullAvailPhys: DWORDLONG;
    ullTotalPageFile: DWORDLONG;
    ullAvailPageFile: DWORDLONG;
    ullTotalVirtual: DWORDLONG;
    ullAvailVirtual: DWORDLONG;
    ullAvailExtendedVirtual: DWORDLONG;
  end;

function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): BOOL; stdcall; external kernel32;

function getmemorysize:word;
var
  memory: TMemoryStatusEx;
begin
  FillChar(memory, SizeOf(memory), 0);
  memory.dwLength := SizeOf(memory);
  GlobalMemoryStatusEx(memory);
  result:=memory.ullTotalPhys div (1024*1024);
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007

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

当主窗体最小化/阻止自动恢复时隐藏fsStayOnTop窗体

我有一个主要表格和状态表格,类似于这里提出问题.但是,我的状态窗口的FormStyle是fsStayOnTop,当我尝试在状态窗口显示时最小化主窗体时会导致一些奇怪的行为.

当我最小化主窗体时,两个窗体都按预期隐藏,但是当状态窗体完成其最小化时完成其任务时,主窗体自动恢复自身并且其最小化按钮不再起作用(但最大化/恢复/关闭所有还在工作).使最小化功能再次起作用的唯一方法是重新启动应用程序.如果我将FormStyle设置为其他任何东西,一切正常,但我的应用程序要求状态窗体在可见时保持在顶部.

有没有理由为什么主窗体会自动恢复?有没有办法来解决这个问题?

procedure ButtonClick(sender:TObject);
begin
  //Gather some data

  ShowStatusWindow; // sets status window to visible, does its work, 
                    // then sets invisible. (Usually visible for about 10 seconds)

  //Gather more data

  Windows.SendMessage(self.Handle, WM_SETREDRAW, 0, 0); //Freeze the main form for 
                                                        //flickerless drawing
  // Handle everything that would cause a redraw
  Windows.SendMessage(self.Handle, WM_SETREDRAW, 1, 0);  // thaw form
  RedrawWindow(self.Handle, 0, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
end;
Run Code Online (Sandbox Code Playgroud)

windows delphi delphi-2007

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

如何在SQL Server中将列的数据类型从整数更改为文本?

我需要将数据库列从整数更改为字符串/文本,但我不知道如何去做.

此列用于存储标识号,但最近ID格式已更改,现在ID也包含ASCII字符(因此,通过此更改,新ID不能存储为整数).

我正在更新的应用程序是用Delphi 7编写的,并使用odbcexpress组件作为SQL Server库.

有可能ALTER TABLE用于此吗?或者是否需要将数据作为字符串复制到新列,删除旧列,并将列重命名为旧名称?

你能提供一个如何做到这一点的例子吗?我对SQL Server的工作方式不是很熟悉.

谢谢!

sql-server delphi alter-table delphi-7

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