Hallo in die Runde,
ich möchte ein Formular beim Öffnen mit Me.Move an der gleichen Stelle positionieren,
an der es geschlossen wurde.
Gibt es eine Möglichkeit, die Koordinaten beim Schließen des Formulars
in eine Tabelle zu speichern, um sie beim Öffnen wieder auszulesen?
Option Compare Database
Option Explicit
Private Declare Function GetWindowRect Lib "user32" _
(ByVal hWnd As Long, lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Function FktKoordinaten(ByRef Frm As Form)
'Menüleiste - Extras - Verweise - "Microsoft DAO3.6 Object Library" - Häkchen setzen
Dim R As RECT, Rst As DAO.Recordset
GetWindowRect Frm.hWnd, R
Set Rst = CurrentDb.OpenRecordset("SELECT * " & _
"FROM Tab_Koordinaten " & _
"WHERE Formname='" & Frm.Name & "'", dbOpenDynaset)
Rst.Edit 'Koordinaten als MoveSize-String "Links, Oben, Breit, Hoch" (Pxl*15=Twips)
Rst!Koordinaten = R.Left * 15 & "," & R.Top * 15 & "," & _
(R.Right - R.Left) * 15 & "," & (R.Bottom - R.Top) * 15
Rst.Update
Rst.Close: Set Rst = Nothing
End Function
(den code hab ich auch dem Web)
Klappt bei mir nicht, da ich den Verweis "Microsoft DAO3.6 Object Library" nicht nutzen kann (Konflikt mit anderm Modul)
Hat jemand eine gute Idee?
Mit Dank im Voraus
jagger
ZitatKlappt bei mir nicht, da ich den Verweis "Microsoft DAO3.6 Object Library" nicht nutzen kann (Konflikt mit anderm Modul)
Der Konflikt besteht vermutlich mit der
Microsoft Office xx.x Access database engine Object Library.
Wenn das der Fall ist, dann hast du überhaupt kein Problem, denn diese Bibliothek enthält eine neuere Version der DAO-Komponenten, die aber vollständig kompatibel sind.
Sollte es einen Konflikt mir einer anderen Bibliothek geben, finde heraus, welche das genau ist (Verweise entfernen/setzen). Wahrscheinlich kannst du auf die andere Bibliothek verzichten.
Hallo PhilS,
ich hatte eine Fehlermeldung und dachte es liegt am Verweis.
Die Fehlermeldung:"Laufzeitfehler 3021", "Kein aktueller datensatz"
Im Code wird
Rst.edit 'Koordinaten als MoveSize-String "Links, Oben, Breit, Hoch" (Pxl*15=Twips)
gelb makiert. :-\
Ich habe eigentlich alles so "nachgebaut" wie beschrieben:
http://www.office-loesung.de/ftopic160572_0_0_asc.php (http://www.office-loesung.de/ftopic160572_0_0_asc.php)
Woran kann das liegen?
LG
jagger
Zitat von: jagger am März 04, 2019, 12:56:58
ich hatte eine Fehlermeldung und dachte es liegt am Verweis.
Die Fehlermeldung:"Laufzeitfehler 3021", "Kein aktueller datensatz"
Der Code setzt voraus, dass es in der Tabelle
Tab_Koordinaten einen passenden Datensatz gibt. Anderfalls müsstest du mit .
AddNew anstelle von .
Edit einen neuen Datensatz anlegen.
Hi PhilS,
okay. Habe jetzt den Formularnamen händisch in die Tabelle
eingetragen und jetzt funktioniert das.
Danke für den Denkanstoß.
LG
jagger
@jagger
ZitatHabe jetzt den Formularnamen händisch in die Tabelle
eingetragen
Das willst du aber doch sicherlich nicht für jedes Formular machen, - oder?
Prüfe im Code ob es schon einen DS für dieses Formular gibt.
.
.
Set Rst = ...
If Rst.EOF Then
Rst.AddNew
Rst!FormName = Frm.Name
Else
Rst.Edit
End If
Rst!Koordinaten = ...
.
.gruss ekkehard
Hallo Ekkehard,
es ging ja nur um dieses eine Formular.
Aber natürlich hast Du recht und die Sache ist damit auch komfortabler.
Vielleicht hast Du noch einen witeren Tipp?
Wie kann ich mit vba ein Formular (in der Formularansicht) wieder zentieren?
Ich habe es vorher mit Me.Move 10 * 15
nach links geschoben.
Gibt es da was ohne das vorherige Auslesen der Koordinaten?
LG
jagger
Sorry, kann ich leider nicht beantworten.
Hallo Ekkehard,
na einen Versuch war es wert.
Ich konnte dazu in den Weiten des
www leider auch nix finden.
LG
jagger
Hallo,
wenn Du mit VBA das Form irgendwo hin verschieben kannst, kannst Du es doch auch wieder zentrieren ( in die "Mitte" schieben). Wo ist das Problem?
Die "Zentralkoordinaten" könnten z. B. als Konstanten im VBA-Code fest hinterlegt oder aus einer Parametertabelle bei Bedarf ausgelesen werden.
Hallo DF6GL,
natürlich ist es mit den Koordinaten kein Problem.
Ich war ja nur auf der Suche nach einem unkomplizierten
Befehl so wie "AutoCenter".
Das würde dann unabhängig von der jeweiligen Auflösung
oder Fenstergröße funktionieren.
Warum es diese Möglichkeit nur für die Entwurfsansicht gibt, weiss bestimmt niemand.
LG
jagger
Zitat von: DF6GL am März 07, 2019, 09:20:21
Die "Zentralkoordinaten" könnten z. B. als Konstanten im VBA-Code fest hinterlegt oder aus einer Parametertabelle bei Bedarf ausgelesen werden.
Die Zentralkoordinaten sind abhängig von der aktuellen Bildschirmauflösung. Konstanten sind somit ungeeignet und gespeicherte Parameter nur eingeschränkt, weil sie Änderungen am Bildschirm/Auflösung nicht erfassen. - Der funktionierende Ansatz wäre m.E. die Bildschirmauflösung mittels API auszulesen und dann entsprechend das Form zu positionieren.
Hallo,
ja, klar, das müsste berücksichtigt werden, wenn die DB an andere User (PCs) verteilt würde...
Ich vermute aber, der TS will das Form in der selben Sitzung wieder in die Mitte schieben. Das Form wäre ja auch nach einem neuem Laden wieder zentriert (wenn es so denn eingestellt ist).
Die aktuellen Koordinaten ( z. B. beim Laden des Forms) könnten auch mit den Formeigenschaften "WindowLeft", "WindowTop", etc. "gemerkt" und die anfängliche Platzierung des Forms wieder hergestellt werden.
Zitat
nach einem unkomplizierten Befehl
was ist daran kompliziert?
Hallo DF6GL,
ZitatZitat
nach einem unkomplizierten Befehl
ZitatZitat was ist daran kompliziert?
nicht direkt kompliziert, aber ein einfaches "Me.AutoCenter"
wäre doch kürzer (unkompliziert) und auch nicht schlecht?
LG
jagger