Delphi-PRAXiS

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)

himitsu 2. Nov 2006 15:05


VirtualTreeView - Checkbox disablen
 
In der VirtualTreeView kann man sich doch solch nette CheckBoxen einblenden lassen, nun soll aber nicht immer der Wert (dat Häckchen) verändert werden können und dieses (die Nichtänderbarkeit) soll auch sichtbar sein.

Leider konnte ich aber keine Möglichkeit finden eine disablete Checkbox dort anzeigen zu lassen.

Derzeit hab ich mir dafür den angeklicken Unchecked-State mißbraucht und das Ändern intern unterbunten, aber eine richtig disablete Box gefiehle mir dennoch besser.


Falls da jemand zufällig 'nen Rat weiß .... biette melden.


Es geht mir aktuell um die Dateiliste dieses Programms: kleines Backup-/Abgleichsproggie

marabu 2. Nov 2006 16:24

Re: VirtualTreeView - Checkbox disablen
 
Hallo Frank,

ich kann es gerade nicht ausprobieren, aber genügt nicht schon das Hinzufügen von vsDisabled zur Eigenschaft States des Knoten?

Grüße vom marabu

himitsu 2. Nov 2006 16:35

Re: VirtualTreeView - Checkbox disablen
 
hmmm, ausprobiert hab ich das zwar noch nicht (werd's dann dennoch mal versuchen),

aber wenn das dann den gesamten Eintrag disabled, dann wäre es nicht so gut ... die Schrift sollte sich zumindestens nicht mit ändern und die Popups müssen auch noch anklickbar sein (darum hab ich ja bisher auch nur zur Checkbox was gesucht).

DP-Maintenance 2. Nov 2006 16:47

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Geht um Komponenten

himitsu 3. Nov 2006 12:18

Re: VirtualTreeView - Checkbox disablen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, wie ich nun bemerkte, hatte ich es doch schonmal mit Disabled versucht, allerdings lief dann garnichts mehr.

Sobald ich es versuche, kommt ein netter Fehler: :wall:
Und daß da der Fehler bei mir liegen könnte kann ich auch behaupten.
Hab ja nur eine ImageList angegeben und rücke über OnGetImageIndex den entsprechenden ImageIndex raus.

generic 3. Nov 2006 15:34

Re: VirtualTreeView - Checkbox disablen
 
Delphi-Quellcode:
var
  node: PVirtualNode;
begin
  node:=VirtualStringTree1.AddChild(nil);
  VirtualStringTree1.CheckType[node]:=ctCheckBox;
  VirtualStringTree1.IsDisabled[node]:=true;
end;
kann keine probleme feststellen.

imho sollte man es vermeiden die states direkt zu verändern.
aber besten immer über die passenden properties verändern.

himitsu 6. Nov 2006 11:30

Re: VirtualTreeView - Checkbox disablen
 
Ich versuch's mal so.

Derzeit ändere ich ja erstmal alles direkt im Node und sage dann dem VST daß es Änderungen gab ... eigenlich sollte es so doch auch gehen :grübel:

himitsu 7. Nov 2006 12:22

Re: VirtualTreeView - Checkbox disablen
 
Also, ich hab es jetut nochmal mit dem Disabled versucht, allerdings dabei mal keine Bilder eingeblendet, also onGetImageIndex unbearbeitet (ohne ImageIndex-Zuweisung) übergangen.

Und schon tritt der Fehler nicht mehr auf.
Es demnach wohl liegt an den Bildern. :gruebel:

Ich hab es auch schon mit verschiedenen vormaten versucht 4-Bit, 256-farbig und TrueColor ... keine Änderung.


@generic: hattes du da auch Bilder mit drin?

himitsu 21. Nov 2006 18:53

Re: VirtualTreeView - Checkbox disablen
 
Liste der Anhänge anzeigen (Anzahl: 3)
So, nichtmal in 'nem einfachen Test läuft es :cry:
(siehe Anhang)

Inzwichen weiß ich, daß die Variable Images (siehe markierte Fehlerzeile im Bild) NIL ist und demnach auch nichts zugewiesen werden kann.
Was nicht existiert, kann auch nicht genutzt werden ...



Delphi-Quellcode:
TBaseVirtualTree.PaintImage(var PaintInfo: TVTPaintInfo; ...
  PaintInfo.ImageInfo[iiOverlay].Images = nil

himitsu 28. Dez 2006 13:24

Re: VirtualTreeView - Checkbox disablen
 
*push* (und wehe einer meckert :stupid: )

Ich hab halt immernoch keine Lösung, also wenn wer was weiß....

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.

haentschman 20. Feb 2016 17:07

AW: VirtualTreeView - Checkbox disablen
 
Zitat:

Hatte ich ja auch schon vorgeschlagen.
...das kommt davon wenn man nur überfliegt. :roll: Die letzten "Übersichtsbilder" der Knoten sahen eben nicht danach aus. Ich leg mich dann mal wieder hin. 8-)

Jens Hartmann 20. Feb 2016 20:43

AW: VirtualTreeView - Checkbox disablen
 
Ne, so is auch nicht. Ich könnte die Icons schon umbauen. Fand es mur mit den Checkboxen ganz amüsant. Ich werde mal ein wenig basteln.

Danke schon mal...

Schönen Abend noch und Gruß Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 Uhr.

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