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 CheckBoxen verschwinden (https://www.delphipraxis.net/4871-tlistview-checkboxen-verschwinden.html)

DieHardMan 15. Mai 2003 06:10


TListView CheckBoxen verschwinden
 
Ich benutze diese Prozedur um Items in einer ListView nach oben und nach unten zu verschieben. Die Eigenschaft Checkboxes ist auf True. Mein Problem ist, wenn ich ein Item mit Häckchen verschiebe ist alles in ordnung, verschiebe ich aber ein Item ohne Häkchen auf ein Item mit Häckchen verschwinden alle anderen Häckchen auser das Häckchen von dem soeben verschobenen Item.

Habe ein kleines Beispielprojekt erstellt, dass mein Problem vielleicht etwas einfacher darstellt:

Beispiel-Projekt

Delphi-Quellcode:
procedure MoveItems(AListView: TListView; Up: Boolean = True);
var
  OldItem, NewItem: TListItem;
  AIndex: Integer;
begin
  Assert(Assigned(AListView));
  with AListView do
  begin
    Items.BeginUpdate;
    try
      OldItem := TListItem.Create(Items);
      try
        OldItem.Assign(Selected);
        if Up then
          AIndex := Selected.Index - 1 
        else
          AIndex := Selected.Index + 1;
        if not AIndex in [0..Items.Count - 1] then
          Exit;
        Selected.Delete;
        NewItem := Items.Insert(AIndex);
        NewItem.Assign(OldItem);
        Selected := NewItem;
      finally
        OldItem.Free;
      end;
    finally
      Items.EndUpdate;
    end;
  end;
end;
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

DieHardMan 15. Mai 2003 13:29

Lösung gefunden
 
Hab mir dieses Assign mal angeschaut und rausgefunden dass es an folgender Anweisung liegt:

Code:
OldItem.Checked := Selected.Checked;
Hab zwar bis jetzt noch net gerafft wie und wieso des net geht, aber ich hab die prozedur ein bisschen modifiziert und so funkt es jetzt.

Delphi-Quellcode:
{*********************************************************}
{ Einzelne ListView Items nach oben und unten verschieben }
{*********************************************************}
procedure MoveItems(AListView: TListView; Up: Boolean = True);
var
  OldItem, NewItem: TListItem;
  AIndex: Integer;
  ItemChecked: boolean;
begin
  Assert(Assigned(AListView));
  with AListView do
  begin
    Items.BeginUpdate;
    try
      OldItem := TListItem.Create(Items);
      try
        OldItem.Caption := Selected.Caption;
        OldItem.Data := Selected.Data;
        OldItem.ImageIndex := Selected.ImageIndex;
        OldItem.Indent := Selected.Indent;
        OldItem.OverlayIndex := Selected.OverlayIndex;
        OldItem.StateIndex := Selected.StateIndex;
        OldItem.SubItems := Selected.SubItems;
        if Selected.Checked then
          ItemChecked := true
        else
          ItemChecked := false;
        if Up then
          AIndex := Selected.Index - 1
        else
          AIndex := Selected.Index + 1;
        if not AIndex in [0..Items.Count - 1] then
          Exit;
        Selected.Delete;
        NewItem := Items.Insert(AIndex);
        NewItem.Assign(OldItem);
        NewItem.Checked := ItemChecked;
        Selected := NewItem;
      finally
        OldItem.Free;
      end;
    finally
      Items.EndUpdate;
    end;
  end;
end;


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