小编Wit*_*292的帖子

为什么这些 HTML 列标题未对齐?

经过多次试验,我终于想出了相当简单的 HTML,它以我想要的方式显示表格:6 列具有特定宽度,两列右对齐,在固定标题行下滚动。但是,标题与列不太对齐:

HTML表格

如何使标题与数据列完全对齐? 我的在线搜索发现这是一个常见问题,但没有真正的原因解释或已知的简单修复。

我的 HTML 如下。由于最终将显示的数据,列宽是幻数。使标题文本正常而不是粗体,甚至是空标题,对对齐没有影响。

如果除了解决对齐问题之外,您还有更简单的方法来定义具有相同特征的表格,请告诉我。

编辑: box-sizing: border-box;正如 ProllyGeek 推荐的那样,它似乎很有希望,因为它适用于上面的示例数据,但是使用不同的单元格数据仍然会导致对齐稍微偏离,如下所示(价格/下降、下降/描述和项目#/发布的列边框是即使在使用border-box)时也关闭:

用其他数据重试

有数十个甚至数百个帖子想要在可滚动行上添加粘性标题,但显然所有解决方案都避免动态列,通常使用颜色来隐藏对齐问题,或者必须知道表格宽度的封闭 div 以显示正确放置在旁边的滚动条动态列宽。大多数示例忽略列宽,只使用 100% 宽的带有超大列的表格。

对于具有动态列宽(未声明表格宽度)、在可滚动行上、具有精确的标题和列对齐、仅使用纯 CSS/HTML 的粘性标题,似乎没有已知的自动解决方案。

我只是要使用thead { background-color: black; color: white; }.

<style>

table {
    width: 688px; /* 688 = column widths 80 + 56 + 280 + 120 + 56 + 96 */
    table-layout: fixed;
    font: 12px Courier;
    border-collapse: collapse;
}

table, th, td {
  border: 1px solid black;
  padding: 5px;
}

tbody {
  display: block;
  width: …
Run Code Online (Sandbox Code Playgroud)

html css html-table

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

由于编译器错误,此代码是否无法构建?

构建,而不仅仅是编译,如果启用了优化,则在使用Delphi 6时,以下内容将导致编译错误.使用赋值而不是inc()有效.这是编译器错误吗?奇怪的记录结构是因为原始代码已经简化为这个最小的例子.

program Project1;

type
  requestCountsType = array[0..1] of
    record
    processed: int64;
    end;

  talliestype = record
    counts: requestCountsType;
    end;

  healthtype = record
    charged: talliestype;
    end;

procedure computeProcessed(const h: healthtype; var requests, bytesin, bytesout: int64);
var i: byte;
begin
requests := 0; bytesin := 0; bytesout := 0;
for i := 0 to 1 do
  begin
  inc(requests, h.charged.counts[i].processed); // including this generates compiler internal error C1405 when optimization is on
  // requests := requests + h.charged.counts[i].processed; // this works
  end;
end; …
Run Code Online (Sandbox Code Playgroud)

delphi

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

为什么Delphi 6警告变量"i"可能尚未初始化?

优化开/关无关紧要.这是用于演示警告的简化代码.在原始例程中,所有赋值和比较都是可以返回各种值的函数表达式.

procedure test;
var i, k: integer;
begin
k := 21;
repeat
  if k = 20 then break;
  i := 5
until i = 5;
end;
Run Code Online (Sandbox Code Playgroud)

delphi compiler-warnings

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

什么是好的UDP超时和重试值?

我正在进行UDP服务器/客户端配置.客户端向服务器发送一个数据包,其大小不一,但通常<500字节.服务器基本上立即响应单个传出数据包,通常小于传入请求数据包.完整的事务总是由单个数据包交换组成.

如果客户端在T时间内没有看到响应,则重试R次,在每次重试之前将T增加X,最后放弃并返回错误.目前,R永远不会改变.

选择最佳初始T(等待时间),R(重试)和X(等待增加)是否有任何特殊逻辑?应该重试的持久性(即,使用什么最小值R)来达到某种"可靠"协议的近似值?

algorithm udp timeout protocols

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

为什么这个SSL_pending调用总是返回零?

此代码适用于使用阻塞套接字的HTTPS服务器:

  request := '';
  start := gettickcount;
  repeat
    if SSL_pending(ssl) > 0 then
      begin
      bytesin := SSL_read(ssl, buffer, sizeof(buffer)-1);
      if bytesin > 0 then
        begin
        buffer[bytesin] := #0;
        request := request + buffer;
        end
      else break; // read failed
      end; // pending
   until (gettickcount - start) > LARGETIMEOUT;
   // "request" is ready, though possibly empty
Run Code Online (Sandbox Code Playgroud)

SSL_pending()始终返回零,并且永远不会到达SSL_read().如果删除了SSL_pending()调用,则执行SSL_read().为什么SSL_pending()不指示可用的字节数?

请注意,如果您调用SSL_read()并且返回的字节数小于缓冲区大小,那么您已经阅读了所有内容并完成了操作.

如果传入的数据大于缓冲区大小,则第一个SSL_read()调用将填充缓冲区,您可以重复调用SSL_read(),直到无法填充缓冲区为止.

但是如果传入的数据是缓冲区大小的精确倍数,则最后一块数据填充缓冲区.如果您尝试另一个SSL_read()认为阻塞套接字上可能有更多数据,它会无限期挂起.因此,首先要检查SSL_pending().然而,这似乎不起作用.

你如何避免挂在最后的SSL_read()上?(我无法想象答案是非阻塞,因为这意味着你永远不能将SSL_read与阻塞一起使用.)

更新: 以下工作.显然SSL_pending()在第一个SSL_read()之后才起作用:

  request := '';
  repeat
    bytesin := SSL_read(ssl, buffer, sizeof(buffer)-1);
    if bytesin > 0 then
      begin …
Run Code Online (Sandbox Code Playgroud)

https openssl winsock

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

为什么TCP的三次握手会在执行时碰撞序列号?

为什么TCP三次握手在初始握手期间执行时碰到序列号?这比仅仅保留确认号等于序列号更好吗?

建立连接

Client sends SYN,A
Server responds with SYN-ACK,A+1,B
Client confirms with ACK,B+1
Run Code Online (Sandbox Code Playgroud)

怎么比这更好

Client sends SYN,A
Server responds with SYN-ACK,A,B
Client confirms with ACK,B
Run Code Online (Sandbox Code Playgroud)

tcp handshake

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

共识算法如何保证一致性?

两位将军证明“不可能设计出安全一致的算法”时,像Paxos这样的共识算法如何“保证安全(免于不一致)”?

当我考虑让两台服务器(1)可靠地交换号码(即两台服务器最终都知道对方确实收到了号码)或(2)两台服务器最终都知道交换失败并且不改变他们的状态,似乎(就像两个将军一样)消息失败总是以一种留下不一致的方式发生(即,一个服务器认为另一个完成了交换,但它没有)。

那么Paxos(或其他任何东西)如何真正保证“免于不一致”?有没有通俗易懂的解释?演示两个服务器进行有保证的交换或在失败时完全放弃交换的最简单的伪代码是什么?

algorithm distributed-computing consensus handshake paxos

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

什么是MAPP协议来获取已过帐的交易?

我有一些已有15年历史的代码,可以通过POTS进行 MAPP(万事达卡自动销售点计划)信用卡交易以及带有主机数据捕获(而不是终端数据捕获)的调制解调器。它实现:获得批准(操作码#08),批准后(#60),出售(#10),退款(#30)和无效(#50)交易。我记得,MAPP还允许为给定的检索号或整批检索数据。为了进行验证,我需要实现一个或另一个(获取事务或批处理)。对于给定的检索号码,取卡和金额就足够了。但是,我再也找不到“ 60-M08V3.0 / 1096销售点规格和认证程序”的副本,并且该文档似乎不在网络上任何地方。我猜想通过检索编号进行提取将需要诸如TERMINALID,ASCII FS,OPCODE,ASCII FS,RETRIEVAL,ASCII ETX之类的东西(或者批准编号也位于其中)。

提取先前发布的交易或一批交易(通过检索号和/或批准号)以获取合适的协议是什么?网络上是否有60-M08V3.0 / 1096的副本或协议的适用部分?

modem specifications transactions protocols credit-card

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

如何使用Delphi 6修改Indy 8 IdMessage.pas?

我有一份Delphi 6和一个使用Indy TIdMessage组件的简单电子邮件程序.我想删除IdMessage.pas然后重新编译应用程序的第464-465行.我很难找到清晰的文档,所以我尝试了这些步骤来修改组件:

  • \delphi6\source\indy\indy.dpk在IDE中打开
  • 双击IdMessage.pas在包窗口
  • 编辑IdMessage.pas并保存文件
  • 单击"包"窗口中的"编译"
  • 单击项目菜单中的"Build Indy"
  • 单击"包"窗口中的"安装"

但后来我得到了一个错误\bpl\indy60.bpl can't be loaded because \bin\indy60.bpl is already loaded.所以我在"组件"菜单中尝试了"安装包...",但只在\bpl\dclindy60.bpl那里找到了.所以我删除了那个包,并且:

  • \delphi6\source\indy\dclindy.dpk在IDE中打开
  • 单击"包"窗口中的"编译"
  • 单击项目菜单中的"生成dclIndy"
  • 单击"包"窗口中的"安装"

IDE确认TIdMessage已安装所有组件(包括),但电子邮件程序仍然表现为原始未修改组件仍在使用中.

我究竟做错了什么?

ide delphi indy indy-8

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

记录常量可以记录在Delphi 6中的记录吗?

我可以像这样定义记录常量:

const
  dialoghdr: DLGTEMPLATE =
    (style: 1; dwExtendedStyle: 2; cdit: 3; x: 4; y: 5; cx: 6; cy: 7);
  dialogitem: DLGITEMTEMPLATE =
    (style: 8; dwExtendedStyle: 9; x: 10; y: 11; cx: 12; cy: 13; id: 14);
Run Code Online (Sandbox Code Playgroud)

我可以定义这样的记录记录:

type
  template = packed record
    header: DLGTEMPLATE;
    item: DLGITEMTEMPLATE;
    end;
Run Code Online (Sandbox Code Playgroud)

虽然编译器会接受这个:

const mytemplate: template = (); // compiles!
Run Code Online (Sandbox Code Playgroud)

有没有办法在()中实际放置常量?就像是

const mytemplate: template = 
    (header.style: 1; header.dwExtendedStyle: 2; header.cdit: 3...,
     item.style: 8; item.dwExtendedStyle: 9; item.x: 10...);
Run Code Online (Sandbox Code Playgroud)

要么

const mytemplate: template = 
    ((style: 1; dwExtendedStyle: …
Run Code Online (Sandbox Code Playgroud)

delphi syntax

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

是否有一种有效的方法来防止程序没有尝试...除了?

我有一个Delphi 6客户端 - 服务器应用程序,其中服务器本质上是:

initialize;
repeat
  try
    getInput;
    putOutput;
  except
    on e: exception do writeln(e.message);
  end
until false;
Run Code Online (Sandbox Code Playgroud)

在开发过程中,错误(例如指针异常)很少见,但服务器可以继续运行.现在,它的生产服务器似乎调试和人们很容易去除try...except,因为它增加了大量的执行对服务器的开销,但随后如有异常要发生,将停止服务器.

一个解决办法是有一个父进程只需重新启动整个服务器,并在重新启动绕过初始化将有效地重现了什么try...except成就,但也不会有什么导致异常的任何记录,并且有或没有初始化重启实际上创造了很多不需要的"状态"问题,特别是与客户端连接.

有没有办法覆盖或修改异常处理,以便在异常发生时将其记录到某个地方(例如在系统事件日志或%errorlevel%中),然后程序退出并重新启动或(更好:)恢复,但没有开销无所不包的try...except

理想的解决方案将记录异常,但恢复执行的级别repeat...until.也许通过执行诸如保存repeat某些可访问全局的地址之类的内容,然后进行任何异常来解除调用堆栈并在该保存的地址恢复?(我猜这try..except本质上是什么,但是有没有办法避免在没有例外情况下它所施加的开销?)

delphi exception

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

Delphi程序参数:var比指针慢吗?

我在Delphi 6中有一个"发送"例程,它接受一个可变大小的数据块(一个固定大小的头,后跟不同数量的数据),并且该例程最终在Winsock中调用sendto().我用两种方式对它进行了编码,一次是传递的块是var(有点误导,但它有效),一次是传递块的指针.用于基准测试的简单版本类似于:

type 
  header = record destination, serialnumber: integer end;
  pheader = ^header;

var
  smallblock: record h: header; data: array[1..5] of integer end;
  bigblock: record h: header; data: array[1..100] of integer end;

procedure send1(var h: header; size: integer);
begin
h.destination := 1; // typical header adjustments before sendto()
h.serialnumber := 2;
sendto(sock, h, size, 0, client, sizeof(client))
end;

procedure send2(p: pheader; size: cardinal);
begin
p^.destination := 1;
p^.serialnumber := 2;
sendto(sock, p^, size, 0, client, sizeof(client))
end;

procedure doit1;
begin …
Run Code Online (Sandbox Code Playgroud)

delphi parameters performance pointers

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