![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
VirtualTree + editors [D7, WinXP]
MadDig © (2004-10-28 11:59:00)Подскажите может кто сталкивался с такой проблемой, у меня после редактировании первой ноды высскакивает Access violation при чем если есть больше одной ноды все OK ошибка выскакивает только тогда когда завершаешь редактирование энтером.
привожу участок кода добавления ноды:
var
data:NodeData;
Node:PVirtualNode;
Pdata:PGridData;
s:String;
begin
with vt do begin
node:=AddChild(nil,Data);
node.CheckType:=LevelToCheckType[RadioGroup1.ItemIndex];
data:=GetNodeData(Node);
Data.ImageIndex:=0;
data.Text2:='Äàòà';
Pdata:=GetNodeData(Node);
Pdata.Value[0]:='';//inttostr(node.Index)+' '+inttostr(VT.GetNodeLevel(node));
Pdata.ValueType[0]:=vtString;
Pdata.ValueType[1]:=LevelToValueType[RadioGroup2.ItemIndex];
Pdata.Value[1]:=DefEdit.text;
if Pdata.ValueType[1] = vtPickString then begin
Pdata.cItems:=DefMemo.Lines;
end;
FocusedNode:=node;
Selected[node]:=true;
Focused;
EditNode(FocusedNode,0);
end;
end;
MetalFan (2004-10-28 13:49:00) [1]да
117783910
кстати... а почему
> VT.NodeDataSize := SizeOf(PGridData);
SizeOf(указатель на ...) = 4 !!!
MadDig (2004-10-28 13:18:00) [2]to MetalFan
у тебя есть аська?
MadDig (2004-10-28 12:58:00) [3]полмоему понял
забыл еще о
VT.NodeDataSize := SizeOf(PGridData);
было
VT.NodeDataSize := SizeOf(NodeData)
хотя проблема решилась зато новые глюки пошли
MadDig (2004-10-28 12:52:00) [4]выкинул Data, таже проблема
var
Node:PVirtualNode;
Pdata:PGridData;
begin
with vt do begin
node:=AddChild(nil,nil);
node.CheckType:=LevelToCheckType[RadioGroup1.ItemIndex];
Pdata:=GetNodeData(Node);
Pdata.Value[0]:='';//inttostr(node.Index)+' '+inttostr(VT.GetNodeLevel(node));
Pdata.ValueType[0]:=vtString;
Pdata.ValueType[1]:=LevelToValueType[RadioGroup2.ItemIndex];
Pdata.Value[1]:=DefEdit.text;
if Pdata.ValueType[1] = vtPickString then begin
Pdata.cItems:=DefMemo.Lines;
end;
EditNode(node,0);
end;
MetalFan (2004-10-28 12:43:00) [5]слишком мало информации...
мне вот чего не ясно:
GetNodeData
возвращает указатель на "связанную" с нодом память.
а ты сначала с ней работаешь, как с NodeData, а потом, как с PGridData...
MadDig (2004-10-28 12:24:00) [6]только что убрал вобще Data теже проблемы
MadDig (2004-10-28 12:19:00) [7]Data это мой дополнительный тип
Pdata взято с Editors.pas
Ошибка явно не из-за этого визде все работает нормально кроме если нода одна, даже если она одна и завершаешь редактирование не энтером а мышкой например (потеря фокуса эдитора для ноды) все тоже нормально
MetalFan (2004-10-28 12:08:00) [8]
> node.CheckType:=LevelToCheckType[RadioGroup1.ItemIndex];
> data:=GetNodeData(Node);> Data.ImageIndex:=0;
> data.Text2:='Äàòà';
> Pdata:=GetNodeData(Node);
> Pdata.Value[0]:='';//inttostr(node.Index)+' '+inttostr(VT.GetNodeLevel(node));
меня интересует выделенный жирным код...
что то ооочень оно странно...