fctreenode 加stringdata的问题
TfcTreeNode = class(TPersistent)
private
FMultiSelected: boolean;
FCheckboxType: TfcTreeViewCheckboxType;
FChecked: boolean;
FOwner: TfcTreeNodes;
FText: string;
FStringData1: string;
FStringData2: string;
FStringData3: string;
FStringData4: string;
FStringData5: string;
FStringData6: String;
在程序运行中可以正常访问到StringData3到stringdata6,但是用delphi设计窗体时添加节点总是数据部正确,writedata的代码如下:
procedure TfcTreeNode.WriteData(Stream: TStream; Info: PfcNodeInfo);
var
Size, L, ItemCount: Integer;
Node: TfcTreeNode;
//sl : TStringList ;
begin
L := Length(Text);
if L > 255 then L := 255;
Size := GetSizeOfNodeInfo + L - 255;
// Size := SizeOf(TfcNodeInfo) + L - 255;
FillChar(Info^, SizeOf(TfcNodeInfo), 0);
{$warnings off}
Info^.Text := Text;
{$warnings on}
Info^.ImageIndex := ImageIndex;
Info^.SelectedIndex := SelectedIndex;
Info^.OverlayIndex := OverlayIndex;
Info^.StateIndex := StateIndex;
Info^.Data := Data;
ItemCount := Count;
Info^.Count := ItemCount;
Info^.CheckboxType:= CheckboxType;
Info^.Checked:= ord(Checked) + $02 * Ord(Grayed);
Info^.Expanded := Expanded;
Info^.StringDataSize1:= length(StringData);
Info^.StringDataSize2:= length(StringData2);
Info^.StringDataSize3:= length(StringData3);
Info^.StringDataSize4:= length(StringData4);
Info^.StringDataSize5:= length(StringData5);
Info^.StringDataSize6:= length(StringData6);
Stream.WriteBuffer(Size, SizeOf(Size));
Stream.WriteBuffer(Info^, Size);
{ Support StringData properties }
if Info^.StringDataSize1>0 then begin
Stream.WriteBuffer(PChar(StringData)^, length(StringData));
end;
if Info^.StringDataSize2>0 then begin
Stream.WriteBuffer(PChar(StringData2)^, length(StringData2));
end;
if Info^.StringDataSize3>0 then begin
Stream.WriteBuffer(PChar(StringData3)^, length(StringData3));
end;
if Info^.StringDataSize4>0 then begin
Stream.WriteBuffer(PChar(StringData4)^, length(StringData4));
end;
if Info^.StringDataSize5>0 then begin
Stream.WriteBuffer(PChar(StringData5)^, length(StringData5));
end;
if Info^.StringDataSize6>0 then begin
Stream.WriteBuffer(PChar(StringData6)^, length(StringData6));
end;
Node := GetFirstChild;
while Node <> nil do
begin
Node.WriteData(Stream, Info);
Node := Node.GetNextSibling;
end;
// for I := 0 to ItemCount - 1 do Item[I].WriteData(Stream, Info);
end;
readdata的代码如下:
procedure TfcTreeNode.ReadData(Stream: TStream; Info: PfcNodeInfo);
var
I, Size, ItemCount: Integer;
StrBuffer: PChar;
Temp: Integer;
UseExpanded:Boolean;
begin
Owner.ClearCache;
Stream.ReadBuffer(Size, SizeOf(Size));
{ 7/6/99 - Save for fcTreeCombo streaming }
{$ifdef fcDelphi4Up}
ReadDataSize:= Size;
{$endif}
{ RSW - Advance if somehow size is greater than node size }
Stream.ReadBuffer(Info^, fcmin(Size, SizeOf(Info^)));
Temp := SizeOf(TfcNodeInfo) - (255 - Length(Info^.Text));
{ Support StringData property }
if Info^.StringDataSize1>0 then
begin
StrBuffer:= StrAlloc(Info^.StringDataSize1+1);
StrBuffer[Info^.StringDataSize1]:= #0;
Stream.ReadBuffer(StrBuffer^, Info^.StringDataSize1);
StringData:= StrPas(StrBuffer);
StrDispose(StrBuffer);
end
else StringData:= '';
{ Support StringData property }
if Info^.StringDataSize2>0 then
begin
StrBuffer:= StrAlloc(Info^.StringDataSize2+1);
StrBuffer[Info^.StringDataSize2]:= #0;
Stream.ReadBuffer(StrBuffer^, Info^.StringDataSize2);
StringData2:= StrPas(StrBuffer);
StrDispose(StrBuffer);
end
else StringData2:= '';
{ Support StringData property }
if Info^.StringDataSize3>0 then
begin
StrBuffer:= StrAlloc(Info^.StringDataSize3+1);
StrBuffer[Info^.StringDataSize3]:= #0;
Stream.ReadBuffer(StrBuffer^, Info^.StringDataSize3);
StringData3:= StrPas(StrBuffer);
StrDispose(StrBuffer);
end
else StringData3:= '';
{ Support StringData property }
if Info^.StringDataSize4>0 then
begin
StrBuffer:= StrAlloc(Info^.StringDataSize4+1);
StrBuffer[Info^.StringDataSize4]:= #0;
Stream.ReadBuffer(StrBuffer^, Info^.StringDataSize4);
StringData4:= StrPas(StrBuffer);
StrDispose(StrBuffer);
end
else StringData4:= '';
{ Support StringData property }
if Info^.StringDataSize5>0 then
begin
StrBuffer:= StrAlloc(Info^.StringDataSize5+1);
StrBuffer[Info^.StringDataSize5]:= #0;
Stream.ReadBuffer(StrBuffer^, Info^.StringDataSize5);
StringData5:= StrPas(StrBuffer);
StrDispose(StrBuffer);
end
else StringData5:= '';
{ Support StringData property }
if Info^.StringDataSize6>0 then
begin
StrBuffer:= StrAlloc(Info^.StringDataSize6+1);
StrBuffer[Info^.StringDataSize6]:= #0;
Stream.ReadBuffer(StrBuffer^, Info^.StringDataSize6);
StringData6:= StrPas(StrBuffer);
StrDispose(StrBuffer);
end
else StringData6:= '';
{$warnings off}
Text := Info^.Text;
{$warnings on}
ImageIndex := Info^.ImageIndex;
SelectedIndex := Info^.SelectedIndex;
StateIndex := Info^.StateIndex;
OverlayIndex := Info^.OverlayIndex;
Data := Info^.Data;
ItemCount := Info^.Count;
CheckboxType:= Info^.CheckboxType;
Checked:= (Info^.Checked and $01)<>0;
Grayed:= (Info^.Checked and $02)<>0;
UseExpanded:= Info^.Expanded;
for I := 0 to ItemCount - 1 do
with Owner.AddChild(Self, '') do ReadData(Stream, Info);
// 1/31/2002-PYW-Added new property to respect expanded node settings.
if (Owner.Owner<>nil) and (Owner.Owner.StreamExpandedNode) then
Expanded := UseExpanded;
if TreeView.StreamVersion=1 then
if Size > Temp then Stream.Position:= Stream.Position + (Size - Temp);
end;
哪位大哥给指点一下
相关推荐
Microsoft.WinDbg-1.2610.1001.0-x64
Microsoft.WinDbg-1.2610.1001.0-x64
PDF发票内容提取排版并结构化导出xlsx/cvs嵌入式ptyhon
【本地发票提取工具】 核心优势:不依赖传统粗糙 OCR,基于文字排版结构进行精准提取。仅“税网”下载及税网邮件发送的原版 PDF 发票(开票软件发送的不太支持)能实现开票明细级的秒级本地提取,告别只能提抬头、总额的尴尬。 可免费试用 3 天! 【用前须知】 去微软官网下载VC_redist.x64.exe运行修复运行库(必要的前置操作),之后再解压本工具rar,运行本exe即可。 VC_redist.x64.exe官网永久下载地址 https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist 【安全须知】 个人开发暂未做代码签名,杀软可能会有误报拦截。遇到拦截请在杀软中添加信任/白名单即可。 VirusTotal扫描结果 2/61,主流杀软均通过,个别引擎因无签名误报。官网 virustotal.com 点击页面中间显眼的 “Choose file”(选择文件)按钮上传扫描。
Flask校园二手交易平台课设
这是一份基于 Flask + SQLite 的校园二手交易平台课程设计完整资料,包含实验报告(Markdown、HTML、PDF 三种格式)、全部 Python 源码、8 个 Jinja2 页面模板、5 张运行截图、答辩 PPT。学生注册账号后发布闲置物品,同校同学按分类翻、按关键词搜,看中了在详情页留言咨询,管理员能下架违规商品。不接支付不做物流,买卖双方线下交易,平台只负责信息展示和沟通,一个学期课设能做完。 系统功能:用户注册登录登出,session 维持登录态;发布商品填标题、描述、价格、选六类分类,图片可选上传不强制;首页卡片网格展示在售商品,顶部搜索框按标题描述模糊匹配,下方分类按钮筛选,搜索和筛选可组合;商品详情页展示大图、完整描述、卖家昵称,登录用户能留言咨询;我的发布页能看自己挂过的所有商品并删除;管理员后台能看全部商品,一键下架违规品或恢复在售。 几个值得参考的实现点:密码用 Werkzeug 哈希加盐存储;登录接口不区分"用户不存在"和"密码错误",防枚举用户名;图片上传限制后缀和 2MB,文件名随机串重命名,防覆盖和传脚本;分类和搜索筛选组合用动态拼 SQL;首次启动自动建表写管理员账号;Bootstrap 5 栅格,手机浏览器也能看。 适合正在做 Web 课程设计、Python 后端入门的学生,以及想学习"Flask 蓝图 + SQLite + 登录鉴权 + 文件上传"完整小项目的自学者。拿到手后 cd src,pip install -r requirements.txt,python app.py,浏览器开 http://127.0.0.1:5000 即可,管理员账号 admin/admin123,普通用户自行注册。
《低秩加稀疏模型的高效动态平行MRI重建.zip
1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
物联网与短距离无线通信技术(第3版)PPT课件
物联网与短距离无线通信技术(第3版)PPT课件


