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/)
-   -   Delphi Listview -> checked? (https://www.delphipraxis.net/9092-listview-checked.html)

Jazz 18. Sep 2003 01:44


Listview -> checked?
 
Hallo,
wie kann ich ein event auslösen wenn ich in einer Listview bei einem Kontrollkästchen einen Haken setzte?

Marco Haffner 18. Sep 2003 04:01

Re: Listview -> checked
 
Siehe dazu folgenden SwissDelphiCenter Beitrag:
...einen Klick auf die CheckBox einer TListView abfangen und behandeln?

Jazz 18. Sep 2003 12:10

Re: Listview -> checked
 
Danke genau sowas habe ich gesucht... :wink: :dancer:
Delphi-Quellcode:
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Item: TListItem;
  HitTest: THitTests;
begin
  // Welchem Item gehört die CheckBox
  // Which item belongs to the checkbox
  Item := ListView1.GetItemAt(x, y);

  // Was wurde vom Item genau angeklickt
  // What kind of thing was hit on the item
  HitTest := ListView1.GetHitTestInfoAt(x, y);

  // Falls ein Item angeklickt wurde und davon die Checkbox
  // If an Item was hit and exactly his checkbox
  if (Item <> nil) and (HitTest = [htOnStateIcon]) then
  begin
    ////////////////////////////////
    // Hier das OnCheck behandeln //
    // Handle OnCheck here       //
    ////////////////////////////////
    // Beispiel
    // Example
    //
      if Item.Checked = true then
      begin
        Button1.Enabled := true;
      end else
      begin
        Button1.Enabled := false;
      end;
  end;
end;
Nur jetzt weiß ich nicht wie ich überprüfen kann dass mindestens eine Checkbox aktiviert ist oder keine.

Illuminator-23-5 18. Sep 2003 13:17

Re: Listview -> checked?
 
Delphi-Quellcode:
function isCheckedItem: boolean;
var
  i: integer;
begin
  result := false;
  for i := 0 to listview1.Items.Count - 1 do
    result := result or Listview1.Items[i].Checked;
end;
das ist die primitivste methode. ich weiß nicht, ob diese Funktion schon irgendwo implementiert ist...

sakura 18. Sep 2003 13:19

Re: Listview -> checked?
 
Lasst uns die primitivste Methode noch ein wenig optimieren :mrgreen:
Delphi-Quellcode:
function isCheckedItem: boolean;
var
  i: integer;
begin
  for i := 0 to listview1.Items.Count - 1 do
    if Listview1.Items[i].Checked then
    begin
      result := true;
      exit;
    end;
  result := false;
end;
...:cat:...

Jazz 18. Sep 2003 15:02

Re: Listview -> checked?
 
Danke vielmals. :dancer2:

dopeline 17. Feb 2004 16:18

Re: Listview -> checked?
 
ich habe da ein problem:

ich lasse nach jedem markieren/demarkieren eines eintrages die anzahl der insgesamt gecheckten items durchzählen und in der statusbar anzeigen:
Delphi-Quellcode:
function AnzahlCheckedItems: integer; // gibt die anzahl der insgesamt gecheckten items zurück
var
  i,wert: integer;
begin
wert:=0;
  for i := 0 to FormVersetzung.listview1.Items.Count - 1 do
    if FormVersetzung.Listview1.Items[i].Checked then
     inc(wert)  //erhöht den wert um 1
    else
     dec(wert); //verringert den wert um 1
  result := wert; //gibt den wert zurück (anzahl aller gecheckten items
end;

procedure TFormVersetzung.ListView1MouseUp(Sender: TObject; // Die prozedur vom SwissDelphiCenter
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Item: TListItem;
  HitTest: THitTests;
  i:integer;
begin
 Item := ListView1.GetItemAt(x, y);  // Welchem Item gehört die CheckBox
 HitTest := ListView1.GetHitTestInfoAt(x, y); // Was wurde vom Item genau angeklickt
 if (Item <> nil) and (HitTest = [htOnStateIcon]) then  // Falls ein Item angeklickt wurde und davon die Checkbox
  begin
   StatusBar1.Panels[1].Text:= 'Selektiert: ' + IntToStr(AnzahlCheckedItems);  // ermittelt über die funktion die azahl und schreibt diese in die statusbar
  end;
end;
im OnFormShow werden die Items hinzugefügt und alle gechecked. (mittels der funktion wird die anzahl in der statusbar ausgegeben).
ich habe also z.b. 10 items in dem listview und in der bar steht auch 10.
soweit funktioniert ja auch alles! aber wenn ich jetzt bei einem item den haken wegnehme, wird der wert in der statusbar um 2 verringert (nicht aber um 1 , wie es eigentlich sein sollte!). beim setzen eines hakens wird die zahl um 2 erhöht! woran liegt das?


Gruß, dopeline


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 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