要在TStream类中移动"当前字节"指针,我们可以使用属性Position(例如MyStream.Position:= 0)或使用Seek方法(例如MyStream.Seek(0,soFromBeginning).问题是,哪一个更有效(又快点??(我没有源,所以我自己无法检查).
到目前为止,我总是使用Seek定位指针.
Delphi 2009及更高版本使用unicode字符串作为其默认字符串类型.据我所知,unicode char实际上是16位值或2个字节(注意:我知道有可能有3或4个字节的char,但让我们考虑最常见的情况).但是我发现TStringStream对于操作这个字符串不是很可靠.例如,TStringStream.Size属性返回字符串的长度,而我认为它应该返回包含字符串的字节数.好吧,你可以自己调整它,但最让我困惑的是:TStringStream不能可靠地读取或写入缓冲区.
请检查以下代码(这是一个DUnit测试,总是失败).请告诉我问题所在(我在测试代码时使用的是D2010).
procedure TestTCPackage.TestStringStream;
const
cCount = 10;
cOrdMaxChar = Ord(High(Char));
var
B: Pointer;
SW, SR: TStringStream;
T: string;
i, j, k : Integer;
vStrings: array [0..cCount-1] of string;
begin
RandSeed := GetTickCount;
for i := 0 to cCount - 1 do
begin
j := Random(100) + 1;
SetLength(vStrings[i], j);
for k := 1 to j do
// fill string with random char (but no #0)
vStrings[i][k] := Char(Random(cOrdMaxChar-1) + 1);
end;
for i := 0 to cCount …Run Code Online (Sandbox Code Playgroud) 当BorderStyle设置为bsNone时,即使AutoScroll为True且某些子控件位置超过ClientWidth/ClientHeight值,TForms通常也不会显示滚动条.
那么,是否有任何方法/黑客"迫使"TForm显示滚动条(需要时),即使它的BorderStyle设置为bsNone?