AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ListView laufzeitupdate und an der listen position bleiben?
Thema durchsuchen
Ansicht
Themen-Optionen

ListView laufzeitupdate und an der listen position bleiben?

Ein Thema von Arnulf · begonnen am 28. Aug 2005 · letzter Beitrag vom 31. Aug 2005
Antwort Antwort
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#1

ListView laufzeitupdate und an der listen position bleiben?

  Alt 28. Aug 2005, 11:33
Hi
Ich mach in laufzeit mittels timer immerwieder updates auf einem ListView.
Ich ruf hier daten von einem Server ab und die Daten können sich komplett ändern oder auch nicht.

Jedenfalls würde ich gerne an der scroll position bleiben oder wieder zurück springen.
Bis jetzt mach ich das so:
Merken der Position
Delphi-Quellcode:
     ListItem := fMain.List.TopItem;
     if ListItem = nil then i := 0
     else i := ListItem.Index;
     fMain.List.Clear;
List View mit neuen Daten füllen.
Delphi-Quellcode:
     fMain.List.ItemIndex := i;
     fMain.List.Selected.MakeVisible(True);
Das funktioniert aber nicht ganz richtig, weil topItem das oberste item ist und MakeVisible in die mitte zentriert. Das bedeutet die Position verschiebts sich immer wieder.

Bevor ich groß daten abgleiche oder umständlich versuche das ListView mit Dten zu überschreiben und die restlichen einträge lösche bzw. neu hinzufüge ( also ohne .Clear ) wollte ich fragen wie sowas üblicherweise gemacht wird, bzw. wie ich auf die gleich position springen kann?

Arnulf
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#2

Re: ListView laufzeitupdate und an der listen position bleib

  Alt 30. Aug 2005, 09:33
da ich unbeantwortete threads nicht leiden kann schreib ich hald selbst was dazu.
Ich habs nicht geschafft auf die gleiche position zu springen, aber ich hab das problem einfach manuell umgangen.
Ich lösche das listview nur noch wenn ich komplett neue daten erwarte ( wechselnd des servers ).
Ansonsten überschreibe ich nur noch die alten.

Delphi-Quellcode:
  ItemCount := 0;
          if (ItemCount >= fMain.List.Items.Count)
          then begin
               ListItem := fMain.List.Items.Add;
               ListItem.SubItems.Add(' ');
               end
               else ListItem := fMain.List.Items.Item[ItemCount];
nach dem schreibe einer zeile nur noch
inc (ItemCount); Das alles in eine schleife und schon hab ich mein update ohne das verschieben der position.
Eigentlich müsste ich am ende noch die übrig bleibenden zeilen löschen, aber dazu bin ich mal zu faul und so genau muß es auch ned sein

Arnulf
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: ListView laufzeitupdate und an der listen position bleib

  Alt 30. Aug 2005, 09:48
Gibts bei der Listview nicht sowas wie 'BeginUpdate / 'EndUpdate'? Genauergesagt bei den Items.
Probiers doch so:

Delphi-Quellcode:
ListView.items.beginupdate;
MyPos := ListView.ItemIndex;
Try
  .... items neu erstellen etc.
Finally
  ListView.ItemIndex := MyPos;
  ListView.Items.EndUpdate;
  End;
Kann sein, das das Merken vom Index überflüssig ist. Wenn Du Items wegschmeisst, musst Du natürlich MyPos entsprechend ändern. Alternativ kannst Du dir auch die 'Caption' von der aktuellen Position merken, und vor dem 'EndUpdate' diese Caption suchen. Oder sonst irgendwas.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#4

Re: ListView laufzeitupdate und an der listen position bleib

  Alt 30. Aug 2005, 11:33
ich empfehlt die einen unstieg auf den virtualstringtree von mike liscke.

an diesen kannst du objekte hängen. wenn der tree sich dann "malt" werden die objekt ausgelesen und der inhalt angezeigt.
der vorteil: du brauchst du die objekt ändern. die anzeige erfolgt automatisch.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: ListView laufzeitupdate und an der listen position bleib

  Alt 30. Aug 2005, 12:07
Wozu empfehlen? Kann die normale Listview doch genausogut. Wie wird denn der Inhalt angezeigt? Als Pointer? String? Lustig. Zeig mal, wie das geht.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#6

Re: ListView laufzeitupdate und an der listen position bleib

  Alt 30. Aug 2005, 22:19
Zitat:
Gibts bei der Listview nicht sowas wie 'BeginUpdate / 'EndUpdate'? Genauergesagt bei den Items.
hm weiß nicht genau. - kenn begin update noch nicht .

Aber ich überschreib ja eh immer alles, deshalb hab ich ja vorher .clear gemacht.
Das ist natürlich auszuprobieren, aber ich hab damit nicht gespielt, weil ich davon ausgehe, daß der user nur den scroll balken benutzt.
und itemindex bezieht sich glaub ich auf das ausgewählte item ( bin mir da garnicht sicher ).
Und ich will ja mit dem scroll balken wieder auf die gleiche stelle.

Aber ich probier mal herum damit.
@generic
du meinst damit, daß ich das objekt neu beschreibe und angezeigt wird es dann, wenn beim view graphisch ein update gemacht wird? - damit verhindert man das blinken oder wie jetzt ?

Arnulf
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#7

Re: ListView laufzeitupdate und an der listen position bleib

  Alt 31. Aug 2005, 15:46
deim ms control kopierst du die daten von etwas in das control. das control zeichnet sich dann immer neu (wenn notwendig) mit der kopie der daten.

wenn die daten sich nun aktualisieren, dann muss du erneut die daten in das control kopieren, damit das control die neuen daten anzeigen kann.

normal hast du im speicher ein object/record welche die daten hält.
aus diesem kopierst du die daten ins das control.

stop

hier ist der vst interesant - eine kopie der daten ist nicht notwendig
sondern einfach nur ein zeiger auf ein object/record
wenn der vst sich zeichnen will nimmt er immer die aktuellen daten aus dem object bzw. record.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: ListView laufzeitupdate und an der listen position bleib

  Alt 31. Aug 2005, 16:20
theoretich funktioniert es so
Delphi-Quellcode:
LPos := GetScrollPos(Listview1.Handle, SB_VERT);
//Listview-Daten ändern
SetScrollPos(Listview1.Handle, SB_VERT, LPos, True);
in der Praxis wird der Listview inhalt dann allerdings falsch gezeichnet.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 12:28 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