AGB  ·  Datenschutz  ·  Impressum  







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

ListView Scrollen per Code

Ein Thema von Fukiszo · begonnen am 21. Jan 2018 · letzter Beitrag vom 22. Jan 2018
Antwort Antwort
Fukiszo
(Gast)

n/a Beiträge
 
#1

AW: ListView Scrollen per Code

  Alt 22. Jan 2018, 05:17
...ViewStyle vsReport?
Deine Vermutung trifft ins Schwarze, ViewStyle := vsReport.

Grüße und danke für Vorschlag!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.609 Beiträge
 
Delphi 12 Athens
 
#2

AW: ListView Scrollen per Code

  Alt 22. Jan 2018, 10:26
Es geht vielleicht auch noch einfacher, in dem man sich nur auf das aktuelle und das neue TopItem konzentriert:
Delphi-Quellcode:
  DI := ListView1.ItemIndex - Succ(ListView1.VisibleRowCount) div 2; // Index des neuen TopItem
  R1 := ListView1.TopItem.DisplayRect(drSelectBounds); // Position des aktuellen TopItem
  R2 := ListView1.Items[DI].DisplayRect(drSelectBounds); // Position des neuen TopItem
  ListView1.Scroll(0, R2.Top - R1.Top);
Es fehlen noch ein paar Plausibilitätsprüfungen wie
  • Gibt es überhaupt Einträge
  • Ist ein Eintrag ausgewählt
  • Sind überhaupt Zeilen sichtbar
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming

Geändert von Uwe Raabe (22. Jan 2018 um 10:50 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#3

AW: ListView Scrollen per Code

  Alt 22. Jan 2018, 10:44
Meines erachtens ist es der Scroll funktion egal ob ein Eintrag vorhanden ist?!

Also, ich kann Scroll(12345) angeben auch wenn null Einträge da sind (was natürlich keinen Sinn macht)
bzw wenn sagen wir 100 Einträge da sind würde Scroll(12345) bewirken das ich am Ende lande.
(Ohne irgendeine Fehlermeldung. Das fängt Windows ab und macht was nützliches draus.)

Den vorangegangen Aufrufen ist es natürlich nicht egal, sie basieren ja auf "Items"

Danke für den Hinweis!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: ListView Scrollen per Code

  Alt 22. Jan 2018, 10:46
Keine Ahnung wo hier ein Problem sein soll.
Bei einem Window Style von LVS_REPORT ist die höhe fixed.
Was gibt es da groß zu berechnen?

Man muss nur dafür sorgen das die gesamthöhe dividiert durch die Items korrekt ist.
Der Rest gibt sich von selbst.

gruss

Geändert von EWeiss (22. Jan 2018 um 10:49 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#5

AW: ListView Scrollen per Code

  Alt 22. Jan 2018, 10:55
Was gibt es da groß zu berechnen?
Könntest Du das bitte mit ein Beispiel für Dummies veranschaulichen, so wie es Uwe Raabe gemacht hat?
Das wäre hilfreich!

Grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: ListView Scrollen per Code

  Alt 22. Jan 2018, 11:00
Was gibt es da groß zu berechnen?
Könntest Du das bitte mit ein Beispiel für Dummies veranschaulichen, so wie es Uwe Raabe gemacht hat?
Das wäre hilfreich!

Grüße
Bei einer List View Höhe von 120 Pixeln und einer Item höhe von 12 dafür benötigst du ein Beispiel für Dummies um zu veranschaulichen wo sich die Mitte befindet?
Ich glaube das kannst du selbst oder?

gruss

Geändert von EWeiss (22. Jan 2018 um 11:10 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#7

AW: ListView Scrollen per Code

  Alt 22. Jan 2018, 11:20
Ich brauch nicht wissen wo die mitte in meiner ListView ist,
ich fragte nach Beispielen wie man ein ausgewähltes Item innerhalb der ListView in den Sichtbaren Bereich bekommt.
Wie ermittelst du das ein Item eine Höhe von 12 hat? Der rest ergibt sich ja dann von selbst.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: ListView Scrollen per Code

  Alt 22. Jan 2018, 11:27
Ich brauch nicht wissen wo die mitte in meiner ListView ist,
ich fragte nach Beispielen wie man ein ausgewähltes Item innerhalb der ListView in den Sichtbaren Bereich bekommt.
Wie ermittelst du das ein Item eine Höhe von 12 hat? Der rest ergibt sich ja dann von selbst.
Gar nicht! ?
Ich übergebe sie und setze lediglich den TopIndex.

Delphi-Quellcode:
  LVPlayList := CTRL_ListViewCreate;
  LVPlayList.SelectedImg := SKAERO_FOLDER + 'ListView\ListSelect.png';
  LVPlayList.HeaderArrowImg := SKAERO_FOLDER + 'ListView\HeaderArrow.png';
  LVPlayList.VTrack := SKAERO_FOLDER + 'ListView\VTrack.png';
  LVPlayList.VThumb := SKAERO_FOLDER + 'ListView\VThumb.png';
  LVPlayList.VBtnUp := SKAERO_FOLDER + 'ListView\VBtnUp.png';
  LVPlayList.VBtnDown := SKAERO_FOLDER + 'ListView\VBtnDown.png';
  LVPlayList.HTrack := SKAERO_FOLDER + 'ListView\HTrack.png';
  LVPlayList.HBtnRight := SKAERO_FOLDER + 'ListView\HBtnRight.png';
  LVPlayList.HThumb := SKAERO_FOLDER + 'ListView\HThumb.png';
  LVPlayList.HBtnLeft := SKAERO_FOLDER + 'ListView\HBtnLeft.png';
  LVPlayList.Sizer := SKAERO_FOLDER + 'ListView\Sizer.png';
  LVPlayList.ArrowImgStateMax := 2;
  LVPlayList.Left := 19;
  LVPlayList.Top := 66;
  LVPlayList.Width := MainWidth - 232;
  LVPlayList.Height := MainHeight - 108;
  LVPlayList.DlgItemID := ID_PLAYLIST;
  LVPlayList.Visible := False;
  LVPlayList.ItemHeight := 19; // <<<< ListView Item Höhe.
  LVPlayList.CreateWindow(hMain);
  LVPlayList.SetFont(14, PWideChar(SKAERO_TEXTFONT), FontStyleBoldItalic,
    SKAERO_ACTIVECAPTION, SKAERO_INACTIVECAPTION, True, 1.5);

  LVPlayList.InsertColumn(LVPlayList.Handle, 0, 'Nr.', 50, False, sortInt);
  LVPlayList.InsertColumn(LVPlayList.Handle, 1, 'Time', 55, False, sortString);
  LVPlayList.InsertColumn(LVPlayList.Handle, 2, 'Title', 250, True, sortString);
  LVPlayList.InsertColumn(LVPlayList.Handle, 3, 'Artist', 250, False, sortString);
  LVPlayList.InsertColumn(LVPlayList.Handle, 4, 'Album', 70, False, sortString);
  LVPlayList.InsertColumn(LVPlayList.Handle, 5, '', -1, False, sortString);

  SKAERO_SetAnchorMode(LVPlayList.Handle, ANCHOR_HEIGHT_WIDTH);
  SKAERO_SetZorder(LVPlayList.Handle, HWND_TOP);
Hmmm.. ich dachte eigentlich das wir über Win32Api reden da ich gelesen habe das du damit arbeitest.
Wenn dem nicht so ist vergesse meine Post.

Aber das es geht siehe shot.
Und bei mir ist der erste sichtbare Eintrag eines ListView, TopItem da muss man nichts berechnen.

gruss

Geändert von EWeiss (11. Jul 2019 um 16:49 Uhr)
  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 18:27 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 by Thomas Breitkreuz