Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   VirtualTreeView - Checkbox disablen (https://www.delphipraxis.net/80076-virtualtreeview-checkbox-disablen.html)

Jens Hartmann 19. Feb 2016 21:23

AW: VirtualTreeView - Checkbox disablen
 
Hallo zusammen,

hat hier jemand schon eine Lösung gefunden. Ich würde die Checkboxen gerne nur als Status Information verwenden. Soll heißen, ich will wissen, ob weiter unten im Baum, schon eine Bearbeitung erfolgt ist. Daher soll über den Click auf die Checkbox keine Änderung erfolgen.

Gruß Jens

Aviator 19. Feb 2016 21:59

AW: VirtualTreeView - Checkbox disablen
 
In diesem Fall würde ich einfach das OnChecking Event implementieren und den Parameter
Delphi-Quellcode:
Allowed
(immer) auf
Delphi-Quellcode:
false
stellen.

Delphi-Quellcode:
procedure TfrmMain.vstChecking(Sender: TBaseVirtualTree; Node: PVirtualNode; var NewState: TCheckState;
  var Allowed: Boolean);
begin
  Allowed := False;
end;

Jens Hartmann 20. Feb 2016 08:27

AW: VirtualTreeView - Checkbox disablen
 
Das ist richtig, aber dann kann ich den Checkstate auch nicht mehr setzen... Ich will ja nur das OnClick verhindern.

Sir Rufo 20. Feb 2016 08:39

AW: VirtualTreeView - Checkbox disablen
 
Brauchst du den CheckState für die Anzeige oder nur als internen Status?

Aviator 20. Feb 2016 10:50

AW: VirtualTreeView - Checkbox disablen
 
Zitat:

Zitat von Jens Hartmann (Beitrag 1330850)
Das ist richtig, aber dann kann ich den Checkstate auch nicht mehr setzen... Ich will ja nur das OnClick verhindern.

Leider verstehe ich deine Aussage gerade nicht. Könntest du da etwas genauer werden? Zum einem willst du das die Checkbox disabled ist, auf der anderen Seite soll dann aber ein CheckState gesetzt werden. Ich habe es jetzt nicht ausprobiert, aber wird das OnChecking Event auch ausgelöst, wenn man per Quellcode
Delphi-Quellcode:
vst.IsChecked[Node] := true;
setzt? Das habe ich leider im Moment nicht im Kopf. Wenn dem so wäre, dann könntest du natürlich über einen Zwischenweg arbeiten und dir eine Variable setzen die auf
Delphi-Quellcode:
true
steht wenn du aus dem Programm heraus den CheckState der Node verändern willst, aber auf
Delphi-Quellcode:
false
ist, wenn der Benutzer eine Aktion ausführt. Und die Variable wird dann im OnChecking Event geprüft.

Jens Hartmann 20. Feb 2016 12:38

AW: VirtualTreeView - Checkbox disablen
 
Eigendlich ganz einfach.

Am besten wäre hier vermutlich die TriStateCheckBox. Auf Node_Level 2 habe ich einen Eingabemaske hinterlegt. In dieser Oberfläche kann man ein Datum einstellen. Wenn das eingestellte Datum "älter" als 3 Monate ist, soll der CheckState = false sein. Wir die Bearbeitung dann durch geführt und das Datum aktualisiert, wird der CheckState wieder true. Somit möchte ich im obersten Node_Level die Erforderlichkeit der Bearbeitung anzeigen. Der CheckState darf sich aber nicht durch das Klicken auf die Checkbox verändern, sondern soll abhängig vom Datim sein.

Ich habe einen Baum:
Code:
//Keine Bearbeitung erforderlich
[x] Node_0
  [x] Node_1
    [x] Node_2a
    [x] Node_2b
    [x] Node_2c
Code:
//Bearbeitung erforderlich
[#] Node_0
  [#] Node_1
    [ ] Node_2a
    [x] Node_2b
    [ ] Node_2c
Code:
//Bearbeitung erforderlich
[ ] Node_0
  [ ] Node_1
    [ ] Node_2a
    [ ] Node_2b
    [ ] Node_2c

Aviator 20. Feb 2016 13:00

AW: VirtualTreeView - Checkbox disablen
 
Ahh alles klar. Das Problem hierbei ist allerdings, dass sobald die CheckBox als TriStateCheckBox gesetzt wird, sich der Tree selbst um den CheckState kümmert. Das kann man meines Wissens nach nicht umgehen und ich würde sagen, dass ich den Tree doch sehr gut kenne (aber ich lasse mich auch gern eines besseren belehren). In diesem Fall könntest du mit einfachen Images in Column 0 arbeiten. Da wäre es dann allerdings erforderlich, dass du in NodeLevel 0 und 1 entsprechend alle Children überprüfst. Und solltest du auf dieser Lösung dein Programm aufbauen, dann würde ich auch nicht mehr die Daten aus dem Tree sondern aus einer eigenen Klasse auslesen und dann entsprechend den State setzen.

Jens Hartmann 20. Feb 2016 13:17

AW: VirtualTreeView - Checkbox disablen
 
Die Daten sind in einem Objekt. Allerdings nutzen ich die Icons schon und es wäre daher schade, wenn ich diese anpassen bzw. ändern müsste...

Es kann ja auch eine Normale Checkbox sein. Dann würde das ganze ja so aus sehen...



Code:
//Keine Bearbeitung erforderlich
[x] Node_0
  [x] Node_1
    [x] Node_2a
    [x] Node_2b
    [x] Node_2c

Code:
//Bearbeitung erforderlich
[x] Node_0
  [x] Node_1
    [ ] Node_2a
    [x] Node_2b
    [ ] Node_2c
Code:
//Bearbeitung erforderlich
[ ] Node_0
  [ ] Node_1
    [ ] Node_2a
    [ ] Node_2b
    [ ] Node_2c

haentschman 20. Feb 2016 17:00

AW: VirtualTreeView - Checkbox disablen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöle...:P

Was spricht gegen Icons statt der Checkboxen? Schöne Bildchen die den Status deines Objektes (am Node hängend) anzeigen...von mir aus in Ampelfarben. :thumb: Da hast du die Checkbox komplett aus dem Kreuz.

Aviator 20. Feb 2016 17:05

AW: VirtualTreeView - Checkbox disablen
 
Zitat:

Zitat von haentschman (Beitrag 1330885)
Hallöle...:P

Was spricht gegen Icons statt der Checkboxen? Schöne Bildchen die den Status deines Objektes (am Node hängend) anzeigen...von mir aus in Ampelfarben. :thumb: Da hast du die Checkbox komplett aus dem Kreuz.

Das Problem ist, dass er die Images schon für andere Zwecke benutzt. Hatte ich ja auch schon vorgeschlagen. Siehe letzter Post von mir.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:55 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz