MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 21.02.2017, 21:09   #1
rfurrer
MOF User
MOF User
Standard Acc2010 - Feststellen ob mit acDialog geöffnet

Hallo

Wie kann ich in einem Formular (MeinForm) feststellen, ob dieses "normal" oder über "acDialog" geöffnet wurde?

1. DoCmd.OpenForm "MeinForm", , , , , acDialog

2. DoCmd.OpenForm "MeinForm"

Mit Me.Modal oder Me.Popup bekomme ich in beiden Fällen FALSE. Ich müsste aber im 1. Fall ein True bekommen und im 2. Fall ein False.
Wie geht das?

Grüsse und Danke
Rolf

__________________

meine Access Anwendungen:
Modellbahnverwaltung MOBAVER, Bildverwaltung ARCHIVA, Adressmanager ADREMA, Ordnerschilder und Register REGISTA
rfurrer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.02.2017, 21:16   #2
fredfred
MOF Profi
MOF Profi
Standard

Hi,
wie sieht denn dein vollständiger Code (in welchem Ereignis welchen Formulars) dazu aus ?

ich habe das selbst kurz getestet und bekomme korrekte Angaben.
fredfred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.02.2017, 21:24   #3
rfurrer
Threadstarter Threadstarter
MOF User
MOF User
Standard

hm, das docmd.openform mache ich mal aus dem Hauptmenü, dann ohne acDialog.
Der andere Fall ist aus einem geöffneten Fenster über einen Button, dann mit acDialog.

Und feststellen möchte ich das im Form_Load von "MeinFormular", also in jenem, welches ich mal mit, mal ohne acDialog öffne. In diesem bekomme ich an dieser Stelle immer ein FALSE. Und in den Eigenschaften des Formular ändere ich nichts: Rahmenart bleibt immer "Veränderbar"

__________________

meine Access Anwendungen:
Modellbahnverwaltung MOBAVER, Bildverwaltung ARCHIVA, Adressmanager ADREMA, Ordnerschilder und Register REGISTA
rfurrer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.02.2017, 22:08   #4
ebs17
MOF Guru
MOF Guru
Standard

Wenn das Formular keine geeigneten Eigenschaften zur Direktabfrage der gewünschten Information bietet, gibst Du diese dann eben
- in OpenArgs mit oder
- Du gibst dem Formular eine eigene Eigenschaft (das Formular ist immerhin eine Klasse) und verwendest diese.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.02.2017, 22:19   #5
Josef P.
MOF Guru
MOF Guru
Standard

Hallo!

Nur als Idee und nicht ausgereift:
Code:

Dim frm As Form

For Each frm In Application.Forms
   If Not frm Is Me Then
      frm.SetFocus
      exit for
   End If
Next

If Screen.ActiveForm Is Me Then
   MsgBox "acDialog oder Modal, da Fokus nicht gewechselt werden konnte"
Else
   Me.SetFocus
   MsgBox "Fokus konnte gewechselt werden"
End If
mfg
Josef

Geändert von Josef P. (21.02.2017 um 22:23 Uhr).
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 07:49   #6
rfurrer
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Josef

Irgendwie komm ich damit nicht weiter. Ich habe das in eine Funktion gelegt, welche ich beim Laden des Form aufrufe und dabei das aufgerufene Form übergebe. Der Focus kann trotz acDialog auf ein anderes offenes Form verlegt werden.

Hallo Eberhard

OpenArgs wäre eine Idee, da ich die aber schon für anderes verwende müsste ich das mit Trennzeichen und Parsen lösen. Wäre dann vermutlich der letzte Ausweg.
Das mit der Eigenschaft leuchtet mir nicht ein. Wenn ich das gleiche Form mal mit/mal ohne acDialog öffne, was könnte denn diese Eigenschaft steuern bzw. wie stellt dann die fest, ob es mit/ohne geöffnet wurde?

Gruss
Rolf

__________________

meine Access Anwendungen:
Modellbahnverwaltung MOBAVER, Bildverwaltung ARCHIVA, Adressmanager ADREMA, Ordnerschilder und Register REGISTA
rfurrer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 08:47   #7
Josef P.
MOF Guru
MOF Guru
Standard

Hallo!

Damit das funktioniert, muss das Formular vermutlich vollständig geladen sein.
Ich probierte den Code über eine Schaltfläche im Formular aus, das einmal mit und ohne acDialog geöffnet wurde.

Musst du schon zum Zeitpunkt des Ladevorgangs wissen, ob mit acDialog geöffnet wurde?

mfg
Josef
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 08:53   #8
JPA
MOF Koryphäe
MOF Koryphäe
Standard

In der Timer-Funktion geht der Code von Josef.

Vielleicht solltest du umdenken und dein Formular über Objekt-Instanz öffnen. Da kannst du mehr Daten dem Form übergeben und über WithEvents mehrere Information zurück bekommen.

G
JPA
JPA ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 09:44   #9
rfurrer
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Josef

Ja, ich müsste dass schon beim Laden wissen, bzw. dann nochmals beim Unload. Hintergrund ist, dass ich die Filter Felder schon abfüllen will bzw. beim schliessen den Inhalt der FilterFelder in eine Tabelle schreiben will. Und da das Formular als Dialog etwas andere Filterfelder hat, müsste ich das unterscheiden können.

Hallo JPA
Das sind leider einige Formulare und sehr, sehr viele Docmd.openform die dann wahrscheinlich angepasst werden müssten. Da scheue ich den Aufwand noch.

Gruss
Rolf

__________________

meine Access Anwendungen:
Modellbahnverwaltung MOBAVER, Bildverwaltung ARCHIVA, Adressmanager ADREMA, Ordnerschilder und Register REGISTA
rfurrer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 10:02   #10
ebs17
MOF Guru
MOF Guru
Standard

Mein zweiter Hinweis entspricht dem, was JPA etwas anders formuliert.

Insgesamt sehe ich es eben nicht als sinnvoll, erst einen Stein ins Wasser zu werfen und ihn dann zu suchen, wenn ich ihn schon in der Hand halte.

Zitat:

Und da das Formular als Dialog etwas andere Filterfelder hat

Wie ist das zu verstehen?

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 10:14   #11
rfurrer
Threadstarter Threadstarter
MOF User
MOF User
Standard

Die Formulare sind Listen, aus denen der Benutzer einen Eintrag wählen kann. Und damit er nicht alle Einträge durch muss, kann im Kopfbereich oben in Felder Filter eingegeben werden, zBsp. bei Hersteller "XY", dann werden in der Liste nur die Einträge vom Hersteller XY angezeigt.
Das sind meine FilterFelder, die ich gerne beim öffnen mit den Werten des letzten öffnens wieder belegt hätte. Dies funktioniert soweit alles, nur eben soll unterschieden werden, ob das Form als Dialog oder normal geöffnet wurde.

Dein "Steinwurf" leuchtet ein, nur eben der Aufwand und ich habe keine Ahnung wie das geht

__________________

meine Access Anwendungen:
Modellbahnverwaltung MOBAVER, Bildverwaltung ARCHIVA, Adressmanager ADREMA, Ordnerschilder und Register REGISTA
rfurrer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 11:17   #12
Josef P.
MOF Guru
MOF Guru
Standard

Hallo!

Zitat:

Ja, ich müsste dass schon beim Laden wissen, ..

Muss es wirklich beim Laden sein? Oder willst du es nur wissen, wenn du die Konfiguration der Filter einstellst?

Beispiel (Luftcode):
Code:

private sub Form_Load()
   Me.TimerInterval = 1
   ' Call FilterEinstellen() ' <-- verlagern nach Form_Timer
end sub

private sub Form_Timer()
    me.Timerinterval = 0
    Call FilterEinstellen()
end sub

private sub FilterEinstellen()
    
   if DialogModus then
      Call ...
   else 
      call ...
   end if  
 
end Sub

private function DialogModus() as Boolean
   
   Dim frm As Form

   For Each frm In Application.Forms
      If Not frm Is Me Then
         frm.SetFocus
         exit for
      End If
   Next

   If Screen.ActiveForm Is Me Then
      DialogModus = True
   Else
      Me.SetFocus
      DialogModus = false
   End If

end function
mfg
Josef
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 11:48   #13
JPA
MOF Koryphäe
MOF Koryphäe
Standard

Machen wir es mal dreckig
Bei acDialog gibt es ja keine MinMax-Buttons, und die frage ich einfach ab:
Code:

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Const GWL_STYLE = (-16)

Public Function IsFormModal(frm As Form) As Long
    Dim hWnd As Long, lngStyle As Long
    
    hWnd = frm.hWnd
    lngStyle = GetWindowLong(hWnd, GWL_STYLE)
    IsFormModal = (lngStyle = -2033713152)
End Function
Das Funz auch im Event Form_Load

G
JPA
JPA ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 11:55   #14
Josef P.
MOF Guru
MOF Guru
Standard

@JPA:
Da du auf API ausweichst: Kann man per API vielleicht auch den Modul-Zustand des Fensters abfragen?

mfg
Josef
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.02.2017, 12:03   #15
JPA
MOF Koryphäe
MOF Koryphäe
Standard

Zitat:

Kann man per API vielleicht auch den Modul-Zustand des Fensters abfragen?

War auch mein erster Gedanke, aber nicht gefunden
JPA ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:51 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.