Toon posts:

[DHTML] IHighlightRenderingServices toepassen via Javascript

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedenavond, ik heb een div met daarin een tabel met minimaal 2000 rijen, de div:
code:
1
2
3
4
5
6
7
8
9
10
<div contentEditable=true>
<table>
<tr>
<td>Rij 0,kolm0</td>
<td>Rij 0,kolm1</td>
<td>&#8230;etc...</td>
</tr>
&#8230;etc&#8230;
</table>
</div>


contentEditable heeft alles te maken met MSHTML.

Nu heb ik het tijdelijk zo gedaan, het document heeft onselectionchange de (createRange) functie om de parent van een TD, de TR, de backgroundColor highlight te geven. En zowel previousSibling nextSibling geen backgroundColor meer, omdat ze niet meer ‘geselecteerd’ moeten zijn.

Dit werkt prima als ik mijn normale pijltjes toetsen gebruik, naar boven en naar beneden, dan wordt er telkens één ge-highlight. Dit werkt echter niet als ik met mijn muis een rij klik/selecteer, althans de previousSibling nextSibling niet omdat de volgorde dan niet klopt als ik een willekeurige rij aanklik. Bovendien werkt (vanwege mshtml/contentEditable=true) de methodes fromElement en toElement niet op in dit geval de tabel omdat het de het activeElement de div/body op het document is. Het is niet direct mijn idee om de TD’s ook daadwerkelijk te wijzigen, het gaat puur om de weergave in combinatie met de navigatie er door heen.

Nu vond ik het volgende op MSDN,

“IHighlightRenderingServices Members

- AddSegment Creates a highlight segment for the markup between two display pointers and highlights it according to a specified rendering style.
- MoveSegmentToPointers Redefines a highlight segment and its style.
- RemoveSegment Removes a highlight segment from the collection of those that are highlighted.”

En dit zou m’n doel moeten kunnen bereiken, namelijk dat slechts één element ge-highlight wordt, en de (vorige) overige ge-de-highlight worden, echter vind ik daar referenties naar dit soort syntax (C?):

code:
1
2
3
4
5
6
7
HRESULT QueryInterface(

  REFIID iid,

  void ** ppvObject

);
iid zou dan IHighlightRenderingServices moeten zijn, is wat ik er van begrepen heb. Ik zou dan de QueryInterface geloof ik moeten aanroepen via execCommand. Wat overigs gebruik voor de normale command identifiers dus tot hier begrijp ik het wel, ik heb me suf gezocht naar een uitleg met deze trefwoorden en ‘+javascript’ op google, maar ik kan geen beeld krijgen hoe zoiets er in javascript uit moet komen te zien.

Ik moet er even bij zeggen dat ik dit wel een mooie oplossing vond met het punt van de MSHTML, omdat ik zo met mijn toetsenbord door de tabel kan navigeren, precies zoals in explorer, ik was begonnen met 2000 rijen en daar ging ik razend snel door heen, en ook zonder gestotter met het highlighten en de-highlighten, als ik dit dus kan implementeren dan dé oplossing voor een snelle weergave, want met getElementById of document.all.tags wordt dat echt problematisch bij bijvoorbeeld 2000 rijen omdat het document dan simpelweg te lang is om deze laatste methodes snel uit te voeren. Bovendien kan ik deze methode zowel voor een detail weergave als voor een boomstructuur gebruiken.

Ik hoopte eigenlijk dat iemand bekend is met de functie/methode IHighlightRenderingServices en mij enige uitleg kan geven of mischien een waardevolle tip heeft, maar de hamvraag is natuurlijk hoe krijg ik dit tussen mijn javascript tagjes? 8)7 Ryan

[ Voor 3% gewijzigd door Verwijderd op 10-06-2006 22:32 ]


Verwijderd

Topicstarter
Als ik dit bericht toevoeg, verschijnd de topic dan weer in het forum...?