![]() |
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? |
Re: TListView ind das selektieren
Delphi-Quellcode:
Meinst du so?
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; |
Re: TListView ind das selektieren
Wenn ich das richtig verstehe:
TListView.OnChange |
Re: TListView ind das selektieren
Nein bei allen checkbox componenten bei onclick oder onchange.
|
Re: TListView ind das selektieren
die Shweizer sind zwar langsam, haben aber einen
![]() |
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; |
Re: TListView ind das selektieren
Zitat:
[OT] Zitat:
Delphi-Quellcode:
[/OT]
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; |
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.... |
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:
Ich hoffe, ich habe dein Problem richtig verstanden und konnte helfen...
procedure Testwindow.LvChange(Sender: TObject;
Item: TListItem; Change: TItemChange); begin if Change = ctState then if Item.Checked then.... end; So long Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 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