AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView Icon vertauschen / verschieben

Ein Thema von delphinia · begonnen am 12. Mär 2006 · letzter Beitrag vom 12. Mär 2006
Antwort Antwort
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#1

ListView Icon vertauschen / verschieben

  Alt 12. Mär 2006, 13:41
Hallo,

ich sitze seit 2 Tagen an einem Problem und komme nicht weiter.
Ich möchte gerne in einer TListView ein Icon mit der Maus verschieben. Aber auf ganz bestimmte art und weise!
Und zwar: Icon klicken ziehen und auf einem anderem Icon ablegen und beide tauschen ihren Platz.


Alles was ich bis jetzt habe - was aber nicht richtig funktioniert - ist das *nicht schimpfen für diesen Müll*

*hilfe* Gruss Doreen

Delphi-Quellcode:
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  p2.x := x;
  p2.y := y;
end;

procedure TForm1.ListView1Click(Sender: TObject);
begin
  if (ListView1.Selected <> nil) then
  begin
    ItemIdx := ListView1.Selected.Index;
    p.x := ListView1.Selected.Position.x;
    p.y := ListView1.Selected.Position.y;
  end;
end;

procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ListView1.Items.BeginUpdate;


  DropItem := ListView1.GetItemAt(p2.x, p2.y);
  NextItem := ListView1.GetNextItem(DropItem, sdAll, [isFocused]);

  if Assigned(NextItem) then
  begin
    ListView1.Items[NextItem.Index].SetPosition(p2);
    ListView1.Items[ItemIdx].SetPosition(p2);
  end;

  ListView1.Items.EndUpdate;
end;


procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
//
end;

procedure TForm1.ListView1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
//
end;
[edit=r_kerber]Code- durch Delphi-Tags ersetzt. Mfg, r_kerber[/edit]
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: ListView Icon vertauschen / verschieben

  Alt 12. Mär 2006, 14:31
Hallo Doreen

Zitat von delphinia:
Alles was ich bis jetzt habe - was aber nicht richtig funktioniert - ist das *nicht schimpfen für diesen Müll*
Der Ansatz ist doch nicht schlecht. Ich sehe, dass du dich bemüht hast und das zählt, du zeigst Eigeninitiative. Da schimpft garantiert keiner.

Ich habe es schnell so zusammengebastelt und bei mir funktioniert es ganz gut:

Delphi-Quellcode:
procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  StartItem, TargetItem: TListItem; // Start-/Ziel-Item
  TempImgIndex: Integer; // ImageIndex temporär speichern
begin
  if not (Sender = Source) then
    Exit;

  StartItem := ListView1.Selected;
  TargetItem := ListView1.GetItemAt(X, Y);

  // Indizes vertauschen
  TempImgIndex := TargetItem.ImageIndex;
  TargetItem.ImageIndex := StartItem.ImageIndex;
  StartItem.ImageIndex := TempImgIndex;

  // Falls ViewStyle auf "vsIcon" oder "vsSmallIcon" gesetzt ist,
  // ist das zu empfehlen (s. marabus Beitrag)
  ListView1.Arrange(arDefault);
end;

procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Sender = Source)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListView1.DragMode := dmAutomatic;
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: ListView Icon vertauschen / verschieben

  Alt 12. Mär 2006, 14:43
Hallo Matthias,

da der Code nur mit ausgeschaltetem MultiSelect funktioniert, musst du das DragItem nicht erst ermitteln - es ist identisch mit ListView.Selected. Nach dem Vertauschen solltest du noch Arrange(arDefault) auf der ListView ausführen, da es sonst zu unschönen Lücken kommt.

Grüße vom marabu
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: ListView Icon vertauschen / verschieben

  Alt 12. Mär 2006, 14:54
danke danke
funktioniert sehr sehr sehr gut

Nun erstmal schauen was du gemacht hast und wo meine gedankenfehler waren!
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: ListView Icon vertauschen / verschieben

  Alt 12. Mär 2006, 14:59
Hi

@marabu: Ah, das wusste ich nicht und habe es oben eingefügt. Nun entfällt die globale Variable, sehr schön.

@delphinia: Bittesehr.
  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 05:20 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