[Delphi]Checkbox treeview uitlezen

Pagina: 1
Acties:

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
Hey,

na een redelijk uitgebreide zoektocht op google, google groups, MSDN en hier (GoT) ben ik eindelijk zover dat ik checkboxen kan toevoegen aan een treeview, door middel van de volgende code:
Delphi:
1
2
  SetWindowLong(TreeviewNaam.Handle, GWL_STYLE,
    GetWindowLong(TreeviewNaam.Handle, GWL_STYLE) OR $0100);


Nou krijg ik het alleen voor geen meter voor elkaar om de status van die checkboxen aan te passen/uit te lezen. Heeft iemand van jullie hier ervaring mee of een oplossing voor?

My personal website


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Wat weerhoudt je om een VirtualTree te gebruiken? Daar kun je veel meer in doen dan alleen checkboxen. En wat jij post lijkt me echt een of andere smerige hack (anders was er wel een nette constante voor, denk je niet?)

VirtualTree kun je hier halen.

Let wel dat ie een andere denkwijze vereist dan je gewend bent, maar als je em doorhebt, werkt ie echt ge-wel-dig :)

日本!🎌


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
Het lijkt inderdaad op een of andere smerige hack, maar de TreeView zoals die VB gebruikt wordt heeft als property..... 'Checkboxes' van het type boolean. Die haalt hij uit dezelfde file als Delphi (Common controls) maar die heeft dus WEL checkboxes. Van MS uit werkt het dus 'gewoon'. Er was ook een nette variabele voor, maar die was niet bekend binnen Delphi, vandaar dat ik de $0100 ervoor in de plaats heb gezet. Ik had geen zin om de constante aan te maken of op te zoeken.

Verder: dank voor de link, ik zal er zeker eens naar kijken!

My personal website


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const
  IIL_UNCHECKED = 1;
  IIL_CHECKED = 2;

procedure TDynTreeNode.SetChecked(const Value: Boolean);
var
  Item:TTvItem;
begin
  if Checked=Value then Exit; // Must not be FChecked=Value

  FChecked:=Value;
  Item.hItem := ItemId;
  Item.Mask := TVIF_STATE;
  Item.StateMask := TVIS_STATEIMAGEMASK;
  if not TreeView_GetItem(Handle, Item) then Exit;

  if FChecked then
    Item.State:=INDEXTOSTATEIMAGEMASK(IIL_CHECKED)
  else
    Item.State:=INDEXTOSTATEIMAGEMASK(IIL_UNCHECKED);
  TreeView_SetItem(Handle, Item);
end;

function TDynTreeNode.GetChecked: Boolean;
var
  Item:TTvItem;
begin
  Item.hItem := ItemId;
  Item.Mask := TVIF_STATE;
  Item.StateMask := TVIS_STATEIMAGEMASK;
  if not TreeView_GetItem(Handle, Item) then Exit;
  Result:=((Item.State and INDEXTOSTATEIMAGEMASK(IIL_CHECKED))=INDEXTOSTATEIMAGEMASK(IIL_CHECKED));
end;


Zoals je ziet wordt gewoon de State gebruikt.

We adore chaos because we like to restore order - M.C. Escher


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
LordLarry: you rock!! _/-\o_

Je hebt mee een heel eind op weg geholpen met de stukken code die je hierboven hebt gepost. Ik heb er een paar kleine aanpassinkjes aan gemaakt en het werkt als een zonnetje! Volgens mij kan ik hier best een componentje mee maken, want op internet zijn er veel mensen die op zoek zijn naar deze, als je het weet simpele, uitbreiding.

De aanpassingen die ik gedaan heb:

HTREEITEM en een handle meegeven bij de get
die twee plus een value meegeven bij de set
FChecked vervangen door Value (was volgens mij een variabele, niet nodig)
if Checked=Value vervangen door if GetChecked(hitem, handle) = value

Dat was eigenlijk alles: gas erop en gaan met die handel!! (af handle, net wat je wil... ;))

My personal website


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Dat Borland een feature van een common control (nog) niet geencapsuleerd heeft betekent niet per definitie dat het een hack of zo is: ze hebben zoveel (nog) niet in VCL opgenomen, en daarvoor bestaan juist properties als Handle zodat je het met de hand alsnog kunt doen. Voor recente info over wat een TreeView in Win32 allemaal kan zie hier.

Professionele website nodig?

Pagina: 1