Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: jagger am März 04, 2019, 11:06:08

Titel: Beim Schließen die letzte Position von Formular speichern
Beitrag von: jagger am März 04, 2019, 11:06:08
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
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: PhilS am März 04, 2019, 11:54:57
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.

Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: jagger am März 04, 2019, 12:56:58
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
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: PhilS am März 04, 2019, 14:51:45
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.
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: jagger am März 04, 2019, 17:48:33
Hi PhilS,

okay. Habe jetzt den Formularnamen händisch in die Tabelle
eingetragen und jetzt funktioniert das.

Danke für den Denkanstoß.

LG
jagger
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: Beaker s.a. am März 04, 2019, 18:18:18
@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
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: jagger am März 04, 2019, 18:50:38
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
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: Beaker s.a. am März 05, 2019, 16:32:18
Sorry, kann ich leider nicht beantworten.
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: jagger am März 06, 2019, 22:02:48
Hallo Ekkehard,

na einen Versuch war es wert.
Ich konnte dazu in den Weiten des
www leider auch nix finden.

LG
jagger
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: DF6GL am März 07, 2019, 09:20:21
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. 
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: jagger am März 07, 2019, 09:30:18
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
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: PhilS am März 07, 2019, 09:40:28
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.
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: DF6GL am März 07, 2019, 11:52:24
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?
Titel: Re: Beim Schließen die letzte Position von Formular speichern
Beitrag von: jagger am März 07, 2019, 12:16:18
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