Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Beim Schließen die letzte Position von Formular speichern

Begonnen von jagger, März 04, 2019, 11:06:08

⏪ vorheriges - nächstes ⏩

jagger

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

PhilS

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.

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

jagger

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

Woran kann das liegen?
LG
jagger

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

jagger

Hi PhilS,

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

Danke für den Denkanstoß.

LG
jagger

Beaker s.a.

@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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

jagger

#6
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

Beaker s.a.

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

jagger

Hallo Ekkehard,

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

LG
jagger

DF6GL

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. 
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

jagger

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

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

DF6GL

#12
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?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

jagger

#13
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