Toon posts:

[Delphi7]Treeview updaten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer de stuctuur van een HTML document in een treeview te zetten. Dat doe ik door via een for-statement iedere regel door te lopen en te zoeken naar tags. Vervolgens voeg ik de tag toe op hetzelfde niveau toe als de vorige tag tenzij de vorige tag een block-opening is zoals <b>. Mocht de tag een block zijn dan wordt de tag als child toegevoegd. Dit werkt allemaal prima.

Het probleem is echter dat als de user iets wijzigd, deze wijzigingen doorgevoerd moeten worden in de treeview. Ik wil de treeview niet volledig leegmaken en vervolgens weer vullen, want dat geeft zo'n knipperend effect.

Ik ben nu al bijna een dag aan het klooien om de treeview te updaten, maar het lukt maar niet. Het probleem is dat ik niet precies weet hoe ik dit probleem moet aanpakken; het gevolg zijn lappen code die soms wel en soms niet werken. Hou zouden jullie dit probleem aanpakken?

  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 07:55
Verwijderd schreef op 12 augustus 2004 @ 12:28:
Het probleem is echter dat als de user iets wijzigd, deze wijzigingen doorgevoerd moeten worden in de treeview. Ik wil de treeview niet volledig leegmaken en vervolgens weer vullen, want dat geeft zo'n knipperend effect.
waar en hoe wijzigt de user iets?

A software developer is someone who looks both left and right when crossing a one-way street.


  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 21-05 13:54

IWriteCode

Less = more

Uhmm... juist... hoe gaat dat wijzigen precies in zn werk? Doen ze dat in de treeview? Of in een text gedeelte?
Dat knipperen valt ook op te lossen door iets als een beginupdate/endupdate te gebruiken.

Less = more


Verwijderd

Topicstarter
Sorry, ik ben inderdaad daarover wat onduidelijk geweest. De user wijzigd de HTML code zelf, dus niet de treeview.

Via beginupdate/endupdate heb ik geprobeert te werken, maar als je via Treeview.items.clear; alle items verwijdert moet de user weer de tree uitklappen of inklappen.

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 21-05 13:54

IWriteCode

Less = more

Tja... ik vrees dat wat jij wil... erg lastig is... want dan moet je... of binnen het tekst gedeelte referenties leggen naar de treeview... of binnen de treeview bijhouden welke positie die tag heeft binnen het document... en dan bij elke wijziging die gegevens aanpassen....

Ik denk toch echt dat je de treeview op een mooie manier moet gaan verversen... en uitklappen kan toch ook in code?

Less = more


  • Twilight Burn
  • Registratie: Juni 2000
  • Laatst online: 29-04 11:55
Ik zou als de gebruiker iets wijzigt, de boom weer opbouwen, maar dan kijken of "dat stuk al gedaan is" en als er dan iets anders is, dit in de boom die er al is wijzigen, en dus niet de hele tijd de hele boom opnieuw maken.

  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 07:55
dat is dus verrekte lastig als je geen link heb tussen de 'html-text' en de items in de treeview. Als je dat had, had je het nog veel eenvoudiger op kunnen lossen :)

A software developer is someone who looks both left and right when crossing a one-way street.


Verwijderd

Topicstarter
Wat ik wel heb is dat ik via het data object van een treenode een regelnummer heb en de positie van de tag in die regel.

  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 21-05 13:54

IWriteCode

Less = more

En als iemand op enter duwt? Dan klopt daar niets meer van...

Less = more


  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 07:55
als je niet het regel nummer, maar gewoon de pos in de file bijhoudt, zou je kunnen proberen dat kloppend te houden. Dus als iemand iets intoetst, alle treenodes die _na_ die plek in de file zitten en posje opschuiven en bij wissen alle treenodes die er _na_ zaten eentje terughalen. Dan zit je nog wel met knippen en plakken enzo, ik geef het je te doen.

Als je dit echt wilt, zul je of (zoals eerder vermeld) zelf weer de boel openklappen na je clear, of een tussen laagje maken die dus echt weet hoe die html in elkaar zit en die dus kan zien _wat_ er gewijzigt is.

A software developer is someone who looks both left and right when crossing a one-way street.


  • IWriteCode
  • Registratie: Juli 2000
  • Laatst online: 21-05 13:54

IWriteCode

Less = more

Nadeel van een tussenlaag is dat die dan leidend moet zijn... en dat je daar dus rare dingen mee kan krijgen...

Ik zou gewoon proberen om die tree mooi en snel te vullen... en het vullen op slimme momenten laten gebeuren...

Less = more


Verwijderd

Topicstarter
Tnx :) Ik zal proberen de tree op de slimme momenten op te bouwen. Is er nog wel een manier om de staat van het inklappen te 'onthouden'?
Pagina: 1