Witam
Napotkałem dość nietypowy problem. Uważam, że poprawnie zdefiniowałem odwołania do pól wyboru VST, a mimo tego możliwość zaznaczenia tych pól aktywuje się dopiero za 3-4 razem, gdy dodaje kolejne pozycje.
Proszę o pomoc, gdyż spodobał mi się ten komponent. Specjalnie porzuciłem i nie chce już wracać do TListView :)
W załączniku DEMO: (kopia: http://www.przeklej.pl/plik/demovst-zip-002bfg44t7tb )
- Po uruchomieniu wczytana jest lista dysków logicznych (pola nie dają się zaznaczyć).
- Należy kliknąć "Dodaj dyski ponownie" ze 3-4x aby te pola o dziwo się aktywowały.
Krótki opis
//Dodanie nowej pozycji
function DodajDoVST(CVST: TCustomVirtualStringTree; ANode: PVirtualNode; ARecord: TTreeDataDyski): PVirtualNode;
var
Data: PTreeDataDyski;
begin
Result := CVST.AddChild(ANode);
Data := CVST.GetNodeData(Result);
if ARecord.FZaznacz then Result^.CheckState := csCheckedNormal
else Result^.CheckState := csUnCheckedNormal;
CVST.ValidateNode(Result, False);
Data^.FZaznacz := ARecord.FZaznacz;
Data^.FIkona := ARecord.FIkona;
Data^.FCaption := ARecord.FCaption;
end;
var
Data: TTreeDataDyski;
begin
VST.BeginUpdate;
Data.FZaznacz := False;
Data.FIkona := 0;
Data.FCaption := 'A:\';
DodajDoVST(VST, nil, Data);
VST.EndUpdate;
end;
//Reakcja na zmianę zaznaczenia pola i przypisanie do rekordu
procedure TFormDyski.VSTChecking(Sender: TBaseVirtualTree;
Node: PVirtualNode; var NewState: TCheckState; var Allowed: Boolean);
var
Data: PTreeDataDyski;
begin
Data := VST.GetNodeData(Node);
if NewState = csCheckedNormal then Data^.FZaznacz := True
else
if NewState = csUnCheckedNormal then Data^.FZaznacz := False;
end;
//Inicjacja pól wyboru
procedure TFormDyski.VSTInitNode(Sender: TBaseVirtualTree;
ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
begin
VST.CheckType[Node] := ctCheckBox;
end;
//FormCreate
VST.NodeDataSize := SizeOf(TTreeDataDyski);
Próbowałem po dodaniu nowej pozycji następujących poleceń:
VST.Update;
VST.Refresh;
VST.ValidateNode(Node, True {False});
Włączone są następujące opcje:
TreeOptions.MiscOptions := [toCheckSupport,toInitOnSave,toReportMode,toToggleOnDblClick,toWheelPanning];
Column[0].CheckBox := True;
Column[0].CheckState := csCheckedNormal;
Column[0].CheckType := ctCheckBox;
Nie mam zielonego pojęcia co tu jest źle.