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 TListView ind das selektieren (https://www.delphipraxis.net/117359-tlistview-ind-das-selektieren.html)

Anthauri 16. Jul 2008 16:39


TListView ind das selektieren
 
Hallo zusammen,
ich habe ein Programm, das u.a. eine TListView enthält, bei der die Checkboxes aktiviert (also nutzbar) sind.

Ich möchte nun darauf reagieren wenn der Anwender in einer Zeile den Inhalt der Checkbox ändert. Ich habe leider nur noch nicht gefunden wie.

Ich möchte nämlich, dass im Moment der Aktivierung der Checkbox besondere Schritte durchlaufen werden (und bei der Deaktivierung andere), die die Inhalte der zugehörigen Items verändern.

Kann jemand helfen?

marius0702 16. Jul 2008 16:47

Re: TListView ind das selektieren
 
Delphi-Quellcode:
procedure TForm1.CheckBoxMultiClick(Sender: TObject);
begin
  Case (Sender as TCheckBox).Tag of
    0: if CheckBox1.Checked then Listview1.items[0]:='Bla Bla';
    1: if CheckBox2.Checked then ...;
    2: if CheckBox3.Checked then ...;
    3: if CheckBox4.Checked then ...;
    4: if CheckBox5.Checked then ...;
    5: if CheckBox6.Checked then ...;
    6: if CheckBox7.Checked then ...;
    7: if CheckBox8.Checked then ...;
  end;
end;
Meinst du so?

geskill 16. Jul 2008 16:51

Re: TListView ind das selektieren
 
Wenn ich das richtig verstehe:
TListView.OnChange

marius0702 16. Jul 2008 16:55

Re: TListView ind das selektieren
 
Nein bei allen checkbox componenten bei onclick oder onchange.

Helmi 16. Jul 2008 17:08

Re: TListView ind das selektieren
 
die Shweizer sind zwar langsam, haben aber einen Tip für dein Problem dafür!

toms 16. Jul 2008 17:09

Re: TListView ind das selektieren
 
Hallo,

Oder du machst du Überprüfung im OnMouseUp der TListView.


Delphi-Quellcode:
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Item: TListItem;
  HitTest: THitTests;
begin
  with TListView(Sender) do
  begin
    Item := GetItemAt(x, y); // Item an Mausepos. ermitteln
    if Assigned(Item) then
    begin
      HitTest := GetHitTestInfoAt(x, y);
      if (HitTest = [htOnStateIcon]) then // Test ob Click auf Checkbox erfolgt ist
      begin
        if Item.Checked = True then // falls angeclickt
        begin
          // Checkbox angeclickt, mache etwas
        end;
      end;
    end;
  end;
end;

littleDave 16. Jul 2008 17:12

Re: TListView ind das selektieren
 
Zitat:

Zitat von marius0702
Nein bei allen checkbox componenten bei onclick oder onchange.

Die ListView-CheckBoxes sind aber keine TCheckBox-Komponenten ... :zwinker:. In der ListView geht auch OnChange.

[OT]
Zitat:

Zitat von marius0702
Delphi-Quellcode:
procedure TForm1.CheckBoxMultiClick(Sender: TObject);
begin
  Case (Sender as TCheckBox).Tag of
    0: if CheckBox1.Checked then Listview1.items[0]:='Bla Bla';
    1: if CheckBox2.Checked then ...;
    2: if CheckBox3.Checked then ...;
    3: if CheckBox4.Checked then ...;
    4: if CheckBox5.Checked then ...;
    5: if CheckBox6.Checked then ...;
    6: if CheckBox7.Checked then ...;
    7: if CheckBox8.Checked then ...;
  end;
end;

:shock: Warum der gigantische Umweg :shock:
Delphi-Quellcode:
procedure TForm1.CheckBoxMultiClick(Sender: TObject);
var cb: TCheckBox;
begin
  if not (Sender is TCheckBox) then
     raise Exception.Create('Ich bin ein Fehler');
  cb := TCheckBox(Sender);
  ListView1.Items[cb.Tag].Caption := BoolToStr(cb.Checked), True);
end;
[/OT]

Anthauri 16. Jul 2008 17:20

Re: TListView ind das selektieren
 
Vielen Dank für die schnellen Antworten.

Die Variante mit den vielen IF's kann ich nicht anwenden, da die Anzahl der Zeilen in der Liste dynamsich zwischen 0 und 999999 liegt.
(das wären ziemlich viele IF's)

Das OnChange abzufragen geht glaube ich auch nicht, weil das auch dann ausgelöst wird, wenn sich etwas anderes in der Zeile ändert als der Inhalt der Checkbox

Das mit dem MouseUp werde ich mir ansehen. Dann muß ich nur noch beachten, dass die Checkbox auch per Tastatur verändert werden kann (Space) - aber da kann ja das KeyPress oder KeyDown benutzt werden.


Den Befehl mit dem Hittest kannte ich bisher noch nicht...man lernt halt nie aus....

cs.rumpelstilzchen 28. Okt 2008 15:39

Re: TListView ind das selektieren
 
Hallo Anthauri,
weiss nicht, ob du das Problem schon gelöst hast,
ich habe das über das OnChange-Ereignis der ListView gemacht:

Delphi-Quellcode:
procedure Testwindow.LvChange(Sender: TObject;
  Item: TListItem; Change: TItemChange);
begin
  if Change = ctState then
    if Item.Checked then....
end;
Ich hoffe, ich habe dein Problem richtig verstanden und konnte helfen...

So long
Jürgen


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