{"id":55001098,"date":"2017-10-01T00:00:00","date_gmt":"2020-05-13T21:26:37","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1098"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Treeview_ohne_MSCOMCTL","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/","title":{"rendered":"Treeview ohne MSCOMCTL"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/764af72df71b491dadf74465d5d13e4d\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Im Juli\/August 2017 war es wieder mal soweit: Microsoft hat ein Update f&uuml;r einige Office-Varianten geliefert, das die TreeView-Steuerelemente in den Anwendungen auf den betroffenen Rechnern lahmgelegt hat. Zwar gibt es ein paar Wochen sp&auml;ter immer einen Patch oder ein weiteres Update zur Behebung des Fehlers, aber wer kurzfristig handeln muss, darf manuell an der Datei MSCOMCTL.ocx und\/oder der Registry herumpfuschen. Das kann man nat&uuml;rlich keinem Kunden zumuten, daher zeigen wir eine m&ouml;gliche L&ouml;sung.<\/b><\/p>\n<p>Normalerweise beschreiben wir in <b>Access im Unternehmen <\/b>keine Tools von Drittanbietern, die kostenpflichtig sind. Im Falle des Treeviews scheint es jedoch sinnvoll, eine Ausnahme zu machen. Thomas Pfoch hat mit seiner Firma <b>picoware <\/b>einen <b>TreeView<\/b>-Ersatz programmiert, der komplett ohne zus&auml;tzliche Dateien wie <b>.ocx<\/b>&#8211; oder <b>.dll<\/b>-Dateien auskommt.<\/p>\n<p>Er verwendet stattdessen ein Unterformular, das er geschickt aufbohrt, um Daten nach den Vorgaben des Benutzers anzuzeigen und diese &#8211; wie es f&uuml;r ein Treeview typisch ist &#8211; f&uuml;r die untergeordneten Ebenen nach rechts einzur&uuml;cken.<\/p>\n<p>Wenn Sie diese Erweiterung nutzen, m&uuml;ssen Sie lediglich einige Objekte aus der Beispieldatenbank, die Sie nach dem Erwerb des Pakets erhalten, in die Zieldatenbank kopieren. Darunter befindet sich auch ein Formular, das Sie als Unterformular in das Zielformular einf&uuml;gen.<\/p>\n<p>Im Code, der beim Laden des Zielformulars ausgel&ouml;st wird, tragen Sie dann die Anweisungen ein, welche die anzuzeigenden Daten definieren.<\/p>\n<p>Der picoware-Treeview kostet 299,- EUR (inkl. 19% MwSt.) pro Entwicklerlizenz. Das hei&szlig;t, dass Sie f&uuml;r jeden Entwickler, der das Tools einsetzt, eine Lizenz ben&ouml;tigen. Dieser Entwickler kann allerdings beliebig viele Anwendungen mit den Treeview-Funktionen ausstatten und weitergeben. Gemessen an dem &auml;rger, den die regelm&auml;&szlig;igen Updates der Datei <b>MSCOMCTL.ocx <\/b>mit sich bringen, ist dies nach unserem Ermessen eine sinnvolle Investition.<\/p>\n<p>Hinzu kommt, dass Sie als Leser von <b>Access im Unternehmen <\/b>im Shop unter <b>www.amvshop.de <\/b>20% Rabatt erhalten, und zwar mit dem Gutscheincode <b>aiu-treeview<\/b>.<\/p>\n<h2>Vorteile des picoware-Treeviews<\/h2>\n<p>Zu den Vorteilen des picoware-Treeviews geh&ouml;ren die folgenden:<\/p>\n<ul>\n<li>Es ist keine externe Komponente mehr erforderlich, die durch Updates kompromittiert werden k&ouml;nnte.<\/li>\n<li>Es funktioniert nicht nur unter 32bit-Versionen von Access, sondern auch unter 64bit.<\/li>\n<li>Die Elemente k&ouml;nnen per spezieller SQL-Abfrage und somit mit wesentlich weniger Code zugewiesen werden.<\/li>\n<\/ul>\n<h2>Nachteile des picoware-Treeviews<\/h2>\n<p>Durch die Anpassung an die Eigenarten einer Datenbank mit ihren in Tabellen gespeicherten Daten und durch die Verwendung eines Unterformulars zur Realisierung TreeViews ergeben sich auch ein paar Nachteile:<\/p>\n<ul>\n<li>Bestehende MSCOMCTL-TreeViews lassen sich nicht ohne weiteres in das picoware-Treeview umwandeln.<\/li>\n<li>Durch die Verwendung eines Unterformulars kommt es beim Aktualisieren von Daten und anderen Vorg&auml;ngen manchmal zum Neuaufbau des Treeviews.<\/li>\n<\/ul>\n<h2>Beispieldatenbank<\/h2>\n<p>Wenn Sie nicht sicher sind, ob das Tool das Richtige f&uuml;r Sie ist, k&ouml;nnen Sie unter dem Link <b>http:\/\/shop.minhorst.com\/access-tools\/322\/picoware-treeview <\/b>Beispieldatenbanken f&uuml;r verschiedene Access-Versionen herunterladen, welche die M&ouml;glichkeiten des Tools demonstrieren. Auf den folgenden Seiten zeigen wir Ihnen, wie Sie das <b>picoware-Treeview <\/b>programmieren.<\/p>\n<h2>picoware-Treeview-Elemente hinzuf&uuml;gen<\/h2>\n<p>Nach dem Erwerb und dem Download erhalten Sie eine Datenbank etwa namens <b>treeview_20170629_1451_Source.mdb<\/b>. Diese enth&auml;lt alle Objekte, die Sie f&uuml;r den Einsatz in eigenen Datenbanken ben&ouml;tigen.<\/p>\n<p>Sie brauchen sich keine M&uuml;he zu machen, die ben&ouml;tigen Objekte selbst in die Zieldatenbank zu ziehen. Die Datenbank aus dem Download enth&auml;lt ein Tool, das Ihnen diese Arbeit abnimmt. Dazu &ouml;ffnen Sie das Formular namens <b>Tool_CopyCode<\/b>. Dieses zeigt eine Treeview-Ansicht der Verzeichnis- und Dateistruktur auf Ihrer Festplatte an, wobei das Verzeichnis der Quelldatenbank ge&ouml;ffnet wird (s. Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_001.png\" alt=\"Auswahl der Zieldatenbank f&uuml;r die Datenbankobjekte\" width=\"599,593\" height=\"511,3845\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Auswahl der Zieldatenbank f&uuml;r die Datenbankobjekte<\/span><\/b><\/p>\n<p>W&auml;hlen Sie hier die Zieldatenbank aus und klicken Sie auf die Schaltfl&auml;che <b>Copy<\/b>. Dies kopiert nun alle notwendigen Datenbankobjekte in die ausgew&auml;hlte Datenbank. Falls n&ouml;tig, halten Sie dabei die Umschalttaste gedr&uuml;ckt.<\/p>\n<h2>Erstes Beispiel: Kategorien auflisten<\/h2>\n<p>Im ersten Beispiel wollen wir einfach die Daten der Tabelle <b>tblKategorien <\/b>im Treeview anzeigen. Dazu erstellen Sie ein neues Formular namens <b>frmKategorien<\/b>, &ouml;ffnen es in der Entwurfsansicht und ziehen das Formular <b>USys_pTV_TreeView <\/b>als Unterformular in den Entwurf. Stellen Sie den Namen des Unterformular-Steuerelements auf <b>sfmTreeView <\/b>ein.<\/p>\n<p>Passen Sie au&szlig;erdem die Gr&ouml;&szlig;e des Unterformulars an, das initial in der vollen Breite eingef&uuml;gt wird (s. Bild 2). Stellen Sie au&szlig;erdem die Eigenschaften <b>Bildlaufleisten<\/b>, <b>Datensatzmarkierer<\/b>, <b>Navigationsschaltfl&auml;chen <\/b>und <b>Trennlinien <\/b>auf den Wert <b>Nein <\/b>ein &#8211; das Hauptformular selbst zeigt keine Daten an, sodass wir diese Elemente nicht ben&ouml;tigen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_002.png\" alt=\"Einf&uuml;gen des Unterformulars und Anpassen der Gr&ouml;&szlig;e\" width=\"499,6607\" height=\"503,959\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Einf&uuml;gen des Unterformulars und Anpassen der Gr&ouml;&szlig;e<\/span><\/b><\/p>\n<p>Ein erster Wechsel in die Formularansicht liefert nat&uuml;rlich noch kein sinnvolles Ergebnis &#8211; kein Wunder, denn wir f&uuml;llen das Treeview ja auch noch nicht mit Daten (s. Bild 3). Das &auml;ndern wir allerdings in den folgenden Schritten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_003.png\" alt=\"Erster Wechsel in die Formularansicht\" width=\"499,6607\" height=\"191,5366\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Erster Wechsel in die Formularansicht<\/span><\/b><\/p>\n<p>Dazu f&uuml;gen Sie dem Klassenmodul des Formulars <b>frmKategorien<\/b>, das Sie durch Einstellen der Eigenschaft <b>Enth&auml;lt Modul <\/b>des Formulars anlegen, eine Objektvariable hinzu, welche das Unterformular zur Anzeige des Treeviews referenzieren soll:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>WithEvents objTreeView<span style=\"color:blue;\"> As <\/span> Form_USys_pTV_TreeView<\/pre>\n<p>Die Deklaration enth&auml;lt das Schl&uuml;sselwort <b>With-Events<\/b>, damit wir innerhalb der Klasse auch die Ereignisse dieses Formulars beziehungsweise der Formularklasse <b>Form_USys_pTV_TreeView <\/b>implementieren k&ouml;nnen.<\/p>\n<p>Damit wir das Unterformular zur Anzeige des Treeviews f&uuml;llen k&ouml;nnen, weisen wir der Objektvariablen <b>objTreeView <\/b>das im Unterformularsteuerelement <b>sfmTreeView <\/b>gespeicherte Formular zu, und zwar in der Prozedur, die durch das Ereignis <b>Beim &ouml;ffnen <\/b>des Hauptformulars ausgel&ouml;st wird:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Set<\/span> objTreeView = Me!Treeview.Form\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Treeview mit Daten f&uuml;llen<\/h2>\n<p>Damit w&auml;re das Treeview-Unterformular schon einmal referenziert. Nun wollen wir diese noch mit den gew&uuml;nschten Daten f&uuml;llen, in diesem Falle den Namen der Kategorien aus der Tabelle <b>tblKategorien<\/b>.<\/p>\n<p>Beim <b>MSCOMCTL.ocx<\/b>-TreeView h&auml;tten Sie jedes Element einzeln mit der <b>Add<\/b>-Methode hinzuf&uuml;gen m&uuml;ssen. Hier spielt das speziell auf die Anzeige von Daten aus Tabellen oder Abfragen ausgelegte picoware-Treeview seine St&auml;rken aus. Sie m&uuml;ssen lediglich eine SQL-Anweisung mit einem bestimmten Format definieren, welche die anzuzeigenden Daten liefert, und diese mit der <b>AddSQL<\/b>-Methode dem in der Variablen <b>objTreeView <\/b>gespeicherten Treeview zuweisen. Das sieht dann beispielsweise wie in Listing 1 aus.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objTreeView = Me!Treeview.Form\r\n     strSQL = \"SELECT KategorieID AS Reference, Kategoriename AS Caption, ''''Kategorie'''' AS RefContext \" _\r\n         & \"FROM tblKategorien\"\r\n     objTreeView.AddSQL strSQL\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Anzeigen der Kategorien beim &ouml;ffnen des Formulars<\/span><\/b><\/p>\n<p>Ein Wechsel zur Formularansicht liefert bereits ein akzeptables Ergebnis (s. Bild 4) &#8211; und das mit einer sehr &uuml;berschaubaren Anzahl von Codezeilen! <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_004.png\" alt=\"Die Kategorien im picoware-Treeview\" width=\"424,7115\" height=\"309,1729\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Die Kategorien im picoware-Treeview<\/span><\/b><\/p>\n<h2>Erl&auml;uterung des SQL-Ausdrucks<\/h2>\n<p>Der zum F&uuml;llen des Treeviews verwendete SQL-Ausdruck sieht zusammengefasst wie folgt aus:<\/p>\n<pre>SELECT KategorieID AS Reference, Kategoriename AS Caption, ''''Kategorie'''' AS RefContext FROM tblKategorien<\/pre>\n<p>Hier erkennen Sie drei Felder, die jeweils mit einem <b>ALIAS<\/b>-Namen ausgestattet wurden. Dies dient dem Zweck, dass das Treeview beim Anzeigen der Daten genau wei&szlig;, welches Feld die Daten f&uuml;r welchen Zwecke enth&auml;lt. Wir verwenden die folgenden drei <b>ALIAS<\/b>-Bezeichnungen:<\/p>\n<ul>\n<li><b>Reference<\/b>: Das hier genannte Feld, in diesem Fall <b>KategorieID<\/b>, wird nicht angezeigt, sondern als Referenz verwendet, wenn die untergeordnete Ebene Daten aufnehmen soll, die &uuml;ber ein Fremdschl&uuml;sselfeld, das ebenfalls speziell gekennzeichnet wird, entsprechend verkn&uuml;pfte Daten enth&auml;lt.<\/li>\n<li><b>Caption<\/b>: Das mit dem <b>ALIAS <\/b>namens <b>Caption <\/b>versehene Feld enth&auml;lt den im Treeview anzuzeigenden Wert, in diesem Fall den Inhalt des Feldes <b>Kategoriename<\/b>.<\/li>\n<li><b>RefContext<\/b>: Dieses Feld nimmt eine Zeichenkette auf, mit der Sie den Typ des daraus generierten Elements im TreeView definieren &#8211; in diesem Fall <b>Kategorie<\/b>. Im folgenden Beispiel werden Sie sehen, wie Sie die hierf&uuml;r angegebene Zeichenkette nutzen k&ouml;nnen.<\/li>\n<\/ul>\n<h2>Artikel zu Kategorien hinzuf&uuml;gen<\/h2>\n<p>Nun gehen wir einen Schritt weiter und f&uuml;gen in einer zweiten Ebene noch die zu einer jeden Kategorie geh&ouml;renden Artikel hinzu. Dazu kopieren Sie das soeben erstellte Formular und f&uuml;gen es unter dem Namen <b>frmKategorienArtikel <\/b>erneut in die Datenbank ein (<b>frmKategorie <\/b>markieren, <b>Strg + C<\/b>, <b>Strg + V<\/b>, neuen Namen eingeben). <\/p>\n<p>Am Entwurf des Formulars brauchen Sie keine &auml;nderungen vorzunehmen, wir k&uuml;mmern uns nur um den Code.<\/p>\n<p>Wie zuvor soll beim &ouml;ffnen des Formulars die Liste der Kategorien erscheinen. Beim Klick auf eines der Plus-Zeichen sollen die zur jeweiligen Kategorie geh&ouml;renden Artikel im Treeview angezeigt werden.<\/p>\n<p>Dazu implementieren wir ein Ereignis der Klasse <b>Form_USys_pTV_TreeView<\/b>. Zu diesem Zweck wechseln Sie zum VBA-Fenster des Klassenmoduls des Formulars <b>frmKategorienArtikel<\/b>, w&auml;hlen im linken Kombinationsfeld des Fensters den Eintrag <b>objTreeView <\/b>und im rechten Kombinationsfeld den Eintrag <b>ItemOpened <\/b>aus (s. Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_005.png\" alt=\"Implementieren einer Ereignisprozedur des picoware-Treeviews\" width=\"599,593\" height=\"421,7285\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Implementieren einer Ereignisprozedur des picoware-Treeviews<\/span><\/b><\/p>\n<p>Dies legt die folgende Ereignisprozedur an:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objTreeView_ItemOpened(Context<span style=\"color:blue;\"> As <\/span> USys_pCT_Context, ByVal RefPath<span style=\"color:blue;\"> As String<\/span>)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Ereignisprozedur wird immer ausgel&ouml;st, wenn der Benutzer auf einen der Eintr&auml;ge im Treeview klickt. Dies k&ouml;nnen Sie ausprobieren, indem Sie einen Haltepunkt f&uuml;r die erste Zeile der Prozedur festlegen und auf eine der Kategorien im Beispielformular <b>frmKategorienArtikel <\/b>klicken.<\/p>\n<p>Nun wollen wir die Zeilen hinzuf&uuml;gen, die daf&uuml;r sorgen, dass beim Anklicken des Plus-Zeichens einer Kategorie die untergeordneten Artikel im Treeview erscheinen. Diese Prozedur sieht wie in Listing 2 aus.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objTreeView_ItemOpened(Context<span style=\"color:blue;\"> As <\/span>USys_pCT_Context, ByVal RefPath<span style=\"color:blue;\"> As String<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngReference<span style=\"color:blue;\"> As Long<\/span>\r\n    lngReference = Context.SettingLong(\"Reference\", -1)\r\n    strSQL = \"Select ArtikelID<span style=\"color:blue;\"> As <\/span>Reference, ''''Artikel''''<span style=\"color:blue;\"> As <\/span>RefContext, Artikelname<span style=\"color:blue;\"> As <\/span>Caption &quot; _\r\n          &amp; &quot;FROM tblArtikel WHERE KategorieID = \" & lngReference\r\n    objTreeView.AddSQL strSQL, RefPath\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Ereignisprozedur, welche die Artikel f&uuml;r die angeklickte Kategorie einblendet<\/span><\/b><\/p>\n<p>Eine zus&auml;tzliche Zeile deklariert eine Variable namens <b>lngReference <\/b>mit dem Datentyp <b>Long<\/b>, eine weitere f&uuml;llt diese mit einem Wert, den der Ausdruck <b>Context.SettingLong(&#8222;Reference&#8220;, -1) <\/b>liefert. <b>Context <\/b>ist einer der beiden Parameter, der beim Ausl&ouml;sen der Ereignisprozedur &uuml;bergeben wird.<\/p>\n<p>Dieser liefert einige Informationen rund um das angeklickte Element und auch einige m&ouml;gliche Methoden. In diesem Fall verwenden wir die Funktion <b>SettingLong<\/b>, um den Wert des Attributs <b>Reference <\/b>zu ermitteln. Dabei handelt es sich um den Wert des angeklickten Elements, der in der SQL-Anweisung, welche dieses Element definiert, f&uuml;r das Feld mit dem <b>ALIAS<\/b>-Namen Reference &uuml;bergeben wurde &#8211; in diesem Fall also der Wert des Feldes <b>KategorieID <\/b>f&uuml;r den angeklickten Eintrag.<\/p>\n<p>Diesen Wert speichern wir in der Variablen <b>lngReference<\/b> und nutzen ihn in der nachfolgend zusammengestellten SQL-Anweisung als Vergleichswert des Kriteriums. F&uuml;r die <b>KategorieID <\/b>mit dem Wert <b>5 <\/b>sieht die SQL-Abfrage etwa so aus:<\/p>\n<pre>Select ArtikelID<span style=\"color:blue;\"> As <\/span>Reference, \r\n''''Artikel''''<span style=\"color:blue;\"> As <\/span>RefContext, \r\nArtikelname<span style=\"color:blue;\"> As <\/span>Caption \r\nFROM tblArtikel \r\nWHERE KategorieID = 5<\/pre>\n<p>Danach folgt dann auch f&uuml;r die Elemente dieser zweiten Ebene der Aufruf der Methode <b>AddSQL <\/b>des Objekts aus <b>objTreeView<\/b>. Diesmal verwenden wir allerdings auch den zweiten Parameter dieser Methode und &uuml;bergeben dieser den unver&auml;nderten Wert des zweiten Parameters der Ereignisprozedur namens <b>RefPath<\/b>.<\/p>\n<p>Was enth&auml;lt dieser Parameter Dies erfahren wir wieder, indem wir einen Haltepunkt setzen und dann nach dem Abarbeiten der ersten Zeile mit der Maus &uuml;ber den Parameter fahren (s. Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_006.png\" alt=\"Ermitteln eines der Parameter der Ereignisprozedur\" width=\"599,593\" height=\"213,2838\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Ermitteln eines der Parameter der Ereignisprozedur<\/span><\/b><\/p>\n<p>Es handelt sich also um die Zeichenfolge <b>\/5\/<\/b>, wobei der Wert <b>5 <\/b>wieder dem Referenzwert des ausl&ouml;senden Elements entspricht. Diesen &uuml;bergeben wir der Methode <b>AddSQL<\/b>, damit diese wei&szlig;, an welches Element sie die neuen Elemente anf&uuml;gen soll.<\/p>\n<p>Das Ergebnis der neu hinzugef&uuml;gten Funktion finden Sie schlie&szlig;lich in der Formularansicht aus Bild 7.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_007.png\" alt=\"Treeview mit zwei Ebenen\" width=\"424,7115\" height=\"422,5933\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Treeview mit zwei Ebenen<\/span><\/b><\/p>\n<h2>&ouml;ffnen-Klick auf der zweiten Ebene<\/h2>\n<p>Was geschieht aber nun, wenn wir auf das Plus-Zeichen eines der Elemente der zweiten Ebene klicken Dies bewirkt in den meisten F&auml;llen nichts, au&szlig;er dass das Plus-Zeichen f&uuml;r den angeklickten Eintrag verschwindet.<\/p>\n<p>Es kann aber auch sein, dass sich eine weitere Ebene &ouml;ffnet, welche nochmal die gleichen Artikel wie die zweite Ebene enth&auml;lt, von der aus ein Element aufgeklappt wurde. Aber was geschieht dort im Detail Da es nur eine Ereignisprozedur namens <b>ItemOpened <\/b>f&uuml;r alle Elemente des Treeviews gibt, wird diese nat&uuml;rlich auch beim Klicken auf das Plus-Zeichen eines der Elemente der zweiten Ebene mit den Artikeln ausgel&ouml;st.<\/p>\n<p>Der Parameter <b>RefPath <\/b>liefert nun einen Wert wie etwa <b>\/5\/52\/<\/b>, wobei der Wert <b>5 <\/b>dem Referenzwert f&uuml;r das Element der ersten Ebene und <b>52 <\/b>dem Referenzwert f&uuml;r das Element der zweiten Ebene, also des Artikels, entspricht. Der Ausdruck <b>Context.SettingLong(&#8222;Reference&#8220;, -1) <\/b>liefert nun den Prim&auml;rschl&uuml;sselwert des angeklickten Elements der zweiten Ebene.<\/p>\n<p>Die SQL-Anweisung ermittelt nun alle Elemente der Tabelle <b>tblArtikel<\/b>, deren Feld <b>KategorieID <\/b>den Wert <b>52 <\/b>enth&auml;lt &#8211; was in diesem Fall keine Ergebnisse liefert. H&auml;tten wir einen Artikel angeklickt, dessen Wert im Feld <b>ArtikelID <\/b>auch im Feld <b>KategorieID <\/b>eines der Datens&auml;tze der Tabelle <b>tblKategorien <\/b>vorkommt, h&auml;tte dies alle Datens&auml;tze der Tabelle <b>tblArtikel <\/b>zu dieser Kategorie geliefert. Das soll aber nat&uuml;rlich so nicht geschehen.<\/p>\n<p>Also erweitern wir die Ereignisprozedur <b>objTreeView_Item-Opened <\/b>wie in Listing 3. Sie erinnern sich, dass wir gleich in der SQL-Anweisung f&uuml;r das Hinzuf&uuml;gen der Kategorie-Elemente ein Feld mit dem <b>ALIAS<\/b>-Namen <b>RefContext <\/b>und dem Wert <b>&#8220;&#8220;Kategorie&#8220;&#8220; <\/b>&uuml;bergeben haben. Diesen nutzen wir nun, um zu ermitteln, ob der Benutzer auf eines der Elemente der ersten Ebene, also auf eine Kategorie geklickt hat oder auf eines der Objekte einer anderen Ebene.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objTreeView_ItemOpened(Context<span style=\"color:blue;\"> As <\/span>USys_pCT_Context, ByVal RefPath<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>lngReference<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strRefContext<span style=\"color:blue;\"> As String<\/span>\r\n     strRefContext = Context.SettingNz(\"RefContext\", \"Root\")\r\n     Select Case strRefContext\r\n         <span style=\"color:blue;\">Case <\/span>\"Kategorie\"\r\n             lngReference = Context.SettingLong(\"Reference\", -1)\r\n             strSQL = \"Select ArtikelID<span style=\"color:blue;\"> As <\/span>Reference, ''''Artikel''''<span style=\"color:blue;\"> As <\/span>RefContext, Artikelname<span style=\"color:blue;\"> As <\/span>Caption &quot; _\r\n                    &amp; &quot;FROM tblArtikel WHERE KategorieID = \" & lngReference\r\n             objTreeView.AddSQL strSQL, RefPath\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Neue Version der Ereignisprozedur, welche die Artikel f&uuml;r die angeklickte Kategorie einblendet<\/span><\/b><\/p>\n<p>Wir ermitteln diesen Wert &uuml;ber den Ausdruck <b>Context.SettingNz(&#8222;RefContext&#8220;, &#8222;Root&#8220;)<\/b>, was im Falle des Erweiterns eines der Elemente der ersten Ebene den Wert <b>Kategorie <\/b>zur&uuml;ckliefert (ist kein <b>RefContext <\/b>angegeben, lautet der Wert <b>Root<\/b>). Diesen speichern wir in der Variablen <b>strRefContext <\/b>und pr&uuml;fen ihn in einer <b>Select Case<\/b>-Bedingung. Diese hat nur einen <b>Case<\/b>-Zweig, der im Falle des Wertes <b>Kategorie <\/b>aufgerufen wird und die Eintr&auml;ge der Tabelle <b>tblArtikel <\/b>f&uuml;r die angegebene Kategorie hinzuf&uuml;gt. Wenn wir nun also auf das Plus-Zeichen eines Eintrags der zweiten Ebene, also eines Artikels klicken, liefert <b>Context.SettingNz(&#8222;RefContext&#8220;, &#8222;Root&#8220;) <\/b>den Wert Artikel, f&uuml;r den es keinen <b>Case<\/b>-Zweig in der <b>Select Case<\/b>-Variablen gibt. Dementsprechend geschieht auch nichts weiter.<\/p>\n<p>Erst, wenn Sie noch weitere Elemente unterhalb der Artikel-Elemente anzeigen wollten, m&uuml;ssten Sie einen weiteren <b>Case<\/b>-Zweig zur <b>Select Case<\/b>-Bedingung hinzuf&uuml;gen.<\/p>\n<h2>Unn&ouml;tige Plus-Zeichen ausblenden<\/h2>\n<p>Nun haben wir zun&auml;chst einmal zwei Ebene mit Daten zum Treeview hinzugef&uuml;gt. Sie haben auch gesehen, dass das Plus-Zeichen f&uuml;r Eintr&auml;ge der zweiten Ebene, die ja keine weiteren Eintr&auml;ge enth&auml;lt, verschwinden, wenn Sie diese anklicken. Dies sollte aber bereits vorher so sein, denn wozu ben&ouml;tigt man ein Element zum Aufklappen von untergeordneten Elementen, wenn keine solchen vorhanden sind Also k&uuml;mmern wir uns um diese kleine Sch&ouml;nheitskorrektur.<\/p>\n<p>In unserem Beispiel ist dazu nur ein recht kleiner Aufwand erforderlich &#8211; wir m&uuml;ssen lediglich der SQL-Anweisung ein weiteres Feld zuweisen, das den <b>ALIAS<\/b>-Namen <b>ChildCount <\/b>tr&auml;gt und den Wert <b>0 <\/b>enth&auml;lt:<\/p>\n<pre>strSQL = \"Select ArtikelID<span style=\"color:blue;\"> As <\/span>Reference, \r\n''''Artikel''''<span style=\"color:blue;\"> As <\/span>RefContext, \r\nArtikelname<span style=\"color:blue;\"> As <\/span>Caption, \r\n0 AS ChildCount \r\nFROM tblArtikel \r\nWHERE KategorieID = \" & lngReference<\/pre>\n<p>Das Ergebnis sieht wie in Bild 8 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_008.png\" alt=\"Keine Erweiterungssymbole in der zweiten Ebene\" width=\"424,7115\" height=\"302,1986\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Keine Erweiterungssymbole in der zweiten Ebene<\/span><\/b><\/p>\n<p>Was aber, wenn wir Ebenen mit Daten haben, die teilweise untergeordneten Elemente besitzen und teilweise nicht Dazu f&uuml;gen wir etwa eine Kategorie zur Tabelle <b>tblKategorien <\/b>hinzu, f&uuml;r die es in der Tabelle <b>tblArtikel <\/b>keine passenden Artikel gibt.<\/p>\n<p>Damit f&uuml;r dieses Element kein Plus-Zeichen zum Aufklappen des Elements angezeigt wird, m&uuml;ssen wir die SQL-Abfrage f&uuml;r die erste Ebene mit den Kategorien so umformulieren, dass <b>ChildCount <\/b>den Wert <b>0 <\/b>erh&auml;lt, wenn keine untergeordneten Element vorliegen und anderenfalls einen anderen Wert.<\/p>\n<p>Diese Abfrage stellen wir der Einfachheit halber zun&auml;chst in der Entwurfsansicht einer neuen Abfrage zusammen. Dazu f&uuml;gen Sie die beiden Tabellen <b>tblKategorien <\/b>und <b>tblArtikel <\/b>hinzu, wobei die Verkn&uuml;pfung zwischen den beiden Tabellen automatisch mit eingef&uuml;gt wird.<\/p>\n<p>F&uuml;gen Sie die Felder mit den entsprechenden <b>ALIAS<\/b>-Namen wie in Bild 9 zum Entwurfsraster der Abfrage hinzu. Wenn es nun in der Tabelle <b>tblKategorien <\/b>einen Datensatz gibt, mit dem kein Datensatz der Tabelle <b>tblArtikel <\/b>verkn&uuml;pft ist, wird gar kein Datensatz f&uuml;r diese Kategorie angezeigt. Also stellen wir die Verkn&uuml;pfungseigenschaften so ein, dass alle Datens&auml;tze der Tabelle <b>tblKategorien <\/b>geliefert werden, auch wenn es keinen verkn&uuml;pften Datensatz in der Tabelle <b>tblArtikel <\/b>gibt. Nun soll auch noch jede Kategorie nur einmal angezeigt werden und nicht f&uuml;r jede Kombination aus Kategorie und Artikel jeweils einmal, also stellen wir die Eigenschaft <b>Keine Duplikate <\/b>der Abfrage auf <b>Nein <\/b>ein. Schlie&szlig;lich fehlt nun noch ein Weg, die Anzahl der Datens&auml;tze der Tabelle <b>tblArtikel <\/b>f&uuml;r die jeweilige Kategorie zu liefern.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_009.png\" alt=\"Abfrage, welche die Daten einer Tabelle samt Anzahl der untergeordneten Elemente liefern soll.\" width=\"700\" height=\"394,0678\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Abfrage, welche die Daten einer Tabelle samt Anzahl der untergeordneten Elemente liefern soll.<\/span><\/b><\/p>\n<p>Dazu f&uuml;gen Sie durch einen Klick auf den Ribbon-Eintrag <b>Entwurf|Einblenden\/Ausblenden|Summen <\/b>die Zeile <b>Funktion <\/b>im Abfrageentwurf ein. Hier legen Sie f&uuml;r die Felder <b>Reference: KategorieID <\/b>und <b>Caption: Kategoriename <\/b>den Wert <b>Gruppierung<\/b>, f&uuml;r <b>RefContext: &#8220;&#8220;Kategorie&#8220;&#8220; <\/b>den Wert <b>Ausdruck <\/b>und f&uuml;r <b>ChildCount: ArtikelID <\/b>den Wert <b>Anzahl <\/b>fest. Damit erhalten Sie ein Abfrageergebnis wie in Bild 10.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_010.png\" alt=\"Kategorien mit der Anzahl der Unterelemente\" width=\"499,6607\" height=\"269,1241\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Kategorien mit der Anzahl der Unterelemente<\/span><\/b><\/p>\n<p>Nun wechseln Sie in die SQL-Abfrage, kopieren den Abfragetext und f&uuml;gen diesen wie in Listing 4 in der Prozedur <b>Form_Open <\/b>f&uuml;r die Variable <b>strSQL <\/b>ein.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objTreeView = Me!sfmTreeview.Form\r\n     strSQL = \"SELECT DISTINCT tblKategorien.KategorieID AS Reference, ''''Kategorie'''' AS RefContext, &quot; _\r\n          &amp; &quot;tblKategorien.Kategoriename AS Caption, Count(tblArtikel.ArtikelID) AS ChildCount FROM tblKategorien &quot; _\r\n          &amp; &quot;LEFT JOIN tblArtikel ON tblKategorien.KategorieID = tblArtikel.KategorieID &quot; _\r\n          &amp; &quot;GROUP BY tblKategorien.KategorieID, tblKategorien.Kategoriename\"\r\n     objTreeView.AddSQL strSQL\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Diese Version der Prozedur Form_Open liefert nur Plus-Zeichen f&uuml;r Kategorien, die auch Unterelemente enthalten.<\/span><\/b><\/p>\n<h2>Icons<\/h2>\n<p>Um die optische Seite abzurunden, wollen wir nun noch ein paar individuelle Icons f&uuml;r die Elemente des Treeviews hinzuf&uuml;gen. Dazu legen wir eine neue Kopie unseres Beispielformulars an und nennen dieses <b>frmKategorienArtikelIcons<\/b>. Icons werden in der Tabelle <b>USys_pTV_Icon <\/b>verwaltet, die Sie eventuell nicht sehen &#8211; was aber kein Problem ist. F&uuml;gen Sie aus der Quelldatenbank mit den Beispielen das Formular <b>Tool_Icons <\/b>zur Zielanwendung hinzu. Um ein Icon etwa aus einer <b>.png<\/b>-Datei zu dieser Tabelle hinzuzuf&uuml;gen, gehen Sie wie folgt vor:<\/p>\n<ul>\n<li>&ouml;ffnen Sie die Bilddatei in einem Bildbearbeitungsprogramm wie beispielsweise <b>Paint<\/b> (s. Bild 11).<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_011.png\" alt=\"Ein Icon in Paint\" width=\"424,7115\" height=\"305,4576\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Ein Icon in Paint<\/span><\/b><\/p>\n<li>Kopieren Sie das komplette Bild durch <b>Strg + A<\/b>, <b>Strg + C<\/b>.<\/li>\n<\/ul>\n<p>Legen Sie einen neuen Datensatz im Formular <b>Tools_Icons <\/b>an, klicken Sie auf die noch leere Bild-Spalte mit der entsprechenden Gr&ouml;&szlig;e (also etwa 16 x 16) des neuen Datensatzes und f&uuml;gen Sie den Inhalt der Zwischenablage mit <b>Strg + V <\/b>ein. Das Ergebnis sieht dann wie in Bild 12 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_012.png\" alt=\"Verwalten der Icons\" width=\"499,6607\" height=\"218,3476\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Verwalten der Icons<\/span><\/b><\/p>\n<p>Pr&uuml;fen Sie danach durch einen Blick in die Tabelle <b>USys_pTV_Icon<\/b>, ob f&uuml;r den neuen Datensatz in der Spalte mit der entsprechenden Gr&ouml;&szlig;e (hier <b>Pic016<\/b>), dass dort <b>Bild <\/b>steht und nicht etwa <b>Bitmap Image<\/b>, was nicht unter Umst&auml;nden nicht funktioniert (s. Bild 13).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_013.png\" alt=\"Pr&uuml;fen, ob das Bild mit dem richtigen Typ angelegt wurde und nicht etwa mals Bitmap Image\" width=\"649,559\" height=\"329,0083\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: Pr&uuml;fen, ob das Bild mit dem richtigen Typ angelegt wurde und nicht etwa mals Bitmap Image<\/span><\/b><\/p>\n<p>Wie zeigen wir das Bild nun an Im ersten Fall wollen wir alle Elemente der ersten Ebene mit dem Folder-Symbol ausstatten. Dazu k&ouml;nnen wir dieses fix unter dem <b>ALIAS<\/b>-Namen <b>IconName<\/b> als Zeichenkette angeben.<\/p>\n<p>Die entsprechende SQL-Abfrage in der Prozedur <b>Form_Open <\/b>des neuen Formulars <b>frmKategorienArtikelIcons <\/b>erweitern wir also um das Feld <b>&#8220;&#8220;Kategorie&#8220;&#8220; AS IconName<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     ...\r\n     strSQL = \"SELECT ..., ''''Kategorie'''' AS IconName FROM ...\"\r\n     ...\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sieht dann wie in Bild 14 aus &#8211; die Elemente der ersten Ebene werden nun mit dem Folder-Symbol angezeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_014.png\" alt=\"Treeview-Eintr&auml;ge mit Icon\" width=\"424,7115\" height=\"343,0362\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 14: Treeview-Eintr&auml;ge mit Icon<\/span><\/b><\/p>\n<h2>Verschiedene Icons<\/h2>\n<p>Sie k&ouml;nnen nat&uuml;rlich auch f&uuml;r die Eintr&auml;ge einer Ebene individuelle Icons festlegen. Dazu m&uuml;ssen Sie einfach das Feld, welches mit dem <b>ALIAS<\/b>-Namen <b>IconName <\/b>versehen wird, mit dem gew&uuml;nschten Namen aus der Tabelle <b>USys_pTV_Icon <\/b>f&uuml;llen.<\/p>\n<p>Das Ergebnis soll dann beispielsweise wie in Bild 15 aussehen. Es soll also zu jedem Datensatz der Tabelle <b>tblKategorien <\/b>ein eigenes Icon angezeigt werden. F&uuml;r das Beispiel haben wir das Formular <b>frmKategorien<\/b>, das bisher nur die Daten der Tabelle <b>tblKategorien <\/b>angezeigt hat, in das neue Formular <b>frmKategorienIndividuelleIcons <\/b>kopiert.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_015.png\" alt=\"Individuelle Treeview-Icons\" width=\"424,7115\" height=\"262,3819\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 15: Individuelle Treeview-Icons<\/span><\/b><\/p>\n<p>Dazu f&uuml;gen Sie zun&auml;chst die gew&uuml;nschten Icons &uuml;ber das Formular <b>Tool_Icons <\/b>in die Tabelle <b>USys_pTV_Icon <\/b>ein. Danach m&uuml;ssen Sie daf&uuml;r sorgen, dass der Name des jeweiligen Icons im entsprechenden Datensatz der Tabelle <b>tblKategorien <\/b>gespeichert wird. Dazu f&uuml;gen wir der Tabelle das Feld <b>Icon <\/b>hinzu und legen die gew&uuml;nschten Werte an (s. Bild 16). Schlie&szlig;lich passen wir den SQL-Ausdruck in der Prozedzur <b>Form_Open <\/b>des Formulars <b>frmKategorienIndividuelleIcons <\/b>wie folgt an:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_016.png\" alt=\"Verweise auf die Icons in der Tabelle tblKategorien\" width=\"599,593\" height=\"296,7783\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 16: Verweise auf die Icons in der Tabelle tblKategorien<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objTreeView = Me!sfmTreeview.Form\r\n     strSQL = \"SELECT KategorieID AS Reference, \" _\r\n         & \"Kategoriename AS Caption, \" _\r\n         & \"''''Kategorie'''' AS RefContext, \" _\r\n         & \"Icon AS IconName \" _\r\n         & \"FROM tblKategorien\"\r\n     objTreeView.AddSQL strSQL\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wir haben hier also nicht wie im vorherigen Beispiel eine feste Zeichenfolge f&uuml;r das anzuzeigende Icon angegeben, sondern den Namen des Feldes mit dem Namen des Icons.<\/p>\n<h2>Icon f&uuml;r die Schaltfl&auml;che zum Ein- und Ausklappen &auml;ndern<\/h2>\n<p>Zugegeben: Das Plus- und da Minuszeichen, das standardm&auml;&szlig;ig im picoware-Treeview angezeigt wird, gef&auml;llt uns wirklich gut. Aber vielleicht nicht allen Programmierern und Benutzern! Also k&ouml;nnen Sie diese Symbole nat&uuml;rlich auch &auml;ndern. Dazu verwenden wir ausnahmsweise nicht die SQL-Anweisung, sondern eine Eigenschaft der Objektvariablen objTreeView. Diese passen wir etwa im Formular <b>frmKategorienArtikelIcons <\/b>wie folgt in der Prozedur <b>Form_Open <\/b>an:<\/p>\n<pre>objTreeView.IconPrefix = \"WinXP\"<\/pre>\n<p>Dies liefert nun die von Windows XP bekannten Icons f&uuml;r die Plus- und Minuszeichen (s. Bild 17). Aber woher wissen wir, dass wir dazu beispielsweise das Pr&auml;fix <b>WinXP <\/b>verwenden m&uuml;ssen Dazu reicht ein Blick in das Formular <b>Tool_Icons<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_017.png\" alt=\"Alternative Plus-\/Minuszeichen\" width=\"424,7115\" height=\"233,7955\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 17: Alternative Plus-\/Minuszeichen<\/span><\/b><\/p>\n<p>Hier k&ouml;nnen Sie durch Filtern nach dem Ausdruck <b>*Plus <\/b>f&uuml;r die Spalte <b>Context <\/b>alle Plus-Zeichen einblenden, die verf&uuml;gbar sind (s. Bild 18).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_018.png\" alt=\"Alle alternativen Plus-\/Minuszeichen\" width=\"499,6607\" height=\"395,0569\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 18: Alle alternativen Plus-\/Minuszeichen<\/span><\/b><\/p>\n<p>Lesen Sie einfach das Pr&auml;fix des gew&uuml;nschten Sets aus, also den Teil vor dem Unterstrich (<b>_<\/b>) und tragen Sie diesen f&uuml;r die Eigenschaft <b>IconPrefix <\/b>der Objektvariablen <b>objTreeView <\/b>ein. Sie k&ouml;nnen nat&uuml;rlich auch eigene Sets dieser Elemente anlegen.<\/p>\n<h2>Mausklick auf einen Eintrag<\/h2>\n<p>Neben dem Aus- und Einklappen von Treeview-Eintr&auml;gen ist eine der wichtigsten Funktionen nat&uuml;rlich der Mausklick auf einen der Eintr&auml;ge. <\/p>\n<p>F&uuml;r die folgenden Beispiele haben wir das Formular <b>frmKategorieArtikelIcons <\/b>nach <b>frmKategorieArtikelMausklick <\/b>kopiert.<\/p>\n<p>Wir wollen nun zun&auml;chst erreichen, dass ein Meldungsfenster mit dem Prim&auml;rschl&uuml;sselwert des angeklickten Elements erscheint.<\/p>\n<p>Dazu f&uuml;gen wir dem Klassenmodul des Formulars die Ereignisprozedur <b>ItemSelected <\/b>des Elements <b>objTreeView <\/b>hinzu &#8211; wie weiter oben beschrieben &uuml;ber die beiden Kombinationsfelder des VBA-Codefensters. Dieses f&uuml;llen wir wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>objTreeView_ItemSelected(Context<span style=\"color:blue;\"> As <\/span> USys_pCT_Context, _\r\n        ByVal RefPath<span style=\"color:blue;\"> As String<\/span>)\r\n    <span style=\"color:blue;\">MsgBox<\/span> Context.SettingLong(\"Reference\", 0)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Wenn Sie nun auf einen der Eintr&auml;ge klicken und diesen so als aktiven Eintrag ausw&auml;hlen, wird dieser nicht nur in blauer und fetter Schrift dargestellt, sondern es erscheint auch noch ein Meldungsfenster, das den Prim&auml;rschl&uuml;sselwert des aktuellen Eintrags ausgibt (s. Bild 19).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_019.png\" alt=\"Ausgabe der ID des angeklickten Elements\" width=\"424,7115\" height=\"291,3844\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 19: Ausgabe der ID des angeklickten Elements<\/span><\/b><\/p>\n<p>Das hilft uns nat&uuml;rlich noch nicht wirklich weiter, wenn wir in mehreren Ebenen die Daten aus verschiedenen Tabellen darstellen. Dann sollten wir noch auf eine der Eigenschaften zugreifen, die wir &uuml;ber den SQL-Ausdruck angeben &#8211; n&auml;mlich den Wert f&uuml;r das Feld mit dem <b>ALIAS<\/b>-Namen <b>RefContext<\/b>.<\/p>\n<p>Also stellen wir der Ausgabe im Meldungsfenster noch ein Element voran, welches &uuml;ber die <b>Setting<\/b>-Eigenschaft den Wert der Einstellung <b>RefContext <\/b>f&uuml;r das angeklickte Element ausgibt (s. Bild 20):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_05\/pic_1098_020.png\" alt=\"Ausgabe der Quelle und der ID des angeklickten Elements\" width=\"424,7115\" height=\"288,7202\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 20: Ausgabe der Quelle und der ID des angeklickten Elements<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">MsgBox<\/span> Context.Setting(\"RefContext\") & \" \" & Context.SettingLong(\"Reference\", 0)<\/pre>\n<p>Welche M&ouml;glichkeiten sich daraus ergeben, brauchen wir f&uuml;r Entwickler, die sich bereits mit dem MSCOMCTL-TreeView auseinandergesetzt haben, nicht zu erl&auml;utern. Meist sollen beim Anklicken von TreeView-Elementen entsprechende Unterformulare mit den Daten zu den jeweiligen Eintr&auml;gen ge&ouml;ffnet werden.<\/p>\n<p>Sie k&ouml;nnen nun &uuml;ber das Ergebnis von <b>Context.Setting(&#8222;RefContext&#8220;) <\/b>ermitteln, welche Art von Objekt anzuzeigen ist und das entsprechende Unterformular einblenden, mit <b>Context.SettingLong(&#8222;Reference&#8220;, 0)<\/b> ermitteln Sie den Prim&auml;rschl&uuml;sselwert des darin anzuzeigenden Datensatzes der zugrunde liegenden Tabelle.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Es gibt noch viele weitere Funktionen, die sich mit dem picoware-Treeview abbilden lassen. In vielen F&auml;llen gelingt dies wesentlich einfacher als mit dem <b>MSCOMCTL<\/b>-TreeView, und auf jeden Fall haben Sie die Sicherheit, dass das picoware-Treeview nicht versagt, wenn Microsoft wieder einmal ein unzureichend getestetes Update durchf&uuml;hrt. <\/p>\n<p>Au&szlig;erdem k&ouml;nnen Sie damit erstellte Treeviews auch auf Systemen nutzen, die mit der 64bit-Variante von Office arbeiten.<\/p>\n<p>Mit dem picoware-Treeview k&ouml;nnen Sie noch viele weitere Anpassungen am Design vornehmen, zur Laufzeit Knoten einf&uuml;gen und entfernen, den Hintergrund farbig gestalten, Status- und Checkboxen nutzen, Daten aus reflexiv verkn&uuml;pften Tabellen anzeigen und mehr.<\/p>\n<p>Wenn Sie uns das Feedback liefern, dass das picoware-Treeview eine Alternative f&uuml;r das <b>MSCOMCTL<\/b>-TreeView ist, werden wir in weiteren Ausgaben auch die &uuml;brigen Funktionen des picoware-Treeviews vorstellen.<\/p>\n<h2>Download<\/h2>\n<p><a href=\"https:\/\/shop.minhorst.com\/media\/archive\/6c\/46\/e5\/picowareTreeViewAiU.zip\" target=\"_self\">Beispieldatenbank im accde-Format f&uuml;r Access 2016 und Artikel als PDF<\/a><\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>picowareTreeViewAiU.accde<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/7A4C57AD-ED21-47EF-AE01-7EE26A88F4A7\/aiu_1098.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Juli\/August 2017 war es wieder mal soweit: Microsoft hat ein Update f&uuml;r einige Office-Varianten geliefert, das die TreeView-Steuerelemente in den Anwendungen auf den betroffenen Rechnern lahmgelegt hat. Zwar gibt es ein paar Wochen sp&auml;ter immer einen Patch oder ein weiteres Update zur Behebung des Fehlers, aber wer kurzfristig handeln muss, darf manuell an der Datei MSCOMCTL.ocx und\/oder der Registry herumpfuschen. Das kann man nat&uuml;rlich keinem Kunden zumuten, daher zeigen wir eine m&ouml;gliche L&ouml;sung.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662017,66052017,44000012],"tags":[],"class_list":["post-55001098","post","type-post","status-publish","format-standard","hentry","category-662017","category-66052017","category-News_und_Tools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Treeview ohne MSCOMCTL - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Treeview ohne MSCOMCTL\" \/>\n<meta property=\"og:description\" content=\"Im Juli\/August 2017 war es wieder mal soweit: Microsoft hat ein Update f&uuml;r einige Office-Varianten geliefert, das die TreeView-Steuerelemente in den Anwendungen auf den betroffenen Rechnern lahmgelegt hat. Zwar gibt es ein paar Wochen sp&auml;ter immer einen Patch oder ein weiteres Update zur Behebung des Fehlers, aber wer kurzfristig handeln muss, darf manuell an der Datei MSCOMCTL.ocx und\/oder der Registry herumpfuschen. Das kann man nat&uuml;rlich keinem Kunden zumuten, daher zeigen wir eine m&ouml;gliche L&ouml;sung.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:26:37+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/764af72df71b491dadf74465d5d13e4d\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"23\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Treeview ohne MSCOMCTL\",\"datePublished\":\"2020-05-13T21:26:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/\"},\"wordCount\":4146,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/764af72df71b491dadf74465d5d13e4d\",\"articleSection\":[\"2017\",\"5\\\/2017\",\"News und Tools\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/\",\"name\":\"Treeview ohne MSCOMCTL - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/764af72df71b491dadf74465d5d13e4d\",\"datePublished\":\"2020-05-13T21:26:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/764af72df71b491dadf74465d5d13e4d\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/764af72df71b491dadf74465d5d13e4d\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Treeview_ohne_MSCOMCTL\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Treeview ohne MSCOMCTL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Treeview ohne MSCOMCTL - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/","og_locale":"de_DE","og_type":"article","og_title":"Treeview ohne MSCOMCTL","og_description":"Im Juli\/August 2017 war es wieder mal soweit: Microsoft hat ein Update f&uuml;r einige Office-Varianten geliefert, das die TreeView-Steuerelemente in den Anwendungen auf den betroffenen Rechnern lahmgelegt hat. Zwar gibt es ein paar Wochen sp&auml;ter immer einen Patch oder ein weiteres Update zur Behebung des Fehlers, aber wer kurzfristig handeln muss, darf manuell an der Datei MSCOMCTL.ocx und\/oder der Registry herumpfuschen. Das kann man nat&uuml;rlich keinem Kunden zumuten, daher zeigen wir eine m&ouml;gliche L&ouml;sung.","og_url":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:26:37+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/764af72df71b491dadf74465d5d13e4d","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"23\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Treeview ohne MSCOMCTL","datePublished":"2020-05-13T21:26:37+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/"},"wordCount":4146,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/764af72df71b491dadf74465d5d13e4d","articleSection":["2017","5\/2017","News und Tools"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/","url":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/","name":"Treeview ohne MSCOMCTL - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/764af72df71b491dadf74465d5d13e4d","datePublished":"2020-05-13T21:26:37+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/764af72df71b491dadf74465d5d13e4d","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/764af72df71b491dadf74465d5d13e4d"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Treeview_ohne_MSCOMCTL\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Treeview ohne MSCOMCTL"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001098","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001098"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001098\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}