Pola wyboru VirtualStringTree nie reagują na klikanie

Odpowiedz Nowy wątek
2011-07-15 20:22
Opi
0

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 )

  1. Po uruchomieniu wczytana jest lista dysków logicznych (pola nie dają się zaznaczyć).
  2. Należy kliknąć "Dodaj dyski ponownie" ze 3-4x aby te pola o dziwo się aktywowały.

user image

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.

edytowany 1x, ostatnio: Opi, 2011-07-15 20:25

Pozostało 580 znaków

2011-07-16 12:55

zdejmij coFixed z drugiej kolumny :)


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-07-16 18:31
Opi
0

Nie zawiodłem się.... Stokrotne dzięki Misiekd :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0