FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求. 特色功能: 免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网穿透. Windows版下载地址: http://www.hostbuf.com/downloads/finalshe
月度归档: 2018年6月
[日积月累]-2018-6-24:早期 Delphi 版本 Base64 解码需要注意的一点小问题
早期的 Delphi DecodeBase64 对于不是正常以 = 号结束的 Base64 编码内容进行解码时,结尾会解出乱码,造成程序运行时出问题,要解决这一问题,应对其进行补位,加上一定数量的 “=”,以解决此问题。需要补位的 “=” 个数的计算公式: n=( mod 4) n=0 :不需要补位 n>0:补
[日积月累]-20180623:W1037 FOR-Loop variable ‘Result’ may be undefined after loop
【译】 W1037 FOR 循环变量 Result 可能在循环后失去定义 【问题原因】 Result 被用在循环的初始值或结束值时会引发此警告:
1 2 3 4 5 6 7 8 9 10 |
function Test: Integer; var I: Integer; begin Result:=100; for I := 0 to Result do begin ... end; end; |
就个人来看,用做循环的结束值是没有问题的,但下面的用法就有问题了: [crayon-6292fc75168c
[教程]为 Delphi 剪贴板加入 CF_HTML 数据支持
嗯,直接上代码,需要引用 QDAC 的 QString 单元,不支持太老版本的 Delphi,使用古董版的 Delphi 的请自己改写下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
uses clipbrd, qstring; type THTMLClipboardFormatData = class helper for TClipboard private class procedure RegisterHtmlFormat; function GetAsHtml: String; procedure SetAsHtml(const Value: String); public property AsHtml: String read GetAsHtml write SetAsHtml; end; var CF_HTML: WORD = 0; //此处省略一万字 { THTMLClipboardFormatData } function THTMLClipboardFormatData.GetAsHtml: String; var AHandle: THandle; pData: PQCharA absolute AHandle; AText: QStringW; p: PWideChar; begin RegisterHtmlFormat; if Clipboard.HasFormat(CF_HTML) then begin AHandle := Clipboard.GetAsHandle(CF_HTML); try AText := Utf8Decode(pData, -1); p := PWideChar(AText); while (p^ <> '<') and (p^ <> #0) do SkipLineW(p); Result := p; finally GlobalUnlock(AHandle); end; end; end; class procedure THTMLClipboardFormatData.RegisterHtmlFormat; begin if CF_HTML = 0 then CF_HTML := RegisterClipboardFormat('HTML Format'); end; procedure THTMLClipboardFormatData.SetAsHtml(const Value: String); var S: QStringA; AText: String; AHandle: THandle; begin RegisterHtmlFormat; S := QString.Utf8Encode(Value); AText := Format('Version:0.9'#13#10 + // 'StartHTML:%08u'#13#10 + // 'EndHTML:%08u'#13#10 + // 'StartFragment:%08u'#13#10 + // 'EndFragment:%08u'#13#10 + // '<html><body>'#13#10 + // '<!--StartFragment -->'#13#10 + // '%s'#13#10 + // '<!--EndFragment-->'#13#10 + '</body></html>', [97, 172 + S.Length, 111, 136 + S.Length, Value]); S := QString.Utf8Encode(AText); AHandle := GlobalAlloc(GMEM_DDESHARE, S.Length + 1); if AHandle <> 0 then begin try Move(PQCharA(S)^, GlobalLock(AHandle)^, S.Length + 1); finally GlobalUnlock(AHandle); Clipboard.SetAsHandle(CF_HTML, AHandle); end; end; end; |
用法是直接操作 Clipboard.AsHtml 属性就可以了,例如: [crayon-6292fc7516c3
[日积月累]-20180622:前向声明关键字 forward
【格式】 函数声明;forward; 【用途】 forward 关键字用于前向声明一个局部函数,比如:
1 |
function Calculate(X, Y: Integer): Real; forward; |
声明了一个 Calculate 函数,那么后面必需重新声明并实现这个函数,类似于下面: [crayon-6292fc7516df3801300236/
[日积月累]-20180621:[Warning] W1000 Symbol ‘%1’ is deprecated: ‘Use %2’
【译】 [警告] W1000 符号 ‘%1′ 已经被废弃:’请使用 %2’ 【问题原因】 当前版的 Delphi 已经不再使用名为 %1 的函数/变量/常量,目前的代码仍可以正常运行,但最好改成使用 %2 的替代函数/变量/常量。官方的意思是相应的符号将在后续的某个版本中