AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TListView - aktivieren einiger Checkboxen verhindern

Ein Thema von Marco Steinebach · begonnen am 24. Sep 2019 · letzter Beitrag vom 27. Sep 2019
Antwort Antwort
Seite 1 von 2  1 2      
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#1

TListView - aktivieren einiger Checkboxen verhindern

  Alt 24. Sep 2019, 08:43
Hallo zusammen,
ich habe eine TListView, bei der der Nutzer die Möglichkeit hat, verschiedene Elemente mittels Checkboxen auszuwählen.
Mein Problem ist, dass es einige Elemente gibt, die der User nicht auswählen können soll, er soll sie aber trotzdem sehen.
Zu Deutsch: mein Prog hat verschiedene Module, und je nachdem, welche freigeschaltet sind, kann er sie anwählen oder nicht, soll aber die anderen, die es nohc gibt, sehen.
Ich finde nix, wo ich das einstellen kann, denn onChange und onChaninging nützen mir hier nix.

Für Antworten wäre ich sehr dankbar.

Herzliche Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 24. Sep 2019, 08:54
Ich finde nix, wo ich das einstellen kann, denn onChange und onChaninging nützen mir hier nix.
Ich habe kein Delphi 5, aber im OnChanging kann man doch AllowChange in dem Fall auf False setzen. Oder gibt es den Parameter nicht in Delphi 5?
Ansonsten wäre es interessant zu wissen, warum du es nicht nutzen kannst.
Peter
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#3

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 24. Sep 2019, 09:45
Hallo,
Joa, onChanging hat brav allowChange.
Ich habe schon mit ctState rumgespielt, aber wenn ich auf
Code:
  if Change = ctState then
prüfe, wird das Event zwar für jedes select aufgerufen, aber nicht, wenn ich den Status einer Checkbox ändere - entweder, hab ich murx programmiert, oder was übersehen...

Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 24. Sep 2019, 10:11
Ich habe das gerade mal getestet.
ctState scheint auch gesetzt zu werden, wenn das Item selektiert wird. Das hat also nicht zwingend etwas mit der CheckBox zu tun.

Ich denke, das OnChanging ist für deinen Fall die richtige Wahl, aber die Bedingung muss verfeinert/geändert werden. Wenn du an den Items Daten (Data) hinterlegt hast, solltest du das zum Prüfen verwenden. Die Caption wäre auch noch eine Alternative.
Peter
  Mit Zitat antworten Zitat
Alt 25. Sep 2019, 04:28     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#5

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 25. Sep 2019, 11:12
Hallo Frühlingsrolle,
dein Code sieht ähnlich aus wie meiner, ich bin nur nicht auf's item.listview.checkboxes gekommen.
Aaaber
Ich kriege eine Windows-Schutzverletzung, und hab keine Ahnung warum, beim
Code:
  item.checked := false
Ich hab natürlich geschaut, Item ist nicht nil, also keine Idee, undzweitens wird das Event, gefühlt, 20 mal aufgerufen, wenn man die Liste durchläuft.
Ich hab den Code, nur zum Testen, mal abgewandelt:
Code:
procedure TAnwendereigenschaftenFormular.liModuleChanging(Sender: TObject;
  Item: TListItem; Change: TItemChange; var AllowChange: Boolean);
begin
  if (change = ctState) and item.listview.checkboxes then
  begin
    if item.index = 3 then // wie gesagt, nur zum testen...
    begin
      item.checked := false; // und genau hier knallt's
      allowChange := false;
       infobox ('onChanging!'); // nur 'ne verkapsele MsgBox
      end;
  end;
end;
Mir ist nicht klar, woher die Schutzverletzung kommt, und die kommt jedesmal, wenn ich die Liste durchwander...
Vielleicht hat ja noch jemand 'ne idee...

Herzliche Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 25. Sep 2019, 11:25
Wenn du die Zeile, in der es knallt, weglässt, sollte es schon funktionieren.
Du setzt AllowChange ja auch auf false. Das bewirkt schon, dass die CheckBox nicht verändert wird.

Und natürlich wird das Event zig mal ausgelöst, weil du die CheckBox innerhalb der Methode änderst. Das löst das Event jedes mal wieder aus. Das dürfte auch der Grund für deine Schutzverletzung sein.
Peter

Geändert von Jasocul (25. Sep 2019 um 11:27 Uhr)
  Mit Zitat antworten Zitat
Alt 25. Sep 2019, 13:28     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 25. Sep 2019, 13:53
Ohne das zu testen, behaupte ich einfach mal:
Das Event triggert durch die überflüssige Zeile immer wieder, bis zum Stack-Overflow.
Peter
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#8

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 26. Sep 2019, 09:57
Hallo zusammen,
@Frühlingsrolle: doch, die Schutzverletzung kommt genau daher, dass im Event das Event aufgerufen wird, usw., wie Jasocul schon gesagt hat.
@Jasocul: brauchst nicht testen, funktioniert.
Problem ist, dass man jetzt zwar die Checkbox beim x-ten Element nicht mehr aktivieren kann, man kann es aber auch nicht mehr anwählen, sprich, focused auf true setzen. Das muß ich aber, da ich die Liste mit Screenreader auslese (Sprachausgabe für blinde).
Der Effekt soll sein, dass man zwar Elemente selektieren kann, aber eben nicht die Checkbox aktivieren.
Irgend'ne Idee dazu?
Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 26. Sep 2019, 10:02
Deine Prüfung auf Change = ctState verhindert, dass der Eintrag selektiert werden kann.
Bei Änderung auf Selected, wird auch ctState gesetzt.

Wenn diese Prüfung rausnimmst, sollte es funktionieren.
Peter
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
320 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 26. Sep 2019, 12:25
So...

Code:
procedure TForm.ListView1ItemChecked(Sender: TObject; Item: TListItem);
begin
  if Item.Index=0 then
    Item.Checked:=False;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 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