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
Benutzerbild von Jasocul
Jasocul

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

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.375 Beiträge
 
Delphi 11 Alexandria
 
#3

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
503 Beiträge
 
Delphi 5 Enterprise
 
#4

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.375 Beiträge
 
Delphi 11 Alexandria
 
#5

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
355 Beiträge
 
Delphi 12 Athens
 
#6

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
tomkupitz

Registriert seit: 26. Jan 2011
355 Beiträge
 
Delphi 12 Athens
 
#7

AW: TListView - aktivieren einiger Checkboxen verhindern

  Alt 26. Sep 2019, 12:57
In Delphi 5 das probieren:

Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  with ListView1.Items.Add do
    Caption:='abcdefg';
end;

var ures1, ures2: Integer;

procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem; Change: TItemChange; var AllowChange: Boolean);
var i: Integer;

begin
  if Change=ctState then
  begin
    ures1:=SendMessage(ListView1.Handle, LVM_GETITEMSTATE, i, LVIS_STATEIMAGEMASK);
  end;
end;

procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange);
var i: Integer;

begin
  if Change=ctState then
  begin
    ures2:=SendMessage(ListView1.Handle, LVM_GETITEMSTATE, i, LVIS_STATEIMAGEMASK);

    if ((ures1 and LVIS_STATEIMAGEMASK) shr 12) <> ((ures2 and LVIS_STATEIMAGEMASK) shr 12) then
      if Item.Index=0 then
        Item.Checked:=False;
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz