小编Rit*_*tra的帖子

使用SO_REUSEADDR时,接收UDP数据包发送到127.0.0.1

我试图使一组应用程序使用UDP和广播消息发现彼此.应用程序将定期发送一个UDP数据包,说明它们是谁以及它们可以做什么.最初我们只用于广播到INADDR_BROADCAST.

所有应用程序共享同一个端口进行监听(因此SO_REUSEADDR).事件内核对象附加到套接字,因此当我们可以获取新数据包并在WaitFor循环中使用它时,我们会收到通知.套接字用于异步.

打开插座:

FBroadcastSocket := socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
if FBroadcastSocket = INVALID_SOCKET then Exit;
i := 1;
setsockopt( FBroadcastSocket, SOL_SOCKET, SO_REUSEADDR, Pointer( @i ), sizeof( i ) );
i := 1;
setsockopt( FBroadcastSocket, SOL_SOCKET, SO_BROADCAST, Pointer( @i ), sizeof( i ) );
System.FillChar( A, sizeof( A ), 0 );
A.sin_family      := AF_INET;
A.sin_port        := htons( FBroadcastPort );
A.sin_addr.S_addr := INADDR_ANY;
if bind( FBroadcastSocket, A, sizeof( A ) ) = SOCKET_ERROR then begin
    CloseBroadcastSocket();
    Exit;
end;
WSAEventSelect( FBroadcastSocket, FBroadcastEvent, …
Run Code Online (Sandbox Code Playgroud)

delphi udp localhost broadcast

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

在 vue.js keep-alive 部分刷新页面

我有一个使用 vue-router 的 Vue.js SPA。因为登录后每个页面都需要保持状态(如输入的过滤器/分页)这是使用保持活动完成的:

<keep-alive>
  <router-view/>
</keep-alive>
Run Code Online (Sandbox Code Playgroud)

这很有效,但是当有人注销并再次登录时,由于保持活动状态,我仍然看到相同的过滤器值。

我可以在注销时以某种方式刷新/清除以编程方式保持活动的页面吗?

vue.js vue-router

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

更改嵌入的TrueType字体,以便Windows GDI可以使用它

我试图将PDF内容呈现给GDI设备上下文(确切地说是24位位图).将PDF流解析为PDF对象并从内容字典中呈现PDF命令效果很好,包括字体渲染.

嵌入式字体从其FontFile流中解压缩并使用"加载" AddFontMemResourceEx.现在一些嵌入字体删除了GDI所需的一些TrueType表,比如'name'表.因此,我尝试通过将TrueType子集字体解析为其表来修改字体,并修改那些具有数据缺失/缺失表的表,并使用尽可能正确的信息重新生成.

我使用Microsoft字体验证工具来查看生成的字体是如何"正确"的.我仍然得到一些错误,比如对于maxp表,最大值通常太大(它是一个子集)或者xAvgCharWidth字段不等于'OS/2'表的计算值不正确但这不会停止其他嵌入字体可用.使用PDFCreator嵌入的字体是有问题的.

问题:

  1. 如何确定我需要更改为字体文件以便GDI能够使用它?
  2. 是否还有其他字体验证工具可以让我深入了解fontfile的错误?

如果需要:我可以在某处制作原始字体文件和更改后的字体文件.

到目前为止做了哪些修改:

  • 确保有'head','hhea','maxp'和'OS/2'部分.
  • 如果我们有符号字体,请清除'OS/2'部分中的Panose和Unicode字段
  • 如果我们为零,请填写WInAscent/Desc和TypoAsc/Desc的正确值.
  • 为超级/下标/下划线位置和大小填写可接受的值.
  • 扫描剩下的所有字形,在头部填写X/Y最小值/最大值.
  • 使用来自的PDF文件中的信息重建名称部分.

pdf gdi truetype embedded-fonts

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

Delphi快速大位图创建(无需清除)

当使用 Graphics 单元中的 GDI 位图的 TBitmap 包装器时,我注意到在使用 SetSize( w, h ) 设置位图时,它总是会清除位图(使用 PatBlt 调用)。当我稍后复制这些位时(参见下面的例程),似乎 ScanLine 是最快的可能性,而不是 SetDIBits。

function ToBitmap: TBitmap;
var
    i, N, x: Integer;
    S, D:    PAnsiChar;
begin
  Result := TBitmap.Create();
  Result.PixelFormat := pf32bit;
  Result.SetSize( width, height );
  S := Src;
  D := Result.ScanLine[ 0 ];
  x := Integer( Result.ScanLine[ 1 ] ) - Integer( D );
  N := width * sizeof( longword );
  for i := 0 to height - 1 do begin
    Move( S^, D^, N ); …
Run Code Online (Sandbox Code Playgroud)

delphi optimization bitmap

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

是否有版本的Delphi所有编译器内在函数的列表?

正如在其他SO问题中所回答的那样,现代Delphi最终支持编译器内部函数AtomicIncrement.

在某个地方有一个列表,其中的内部函数是在哪个版本的Delphi中引入的,因此我可以使用它{$if CompilerVersion ...}来保持代码向后兼容(使用内联asm)和更清晰的未来编译器?

delphi intrinsics

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

在WM_KEYDOWN中获取Unicode字符

在我需要以不同方式处理大量键的应用程序中,我想要处理WM_KEYDOWN中的所有情况,而根本不使用WM_CHAR.是否可以从WM_KEYDOWN提供的虚拟键序列中获取正确的ASCII/UNICODE字符,而不是依赖于更常规的TranslateMsg/WM_CHAR?

作为一个例子:应用程序应该能够以完全不同的方式处理Shift-B,按下CTRL-B的常规B.

使用MapVirtualKey,您不使用Shift,Control和Alt键的状态,或者至少不是我能看到的状态.

正如Leo Davidson所说:你可以使用ToUnicode调用来自己执行VK - > Unicode转换.

windows keyboard winapi

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