{"id":55000578,"date":"2008-04-01T00:00:00","date_gmt":"2021-02-11T21:20:06","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=578"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Steuerelemente_zur_Laufzeit_verschieben","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/","title":{"rendered":"Steuerelemente zur Laufzeit verschieben"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/2253436d512f4ec0b870cecd502d3ab3\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Was soll das denn Steuerelemente verschieben &#8211; zur Laufzeit Soll der Benutzer nun aktiv in die Gestaltung der Benutzeroberfl&auml;che eingreifen Mitnichten: Es gibt jedoch eine Reihe ernsthafter Anwendungsf&auml;lle, bei denen das Verschieben von Steuerelementen Sinn macht. Einen haben wir im Beitrag &euro;&#158;Splitter f&uuml;r Formulare&euro;&#156; bereits vorgestellt, aber es gibt noch mehr Gelegenheiten zum Einsatz dieser Technik, die wir hier grundlegend darstellen.<\/b><\/p>\n<p>W&auml;hrend der selbst programmierte Splitter aus dem Artikel Splitter f&uuml;r Formulare (Shortlink 397) rein der Optimierung der Benutzeroberfl&auml;che dient, gibt es auch M&ouml;glichkeiten, verschiebbare Steuerelemente zur Darstellung von Daten einzusetzen.<\/p>\n<p>Wie w&auml;re es etwa mit einem Terminkalender, dessen Termine Sie nach Lust und Laune mit der Maus bewegen k&ouml;nnen &#8211; oder einer Raumplanung, die das Platzieren von Tischen und St&uuml;hlen erlaubt Davon sind wir jedoch noch ein St&uuml;ck entfernt, denn zun&auml;chst ist ein Blick auf die grundlegende Technik n&ouml;tig.<\/p>\n<p>F&uuml;r den Start verwenden wir einfach ein Rechteck-Steuerelement, das Sie durch Anpassen einiger Eigenschaften ein wenig versch&ouml;nern (siehe Bild 1). Der Schl&uuml;ssel zum Bewegen eines Steuerelements ist ein VBA-Ereignis, das immer dann ausgel&ouml;st wird, wenn sich der Mauszeiger &uuml;ber dem Steuerelement befindet, dem das Ereignis zugeordnet ist. Es hei&szlig;t <b>Bei Mausbewegung <\/b>und l&ouml;st die folgende Prozedur aus, die bereits mit einer Anweisung zum Ausgeben der durch die Parameter gelieferten Werte gef&uuml;llt ist:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/SteuerelementeVerschieben-web-images\/pic001_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Dieses Rechteck-Steuerelement soll gleich in der Formularansicht durch die Gegend geschoben werden.<\/span><\/b><\/p>\n<pre>Private Sub rctBeispiel_MouseMove(Button As _\r\n    Integer, Shift As Integer, X As Single, _\r\n    Y As Single)\r\n    Debug.Print Button, Shift, X, Y\r\n    End Sub<\/pre>\n<p>Diese Routine ist auch der erste Schritt auf dem Weg zum Verschieben eines Steuerelements: Wenn Sie nun das Access-Fenster und das VBA-Fenster so nebeneinander positionieren, dass Sie das Direktfenster sehen, k&ouml;nnen Sie einfach einmal mit der Maus mit und ohne gedr&uuml;ckte Maustasten &uuml;ber das Steuerelement fahren. Die Parameter lesen sich dabei wie folgt:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Button <\/b>liefert einen Zahlenwert, der die aktuell bet&auml;tigte Maustaste repr&auml;sentiert. <b>1 <\/b>entspricht der linken, <b>2 <\/b>der rechten und der Wert <b>3 <\/b>zeigt an, dass beide Maustasten zugleich gedr&uuml;ckt werden. Diese Zahlenwerte entsprechen den Konstanten <b>acLeftButton <\/b>(<b>1<\/b>), <b>acRightButton <\/b>(<b>2<\/b>) und <b>acMiddleButton <\/b>(<b>4<\/b>).<\/li>\n<li class=\"aufz-hlung\"><b>Shift <\/b>zeigt an, ob der Benutzer w&auml;hrend der Mausbewegung eine oder mehrere der Tasten <b>Shift <\/b>(<b>1<\/b>), <b>Strg <\/b>(<b>2<\/b>) oder <b>Alt <\/b>(<b>4<\/b>) gedr&uuml;ckt h&auml;lt. Es sind auch Kombinationen m&ouml;glich, die sich in der Summe der Zahlenwerte widerspiegeln: <b>7 <\/b>entspricht beispielsweise der Tastenkombination <b>Shift + Strg + Alt<\/b> (auch hier gibt es passende Konstanten: <b>acShiftMask <\/b>(<b>1<\/b>), <b>acCtrlMask <\/b>(<b>2<\/b>) und <b>acAltMask <\/b>(<b>4<\/b>)).<\/li>\n<li class=\"aufz-hlung\"><b>X <\/b> und <b>Y <\/b>entsprechen der horizontalen und der vertikalen Entfernung von der linken oberen Ecke des Steuerelements.<\/li>\n<\/ul>\n<p><b>X <\/b>und <b>Y <\/b>werden in Twips geliefert.<\/p>\n<p><b>Steuerelement verschieben<\/b><\/p>\n<p>Das Steuerelement soll nur verschoben werden, wenn der Benutzer die typische Drag-and-Drop-Mimik ausf&uuml;hrt, also die Maustaste anklickt, w&auml;hrend sich der Mauszeiger &uuml;ber dem Steuerelement befindet, und das Steuerelement verschiebt, wenn der Benutzer die Maus bei gedr&uuml;ckter Maustaste bewegt. Das l&auml;sst sich theoretisch einfach nachbilden: Sie brauchen sich nur einmal zu Beginn des Drag-and-Drop-Vorgangs die Position des Mauszeigers zu merken und passen dann bei jedem Aufruf von <b>Bei Mausbewegung <\/b>die Position des Steuerelements &uuml;ber die durch die Maus zur&uuml;ckgelegte Strecke an.<\/p>\n<p>F&uuml;r die X-Komponenten bedeutet dies: X-Position des Mauszeigers merken, X-Position des Formulars ermitteln, alte X-Position des Mauszeigers von der neuen X-Position abziehen und X-Position des Formulars um diese Differenz &auml;ndern. Sie brauchen also zun&auml;chst zwei modulweit deklarierte Variablen zum Speichern der Startposition des Mauszeigers:<\/p>\n<pre>Dim lngXStart As Long\r\nDim lngYStart As Long<\/pre>\n<p>Diese ermitteln Sie einmalig beim Herunterdr&uuml;cken der linken Maustaste:<\/p>\n<pre>Private Sub rctBeispiel_MouseDown(Button As _\r\n    Integer, Shift As Integer, X As Single, _\r\n    Y As Single)\r\n    If Button = 1 Then\r\n        lngXStart = X\r\n        lngYStart = Y\r\n    End If\r\n    End Sub<\/pre>\n<p>Die folgende Routine wird nicht etwa in festen zeitlichen Intervallen, sondern beim Verschieben des Mauszeigers um eine bestimmte Entfernung in eine der beiden Richtungen ausgel&ouml;st. Sie pr&uuml;ft, ob die linke Maustaste gedr&uuml;ckt ist, und stellt die <b>Top<\/b>&#8211; und die <b>Left<\/b>-Eigenschaften des Steuerelements ein, die f&uuml;r seine Position verantwortlich sind.<\/p>\n<pre>Private Sub rctBeispiel_MouseMove(Button As _\r\n    Integer, Shift As Integer, X As Single, _\r\n    Y As Single)\r\n    If Button = 1 Then\r\n        With rctBeispiel\r\n        .Top = .Top + Y - lngYStart\r\n        .Left = .Left + X - lngXStart\r\n        End With\r\n    End If\r\n    End Sub<\/pre>\n<p>Beim Ausprobieren dieser Technik werden Sie schnell an deren Grenzen sto&szlig;en &#8211; genau dann n&auml;mlich, wenn das Steuerelement an die Grenzen des Formulars st&ouml;&szlig;t. Wenn die Routine versucht, das Steuerelement aus dem Formular herauszubewegen, l&ouml;st dies eine Fehlermeldung aus. Dies umgehen Sie durch aufw&auml;ndige Pr&uuml;fungen oder durch Hinzuf&uuml;gen der folgenden Zeile in den Kopf der Routine:<\/p>\n<pre>On Error Resume Next<\/pre>\n<p><b>Gr&ouml;&szlig;e des Steuerelements ver&auml;ndern<\/b><\/p>\n<p>Wenn Sie ein Steuerelement schon zur Laufzeit verschieben, k&ouml;nnen Sie auch seine Gr&ouml;&szlig;e anpassen.<\/p>\n<p>Das soll aus Gr&uuml;nden der Einfachheit nur funktionieren, wenn der Benutzer das Steuerelement mit dem Mauszeiger an der rechten oder unteren Kante &euro;&#158;anfasst&euro;&#156;.<\/p>\n<p>Das Wichtigste ist, dass der Benutzer wei&szlig;, dass er das Steuerelement nun nicht verschiebt, sondern vergr&ouml;&szlig;ert oder verkleinert. Und dazu &auml;ndern Sie den Mauszeiger in eine entsprechende Linie mit zwei Pfeilspitzen &#8211; genau so wie in Bild 2.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/SteuerelementeVerschieben-web-images\/pic002_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Anzeigen eines alternativen Mauszeigers beim &Atilde;&#8220;ndern der Gr&ouml;&szlig;e eines Steuerelements<\/span><\/b><\/p>\n<p>Das &Atilde;&#8220;ndern des Mauszeigers ist relativ einfach: Sie erreichen dies durch den Befehl <b>Screen.MousePointer = 9<\/b>, f&uuml;r den gleichen Pfeil in vertikaler Ausrichtung geben Sie den Wert <b>11 <\/b>an.<\/p>\n<p>Damit der jeweilige Mauszeiger nur am rechten beziehungsweise unteren Rand erscheint, f&uuml;gen Sie eine kleine <b>If&#8230;Then<\/b>-Bedingung ein, die pr&uuml;ft, ob sich der Pfeil innerhalb eines Bereichs von 100 Twips links vom rechten Rand oder oberhalb vom unteren Rand befindet. Falls dies der Fall ist, m&uuml;ssen Sie noch pr&uuml;fen, ob der Benutzer bei der Mausbewegung auch noch die linke Maustaste geklickt hat: Dann &auml;ndern Sie den Wert der Eigenschaften <b>Width <\/b>beziehungsweise <b>Height <\/b>des Steuerelements entsprechend.<\/p>\n<p>Das folgende Listing zeigt die Ereignisprozedur, die beim Bewegen der Maus ausgel&ouml;st wird, im Zusammenhang:<\/p>\n<pre>Private Sub rctBeispiel_MouseMove(Button As _\r\n    Integer, Shift As Integer, X As Single, _\r\n    Y As Single)\r\n    On Error Resume Next\r\n    With rctBeispiel\r\n    If X &gt; .Width - 100 Then\r\n        If Button = 1 Then\r\n            .Width = .Width + X - lngXStart\r\n            lngXStart = X\r\n        End If\r\n        Screen.MousePointer = 9\r\n    ElseIf Y &gt; .Height - 100 Then\r\n        Screen.MousePointer = 7\r\n        If Button = 1 Then\r\n            .Height = .Height + Y - lngYStart\r\n            lngYStart = Y\r\n        End If\r\n    Else\r\n        Screen.MousePointer = 1\r\n        If Button = 1 Then\r\n            .Top = .Top + Y - lngYStart\r\n            .Left = .Left + X - lngXStart\r\n        End If\r\n    End If\r\n    End With\r\n    End Sub<\/pre>\n<p><!--30percent--><\/p>\n<p>Bei schnellen Bewegungen kann es passieren, dass die Maus den Steuerelementrand &euro;&#158;losl&auml;sst&euro;&#156;. Dieses kleine Problem beheben Sie durch einige weitere Codezeilen, die pr&uuml;fen, ob seit dem letzten Ver&auml;ndern der Gr&ouml;&szlig;e der Mauszeiger losgelassen wurde. Falls nicht, ver&auml;ndert die Routine weiterhin die Gr&ouml;&szlig;e des Steuerelements und nicht die Gr&ouml;&szlig;e. Die fertige Routine finden Sie im Formular <b>frmSteuerelementeVerschieben <\/b>in der Beispieldatenbank. Damit der Mauszeiger beim Verlassen des Steuerelements wieder wie &uuml;blich aussieht, legen Sie noch die folgende Prozedur f&uuml;r das Ereignis <b>Bei Mausbewegung <\/b>des Detailbereichs an:<\/p>\n<pre>Private Sub Detailbereich_MouseMove(Button _\r\n    As Integer, Shift As Integer, X As _\r\n    Single, Y As Single)\r\n    Screen.MousePointer = 1\r\n    End Sub<\/pre>\n<p><b>Viele ver&auml;nderbare Steuerelemente<\/b><\/p>\n<p>Wenn Sie mehrere solcher Steuerelemente in einem Formular unterbringen m&ouml;chten, macht es wenig Spa&szlig;, alle von Hand anzulegen.<\/p>\n<p>Stattdessen verwenden Sie eine kleine Hilfsroutine, die wie in Listing 1 aussieht. Die Routine erstellt eine Reihe <b>Rectangle<\/b>-Elemente und f&uuml;gt diese einfach links oben in das Formular ein. Die Steuerelemente werden von <b>rct01 <\/b>bis <b>rctxx <\/b>benannt.<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Diese Funktion erstellt automatisch zehn Rechteck-Steuerelemente.<\/p>\n<pre>Public Sub Steuerelemente()\r\nDim frm As Form\r\nDim ctl As Control\r\nDim i As Integer\r\nDoCmd.OpenForm &euro;&#156;frmBeispiel&euro;, View:=acDesign, WindowMode:=acHidden\r\nSet frm = Forms!frmBeispiel\r\nFor i = frm.Controls.Count - 1 To 0 Step -1\r\n    Application.DeleteControl frm.Name, frm.Controls(i).Name\r\nNext i\r\nFor i = 1 To 20\r\n    Set ctl = Application.CreateControl(frm.Name, acRectangle, acDetail, , &euro;&#156;ctl&euro; &amp; i)\r\n    ctl.Properties(&euro;&#156;Name&euro;) = &euro;&#156;rct&euro; &amp; Format(i, &euro;&#156;000&euro;)\r\n    ctl.Properties(&euro;&#156;BackStyle&euro;) = &euro;&#156;1&euro;\r\n    ctl.Properties(&euro;&#156;BackColor&euro;) = &euro;&#156;&amp;hcccccc&euro;\r\n    Debug.Print i\r\nNext i\r\nDoCmd.Close acForm, &euro;&#156;frmBeispiel&euro;, acSaveYes\r\nEnd Sub<\/pre>\n<p>Nun ist es so, dass es recht eint&ouml;nig ist, f&uuml;r alle Steuerelemente die ben&ouml;tigten Ereignisprozeduren anzulegen &#8211; schlechte Laune ist dabei ebenso vorprogrammiert wie Tippfehler. Wer nicht gern mal was Kompliziertes in Angriff nimmt, sollte hier nicht weiterlesen &#8211; dieser Teil bis zur n&auml;chsten Zwischen&uuml;berschrift ist f&uuml;r echte Profis gedacht.<\/p>\n<p>Im Folgenden werden Sie zwei Klassen und eine <b>Collection<\/b> anlegen, mit denen Folgendes passiert:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Das Formular <b>frmBeispiel <\/b>mit seinen Rechteck-Steuerelementen erzeugt beim &Atilde;-ffnen eine Instanz der ersten Klasse namens <b>clsCodeFrmBeispiel <\/b>und &uuml;bergibt dieser einen Verweis auf sich selbst, also das <b>Form<\/b>-Objekt. Wie der Name der Klasse schon sagt, soll diese den Code des Formulars enthalten.<\/li>\n<li class=\"aufz-hlung\">Diese Klasse nimmt den Verweis auf das <b>Form<\/b>-Objekt auf und weist es einer <b>Form<\/b>-Objektvariablen namens <b>mForm <\/b>zu, die mit dem Schl&uuml;sselwort <b>WithEvents <\/b>deklariert ist. Profis wissen, was dies bedeutet: F&uuml;r dieses Objekt kann man Ereignisprozeduren anlegen, die &#8211; genau wie beim Formular, auf das die Objektvariable verweist &#8211; bei passender Gelegenheit ausgel&ouml;st werden. Hier handelt es sich um das <b>MouseOver<\/b>-Ereignis des Detailbereichs, das sicherstellt, dass der Mauszeiger beim &Atilde;&#156;berfahren dieses Bereichs wieder normal angezeigt wird.<\/li>\n<li class=\"aufz-hlung\">Beim Aufnehmen des Verweises macht die Klasse <b>clsCodeFrmBeispiel <\/b>aber noch mehr: Sie erzeugt n&auml;mlich f&uuml;r jedes <b>Rectangle<\/b>-Steuerelement ein weiteres Objekt auf Basis der Klasse <b>clsCodeRectangle<\/b>. Sie weist diesem Objekt Verweise auf die einzelnen im Formular enthaltenen Rechteck-Steuerelemente zu.<\/li>\n<li class=\"aufz-hlung\">Diese Klasse legt f&uuml;r das &uuml;bergebene Rechteck-Steuerelement wiederum Ereignisprozeduren an &#8211; und zwar genau die drei, die Sie oben schon kennen gelernt haben, n&auml;mlich <b>MouseOver<\/b>, <b>MouseDown <\/b>und <b>MouseUp<\/b>.<\/li>\n<li class=\"aufz-hlung\">Anschlie&szlig;end, und das ist besonders wichtig, f&uuml;gt es die Objekte, welche die Rechtecke repr&auml;sentieren, zu einer Collection hinzu. Dies hat den Zweck, dass die Objekte nach dem Erstellen nicht im Nirwana verschwinden, sondern an einem sicheren Ort gespeichert bleiben.<\/li>\n<li class=\"aufz-hlung\">Somit haben Sie nun erstens die Formular-Funktionalit&auml;t weitgehend in die Klasse <b>clsCodeFrmBeispiel<\/b> ausgegliedert &#8211; was eigentlich nicht unbedingt n&ouml;tig gewesen w&auml;re &#8211; und sich, was sehr sinnvoll war, die Arbeit gespart, jedes einzelne Rechteck-Steuerelement mit den drei ben&ouml;tigten Ereignisprozeduren zu versehen.<\/li>\n<\/ul>\n<p>Der Code im Formular besteht nur aus wenigen Zeilen:<\/p>\n<pre>Dim objCode As clsCodeFrmBeispiel\r\nPrivate Sub Form_Load()\r\n    Set objCode = New clsCodeFrmBeispiel\r\n    Set objCode.HostForm = Me\r\n    End Sub<\/pre>\n<p>Auch der Code der Klasse <b>clsCodeFrmBeispiel <\/b>ist nicht besonders umfangreich. <\/p>\n<pre>Private colControls As Collection\r\nPrivate WithEvents mForm As Form\r\nPrivate objRectangle As clsCodeRectangle\r\nPrivate WithEvents mDetailbereich As Section\r\nPublic Property Set HostForm(frm As Form)\r\nDim ctl As Control\r\nSet mForm = frm\r\nSet mDetailbereich = mForm.Section(0)\r\nSet colControls = New Collection\r\nmDetailbereich.OnMouseMove = _\r\n&euro;&#156;[Event Procedure]&euro;\r\nFor Each ctl In mForm.Controls\r\n    If Left(ctl.Name, 3) = &euro;&#156;rct&euro; Then\r\n        Set objRectangle = _\r\n        New clsCodeRectangle\r\n        Set objRectangle.HostRectangle = ctl\r\n        colControls.Add objRectangle\r\n    End If\r\nNext ctl\r\nEnd Property\r\nPrivate Sub mDetailbereich_MouseMove(...)\r\n    Screen.MousePointer = 1\r\n    End Sub<\/pre>\n<p>Die Klasse <b>clsCodeRectangle <\/b>ist, wenn man den Code der drei Ereignisprozeduren zusammenstreicht, ebenfalls &uuml;berschaubar:<\/p>\n<pre>Private WithEvents mRectangle As Rectangle\r\nPrivate mXStart As Long\r\nPrivate mYStart As Long\r\nPrivate mSizeX As Boolean\r\nPrivate mSizeY As Boolean\r\nPrivate mPos As Boolean\r\nPublic Property Set HostRectangle(objRectangle _\r\nAs Rectangle)\r\nSet mRectangle = objRectangle\r\nmRectangle.OnMouseDown = &euro;&#156;[Event Procedure]&euro;\r\nmRectangle.OnMouseMove = &euro;&#156;[Event Procedure]&euro;\r\nmRectangle.OnMouseUp = &euro;&#156;[Event Procedure]&euro;\r\nEnd Property\r\nPrivate Sub mRectangle_MouseDown(...)\r\n    ...\r\n    End Sub\r\nPrivate Sub mRectangle_MouseMove(...)\r\n    ...\r\n    End Sub\r\nPrivate Sub mRectangle_MouseUp(...)\r\n    ...\r\n    End Sub<\/pre>\n<p>Mit der oben genannten Hilfsfunktion zum Anlegen von Rechtecken und den dynamisch hinzugef&uuml;gten Ereignisprozeduren k&ouml;nnen Sie immerhin 341 Rechteck-Steuerelemente zum Formular hinzuf&uuml;gen und durch die Gegend schieben. Also, wenn Sie mal nichts zu tun haben &#8230; Aber Scherz beiseite: Nat&uuml;rlich gibt es Anwendungsf&auml;lle f&uuml;r so etwas und &uuml;blicherweise sollte die Anzahl der Steuerelemente auch ausreichen.<\/p>\n<p>Wichtig ist nat&uuml;rlich, dass Sie auch s&auml;mtliche anderen Steuerelemente anstatt der hier aus optischen Gr&uuml;nden verwendeten Rechtecke einsetzen. Sie sollten allerdings sicherstellen, dass sich die Steuerelemente leicht verschieben lassen &#8211; bei einem Textfeld wird dies beispielsweise schwierig, weil man hier entweder nur den Cursor im angezeigten Text platzieren oder das Steuerelement mit der Maus verschieben kann.<\/p>\n<p>Wenn Sie also beispielsweise Kalendereintr&auml;ge durch die Steuerelemente darstellen m&ouml;chten, verwenden Sie doch einfach normale Beschriftungsfelder, die etwa den Termin-Text anzeigen, und wandeln Sie diese beim Doppelklick in ein Textfeld um. Um die Anzahl der Steuerelemente brauchen Sie sich immer noch nicht zu sorgen, denn Sie brauchen ja nur auf eines der 341 &uuml;brigen Steuerelemente zugunsten des Textfelds zu verzichten &#8211; mehr als eines kann der Benutzer ja ohnehin nicht bearbeiten.<\/p>\n<p>Und wer bis hierhin mitgelesen hat, soll nat&uuml;rlich auch noch mit einem Screenshot des Ergebnisses belohnt werden &#8211; siehe Bild 3.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/SteuerelementeVerschieben-web-images\/pic003_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Das Formular frmBeispiel l&auml;dt zum fr&ouml;hlichen Rechteck-Verschieben ein.<\/span><\/b><\/p>\n<p><b>Positionen speichern<\/b><\/p>\n<p>Interessant ist es nat&uuml;rlich, den Steuerelementen Daten zuzuordnen und umgekehrt. In der einfachen Erweiterung des vorliegenden Beispiels soll sich das Formular beim Schlie&szlig;en die Position der Rechtecke merken und diese beim &Atilde;-ffnen wieder herstellen.<\/p>\n<p>Dazu brauchen Sie eine Tabelle namens <b>tblRechtecke<\/b>, die mit den Feldern <b>RechteckID<\/b>, <b>Bezeichnung<\/b>, <b>PositionX<\/b>, <b>PositionY<\/b>, <b>SizeX <\/b>und <b>SizeY <\/b>ausgestattet ist. Dem Formular f&uuml;gen Sie eine Schaltfl&auml;che namens <b>cmdOK <\/b>hinzu, die im Wesentlichen alle Steuerelemente durchl&auml;uft, schaut, ob diese mit <b>rct <\/b>beginnen, und ihre Daten in die Tabelle schreibt:<\/p>\n<pre>Set rst = db.OpenRecordset(&euro;&#156;tblRechtecke&euro;, _\r\ndbOpenDynaset)\r\nFor Each ctl In Me.Controls\r\n    Debug.Print ctl.Name\r\n    If Left(ctl.Name, 3) = &euro;&#156;rct&euro; Then\r\n        rst.FindFirst &euro;&#156;Bezeichnung = &euro;&#154;&euro;&#156; &amp; ctl.Name &amp; &euro;&#156;&euro;&euro;&#156;\r\n        If rst.NoMatch Then\r\n            rst.AddNew\r\n            rst!Bezeichnung = ctl.Name\r\n        Else\r\n            rst.Edit\r\n        End If\r\n        rst!PositionX = ctl.Left\r\n        rst!PositionY = ctl.Top\r\n        rst!SizeX = ctl.Width\r\n        rst!SizeY = ctl.Height\r\n        rst.Update\r\n    End If\r\nNext ctl<\/pre>\n<p>Nicht viel anders agieren die Codezeilen, die Sie der Ereignisprozedur <b>Beim Laden <\/b>hinzuf&uuml;gen. Diese durchlaufen ebenfalls die Steuerelemente und suchen aus der Tabelle die passenden Informationen, um sie den Steuerelementen zuzuweisen:<\/p>\n<pre>Set rst = db.OpenRecordset(&euro;&#156;tblRechtecke&euro;, _\r\ndbOpenDynaset)\r\nFor Each ctl In Me.Controls\r\n    If Left(ctl.Name, 3) = &euro;&#156;rct&euro; Then\r\n        rst.FindFirst &euro;&#156;Bezeichnung = &euro;&#154;&euro;&#156; _\r\n        &amp; ctl.Name &amp; &euro;&#156;&euro;&euro;&#156;\r\n        If Not rst.NoMatch Then\r\n            ctl.Left = rst!PositionX\r\n            ctl.Top = rst!PositionY\r\n            ctl.Width = rst!SizeX\r\n            ctl.Height = rst!SizeY\r\n        End If\r\n    End If\r\nNext ctl<\/pre>\n<p><b>Rahmen aufziehen<\/b><\/p>\n<p>Und da wir gerade bei Experimenten mit Rechtecken sind: M&ouml;glicherweise m&ouml;chten Sie dem Benutzer ja irgendwann einmal die M&ouml;glichkeit bieten, einen Rahmen aufzuziehen &#8211; beispielsweise, um mehrere der just kreierten Rechtecke gleichzeitig zu erfassen. Hier beschr&auml;nken wir uns auf einen einzigen Rahmen, ein Ausgliedern von Funktionalit&auml;t in externe Klassen ist hier nicht notwendig. Sie brauchen zwei Variablen, mit denen Sie sich die Position beim Start des Aufziehens merken k&ouml;nnen:<\/p>\n<pre>Dim lngStartX As Long\r\nDim lngStartY As Long<\/pre>\n<p>Au&szlig;erdem bauen Sie ein unsichtbares Rechteck mit transparentem Hintergrund und schwarzem Rahmen in das Zielformular ein. Es soll <b>rctRahmen <\/b>hei&szlig;en. Die <b>MouseDown<\/b>-Ereignisprozedur beginnt, wenn der Benutzer eine Maustaste herunterdr&uuml;ckt, und merkt sich die Position des Mauszeigers zu diesem Zeitpunkt. Wenn der Benutzer den linken Mauszeiger gedr&uuml;ckt hat, macht die Routine das Rechteck sichtbar und ganz klein, Letzteres durch das Einstellen der beiden Eigenschaften <b>Width <\/b>und <b>Height <\/b>auf den Wert <b>0<\/b>.<\/p>\n<pre>Private Sub Detailbereich_MouseDown(...)\r\n    lngStartX = X\r\n    lngStartY = Y\r\n    If Button = 1 Then\r\n        With Me.rctRahmen\r\n        .Visible = False\r\n        .Width = 0\r\n        .Height = 0\r\n        End With\r\n    End If\r\n    End Sub<\/pre>\n<p>Danach wird der Benutzer den Mauszeiger zweifelsohne entweder irgendwohin ziehen oder aber die Schaltfl&auml;che wieder loslassen. Ersteres f&uuml;hrt zum Aufruf der folgenden Routine: Sie pr&uuml;ft zun&auml;chst, ob der Benutzer den Mauszeiger m&ouml;glicherweise links oder oben aus dem Formular herauszieht, und setzt die von der Prozedur &uuml;bermittelten Werte f&uuml;r <b>X <\/b>und <b>Y <\/b>auf den Wert <b>0<\/b>. H&auml;lt der Benutzer den Mauszeiger immer noch gedr&uuml;ckt, passen die innerhalb der <b>If Button = 1<\/b>-Bedingung enthaltenen Anweisungen das Rechteck-Steuerelement so an, dass es immer zwischen dem Startpunkt und der aktuellen Position des Mauszeigers aufgezogen wird.<\/p>\n<pre>If X &lt; 0 Then X = 0\r\nIf Y &lt; 0 Then Y = 0\r\nIf Button = 1 Then\r\n    With Me.rctRahmen\r\n    .Visible = True\r\n    .Left = lngStartX\r\n    .Top = lngStartY\r\n    If X - .Left &gt; 0 Then\r\n        .Left = lngStartX\r\n        .Width = X - .Left\r\n    Else\r\n        .Left = X\r\n        .Width = lngStartX - X\r\n    End If\r\n    If Y - .Top &gt; 0 Then\r\n        .Top = lngStartY\r\n        .Height = Y - .Top\r\n    Else\r\n        .Top = Y\r\n        .Height = lngStartY - Y\r\n    End If\r\n    End With\r\nEnd If<\/pre>\n<p>L&auml;sst der Benutzer schlie&szlig;lich die Mausschaltfl&auml;che los, verschwindet das aufgezogene Rechteck wieder:<\/p>\n<pre>Private Sub Detailbereich_MouseUp(...)\r\n    Me.rctRahmen.Visible = False\r\n    End Sub<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Ideen f&uuml;r den Einsatz der hier vorgestellten und darauf aufbauenden Techniken gibt es ausreichend. Sie k&ouml;nnten beispielsweise eine der verschiedenen Kalenderansichten nachbilden &#8211; zum Beispiel eine Wochen- oder Tages&uuml;bersicht. Wie das funktioniert, erfahren Sie in der L&ouml;sung <b>Tageskalender-Formular <\/b>in der n&auml;chsten Ausgabe (Shortlink 576).<\/p>\n<p>Der Nachteil der hier vorgestellten Technik ist, dass Sie die ben&ouml;tigten Steuerelemente in ausreichender Zahl bereitstellen m&uuml;ssen. Sie sollten also vor dem Einsatz pr&uuml;fen, ob der Anwendungsfall zu den technischen M&ouml;glichkeiten dieser L&ouml;sung passt.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>SteuerelementeVerschieben.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/18D4B906-BF76-4382-9FEB-1C613C51A741\/aiu_578.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was soll das denn Steuerelemente verschieben &#8211; zur Laufzeit Soll der Benutzer nun aktiv in die Gestaltung der Benutzeroberfl&auml;che eingreifen Mitnichten: Es gibt jedoch eine Reihe ernsthafter Anwendungsf&auml;lle, bei denen das Verschieben von Steuerelementen Sinn macht. Einen haben wir im Beitrag &#8222;Splitter f&uuml;r Formulare&#8220; bereits vorgestellt, aber es gibt noch mehr Gelegenheiten zum Einsatz dieser Technik, die wir hier grundlegend darstellen.<\/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":[66022008,662008,44000023],"tags":[],"class_list":["post-55000578","post","type-post","status-publish","format-standard","hentry","category-66022008","category-662008","category-Mit_Formularen_arbeiten"],"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>Steuerelemente zur Laufzeit verschieben - 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\/Steuerelemente_zur_Laufzeit_verschieben\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Steuerelemente zur Laufzeit verschieben\" \/>\n<meta property=\"og:description\" content=\"Was soll das denn Steuerelemente verschieben - zur Laufzeit Soll der Benutzer nun aktiv in die Gestaltung der Benutzeroberfl&auml;che eingreifen Mitnichten: Es gibt jedoch eine Reihe ernsthafter Anwendungsf&auml;lle, bei denen das Verschieben von Steuerelementen Sinn macht. Einen haben wir im Beitrag &quot;Splitter f&uuml;r Formulare&quot; bereits vorgestellt, aber es gibt noch mehr Gelegenheiten zum Einsatz dieser Technik, die wir hier grundlegend darstellen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:20:06+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/2253436d512f4ec0b870cecd502d3ab3\" \/>\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=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Steuerelemente zur Laufzeit verschieben\",\"datePublished\":\"2021-02-11T21:20:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/\"},\"wordCount\":2314,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/2253436d512f4ec0b870cecd502d3ab3\",\"articleSection\":[\"2\\\/2008\",\"2008\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/\",\"name\":\"Steuerelemente zur Laufzeit verschieben - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/2253436d512f4ec0b870cecd502d3ab3\",\"datePublished\":\"2021-02-11T21:20:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/2253436d512f4ec0b870cecd502d3ab3\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/2253436d512f4ec0b870cecd502d3ab3\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Steuerelemente_zur_Laufzeit_verschieben\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Steuerelemente zur Laufzeit verschieben\"}]},{\"@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":"Steuerelemente zur Laufzeit verschieben - 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\/Steuerelemente_zur_Laufzeit_verschieben\/","og_locale":"de_DE","og_type":"article","og_title":"Steuerelemente zur Laufzeit verschieben","og_description":"Was soll das denn Steuerelemente verschieben - zur Laufzeit Soll der Benutzer nun aktiv in die Gestaltung der Benutzeroberfl&auml;che eingreifen Mitnichten: Es gibt jedoch eine Reihe ernsthafter Anwendungsf&auml;lle, bei denen das Verschieben von Steuerelementen Sinn macht. Einen haben wir im Beitrag \"Splitter f&uuml;r Formulare\" bereits vorgestellt, aber es gibt noch mehr Gelegenheiten zum Einsatz dieser Technik, die wir hier grundlegend darstellen.","og_url":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:20:06+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/2253436d512f4ec0b870cecd502d3ab3","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Steuerelemente zur Laufzeit verschieben","datePublished":"2021-02-11T21:20:06+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/"},"wordCount":2314,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/2253436d512f4ec0b870cecd502d3ab3","articleSection":["2\/2008","2008","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/","url":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/","name":"Steuerelemente zur Laufzeit verschieben - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/2253436d512f4ec0b870cecd502d3ab3","datePublished":"2021-02-11T21:20:06+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/2253436d512f4ec0b870cecd502d3ab3","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/2253436d512f4ec0b870cecd502d3ab3"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Steuerelemente_zur_Laufzeit_verschieben\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Steuerelemente zur Laufzeit verschieben"}]},{"@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\/55000578","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=55000578"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000578\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}