AW: Listview mit Firemonkey
Zitat:
http://www.delphipraxis.net/187248-d...-listview.html |
AW: Listview mit Firemonkey
Hmm, danke - ich dachte das geht etwas leichter aber es sind ja FMXObjekte, deswegen wohl eher nicht.
Wie verschiebe ich eigentlich in der Liste einen Eintrag, ohne die Liste neu zu erstellen? Christian |
AW: Listview mit Firemonkey
Also, mir ist da kein spezieller Befehl zum Verschieben bekannt (Listview.exchange funktioniert nicht mit ListviewItems).
Du musst es also selber erledigen:
Delphi-Quellcode:
procedure TForm19.ListView1DragDrop(Sender: TObject; const Data: TDragObject;
const Point: TPointF); var obj: IControl; idx, add: Integer; lvi: TListviewItem; f: TFMXObject; begin obj := ObjectAtPoint (Screen.MousePos); if obj <> NIL then begin Idx := GetIndexATPos (ListView1, Point); if Idx <> -1 then begin // verschieben vor oder nach aktueller Selektion if TListViewItem (Data.Source).Index > Idx then begin add := 1; end else begin add := 0; inc (idx); end; ListView1.BeginUpdate; lvi := Listview1.Items.AddItem(idx); lvi.Text := TListViewItem (Data.Source).Text; lvi.Detail := TListViewItem (Data.Source).Detail; lvi.bitmap.Assign(TListViewItem (Data.Source).bitmap); Listview1.Items.Delete (TListViewItem (Data.Source).Index+add); ListView1.EndUpdate; Listview1.Selected := lvi; end; end; end; |
AW: Listview mit Firemonkey
Ah Danke, ja so hab ich das auch in der Art gemacht. Es widerstrebt mir aber das als "saubere" Lösung zu akzeptieren :)
Kann ich eigentlich das Bild für den Drag-Effekt weniger verwaschen darstellen?
Delphi-Quellcode:
Christian
procedure TfrmSettingsSort.lvStationsMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Single); var r: TRectF; bmp: TBitmap; begin if (ssLeft in Shift) and (lvStations.Selected <> NIL) then begin r := lvStations.GetItemRect(lvStations.ItemIndex); bmp := TBitmap.Create(round(lvStations.Width), round(lvStations.Height)); try bmp.Canvas.BeginScene; lvStations.PaintTo(bmp.Canvas, RectF(0, 0, bmp.Width, bmp.Height)); bmp.Canvas.EndScene; FDragBitmap.SetSize(round(r.Width), round(r.Height)); FDragBitmap.Canvas.BeginScene; FDragBitmap.Canvas.DrawBitmap(bmp, r, RectF(0, 0, FDragBitmap.Width, FDragBitmap.Height), 1); FDragBitmap.Canvas.EndScene; finally bmp.Free; end; BeginInternalDrag(lvStations.Selected, FDragBitmap); end; end; |
AW: Listview mit Firemonkey
Falls sich jemand wundert, warum Drag&Drop nicht auf Mobilgeräten geht. Hier ist ein Workaround: http://lookinside.free.fr/delphi.php?FMXBasedDragDrop
Im Prinzip muss man eine eigene Klasse für IFMXDragDropService hinzufügen. |
AW: Listview mit Firemonkey
Wenn man wirklich 2500+ Bitmaps laden will dann sollte man die vielleicht nicht alle im Speicher halten.
Mit dem Ansatz von Harry könnte man ein Fenster in den Daten laden, und die Bitmaps entsprechend nachladen. Weil ich mit diversen LowMemory Applikation Events zu kämpfen hatte (habe) frage ich mich ständig: Wie speichere ich am Besten meine Bilder (Thumbnails) auf den Mobile Devices ? - Nachladen von File ist nicht so besonders performat - Gespeichert in Sqlite Datenbank, aber legt Sqlite das doch wieder voll im Speicher an ? - Irgendeine andere Datenbank-Lösung, statt Sqlite ? FdMemoryTable liegt wohl auch komplett im Speicher, oder nicht ? - Benutzen eines OnCalculateFields Events, um die Bitmaps dynamisch zu generieren ? - Speichern in einer eigens dafür erstellten Klasse ? Die perfekte Antwort dafür suche ich noch, es scheint alles Vor- und Nachteile zu haben. Rollo |
AW: Listview mit Firemonkey
Kleine Zwischenfrage zu Deinen Gedanken, Rollo: Warum glaubst Du, daß Bilder aus Dateien zu laden weniger Performant sein soll als sie aus einer SQLite DB zu ziehen? Du weisst, daß SQLite dateibasiert ist? Nur mal so als Denkanstoß ;)
Sherlock |
AW: Listview mit Firemonkey
Hallo Sherlok,
ja, richtig. Ich glaube aber einfach das Datenbanken solche Prozesse super-optimiert haben (Wunschdenken). Es geht ja um kleinere Thumbnails, größere Bilder würde ich auch immer über Linik nachladen. Aber wenn man auf MobileDevices eine ListView mit kleinen Vorschaubildern machen möchte wäre doch eine einfache Datenbank dafür elegant. Jedenfalls ist mir noch nicht klar was hier generell der Beste Weg ist. Rollo |
AW: Listview mit Firemonkey
ich steh gerade ein bisschen auf dem Schlauch, aber gibt es eine Möglichkeit diverse TListViewItems zu verstecken? Sowas wie eine Visible Eigenschaft, als listview.items[1].visible := false ist ja nicht implementiert.
|
AW: Listview mit Firemonkey
Zitat:
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 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