小编And*_*and的帖子

自动调整静态控件的正确方法是什么?

我想将静态控件的大小调整为其内容大小,因此我需要首先计算其文本内容的大小.我找到了一种GetTextExtentPoint32计算大小的方法,但是我需要将DC的字体设置为与控件的字体相同.有一个更好的方法吗?我已经设置了一次静态控件的字体,我想也许我不需要第二次设置DC的字体.

计算静态控件文本内容大小的最佳方法是什么?有没有更好的方法来自动调整静态控件?

user-interface winapi controls

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

for-in循环是否计算其收集部分一次?

我有一个函数,它生成一个数组作为结果,并希望迭代其结果来执行一些操作:

for MyElm in AFunction(SomeVar) do
begin
  //...
end;
Run Code Online (Sandbox Code Playgroud)

因为集合部分是函数的结果,所以确保它只执行一次是很重要的.

问:每次迭代都会执行AFunction吗?

delphi

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

如何禁用移动系统菜单项?

在Microsoft Windows中,这适用于:

 mnu := GetSystemMenu(h, false);
 EnableMenuItem(mnu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

 mnu := GetSystemMenu(h, false);
 EnableMenuItem(mnu, SC_MOVE, MF_BYCOMMAND or MF_GRAYED);
Run Code Online (Sandbox Code Playgroud)

因此我知道如何禁用窗口的"关闭"系统菜单项,而不是"移动"项.我怎么做?

更新

当然,使用非常好的函数EnableMenuItem的一种替代方法是使用SetMenuItemInfo:

  FillChar(info, sizeOf(info), 0);
  with info do
  begin
    cbSize := sizeOf(info);
    fMask := MIIM_STATE;
    fState := MFS_GRAYED;
  end;
  SetMenuItemInfo(mnu, SC_MOVE, false, info);
Run Code Online (Sandbox Code Playgroud)

但这对SC_CLOSE再次起作用,但SC_MOVE完全没有!

更新2

即使问题已经解决,因为工作代码已经找到"完成工作",可以这么说,听到关于问题原因的假设会很有趣:为什么SC_CLOSE工作但不是SC_MOVE?

winapi systemmenu

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

GetVersionEx在Windows 7上不起作用?

在我的Windows 7系统上,GetVersionEx Windows API函数返回"6.0",表示Windows Vista,它返回"6.1".

如果重要,我使用以下Delphi代码:

function winver: string;
var
  ver: TOSVersionInfo;
begin
  ver.dwOSVersionInfoSize := SizeOf(ver);
  if GetVersionEx(ver) then
    with ver do
      result := IntToStr(dwMajorVersion) + '.' + IntToStr(dwMinorVersion) + '.' + IntToStr(dwBuildNumber) + ' (' + szCSDVersion + ')';
end;
Run Code Online (Sandbox Code Playgroud)

并返回字符串"6.0.6002(Service Pack 2)".

这不是很奇怪吗?

delphi winapi windows-7

6
推荐指数
2
解决办法
6048
查看次数

Delphi SetLength自定义索引

在Delphi中,可以创建该类型的数组

var
  Arr: array[2..N] of MyType;
Run Code Online (Sandbox Code Playgroud)

这是一个N - 1从2到N索引的元素数组.

如果我们改为声明一个动态数组

var
  Arr: array of MyType
Run Code Online (Sandbox Code Playgroud)

然后N - 1通过分配元素

SetLength(Arr, N - 1)
Run Code Online (Sandbox Code Playgroud)

然后元素将从0索引到N - 2.是否可以将它们从2编入索引到N(比如说)?

arrays delphi indexing dynamic-arrays

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

坎布里亚数学大上下缘

我想在winforms文本框中显示一些数学表达式.因此我认为"Cambria Math"字体是一个不错的选择,但由于字体的顶部和底部边缘较高,文本看起来很奇怪.首先,我认为我犯了一个错误,但根据这个问题,这是字体的正确行为.

文本框的屏幕截图

为什么Cambria Math具有这些大的边距值,如何在Word 2010等文本框中正确显示我的字符串?

(请注意,我只对排版有所了解;)

编辑:我必须使文本框高,否则插入符号将是不可见的.文本框的字体大小设置为8.25pt

c# fonts winforms

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

ABBR HTML标记的标题和内容中的语言不同

假设我正在用HTML写一篇文章.这篇文章的语言是瑞典语,所以我有<html lang="sv">.现在我想在以下文本中正确标记缩写:

HTML kan användas till mycket.
Run Code Online (Sandbox Code Playgroud)

为此,我先做

<abbr title="HyperText Markup Language">HTML</abbr> kan användas till mycket.
Run Code Online (Sandbox Code Playgroud)

然而,仅此一点还不够好,因为该title属性的语言是Swedish(sv).除了是一个理论问题,这将使屏幕阅读器以极其尴尬的方式发布标题.为了解决这个问题,我能做到

<abbr title="HyperText Markup Language" lang="en">HTML</abbr> kan användas
  till mycket.
Run Code Online (Sandbox Code Playgroud)

但更糟糕的是,因为现在缩写'HTML'将在Enligsh中读取而不是瑞典语[因此从瑞典的角度来看,它听起来像"ejtsch-ti-emm-ell"而不是"hå-te" -emm-ELL"].

因此,缩写,或文本内容中的abbr节点,应在瑞典,但title属性应是英文的.标记这个的首选(HTML5)方式是什么?是吗

<abbr title="HyperText Markup Language" lang="en">
  <span lang="sv">HTML</span>
</abbr> kan användas till mycket.
Run Code Online (Sandbox Code Playgroud)

html html5 semantic-markup abbr lang

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

Delphi Statictext字体颜色变化无样式

我想将 StaticText 字体颜色从黑色更改为clBlue. 我该怎么办?

目前我正在做

StaticText.Font.Color := clBlue;
Run Code Online (Sandbox Code Playgroud)

但这对颜色没有影响。

我能做些什么?谢谢!

delphi

6
推荐指数
2
解决办法
2690
查看次数

参考重载函数(或过程)

我用的是这种类型

type
  TRealFunction = reference to function(const X: extended): extended;
Run Code Online (Sandbox Code Playgroud)

在我的代码中很多.假设我有一个变量

var
  rfcn: TRealFunction;
Run Code Online (Sandbox Code Playgroud)

并尝试分配Math.ArcSec给它:

rfcn := ArcSec;
Run Code Online (Sandbox Code Playgroud)

这与Delphi 2009中的预期一样,但现在我尝试在Delphi 10.2中编译它,并且编译器感到不安:

[dcc32 Error] Unit1.pas(42): E2010 Incompatible types: 'TRealFunction' and 'ArcSec'
Run Code Online (Sandbox Code Playgroud)

所不同的,似乎是ArcSec超载德尔福10.2:它有single,doubleextended口味.看起来编译器不喜欢引用这种类型的重载函数(或过程)(太类似的类型?).

但是,如果我重新定义

type
  TRealFunction = function(const X: extended): extended;
Run Code Online (Sandbox Code Playgroud)

它编译得很好.

当然,这里有明显的解决方法:我可以定义

function ArcSec(const X: extended): extended; inline;
begin
  result := Math.ArcSec(X);
end;
Run Code Online (Sandbox Code Playgroud)

或者我可以写

rfcn := function(const X: extended): extended
  begin
    result := Math.ArcSec(x);
  end;
Run Code Online (Sandbox Code Playgroud)

尽管如此,这仍然需要编写很多代码.有更简单的解决方法吗?

delphi overloading anonymous-function typechecking

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

在Delphi中,有一点需要将object类型的参数声明为const吗?

我知道const参数对于Delphi中简单类型和字符串的好处。但是一个const TStrings呢?由于const TStrings参数可以更改其项(内容),因此声明const TStrings参数的意义何在?这也适用于任何对象。

delphi const

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