Office: Eigenes Kalenderpopup

Helfe beim Thema Eigenes Kalenderpopup in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, aus einer Vorlage von UweKs kalAssi habe ich ein Kalenderpopup erstellt, welches direkt am Textfeld hängt und über eine Klasse... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Marsu65, 9. Oktober 2010.

  1. Eigenes Kalenderpopup


    Hallo zusammen,
    aus einer Vorlage von UweKs kalAssi habe ich ein Kalenderpopup erstellt, welches direkt am Textfeld hängt und über eine Klasse gehandelt wird.

    Zwei Probleme habe ich noch, um es perfekt zu machen:
    1) Demo_KalPopup:
    wenn das Formular verschoben wird, bleibt das Popup stehen. Es sollte jedoch ausgeblendet oder mitverschoben werden.
    Leider gibt es kein Form_OnMove-Ereignis des Formulars. Kennt jemand einen Workaround wie man das Verschieben des Formulars abfangen und darauf reagieren kann?

    2) Demo_KalPopup_Im_UFO
    Wird im Ufo das Kalenderpopup gestartet, und ohne Datumsauswahl in das HF gewechselt sollte es sich schließen. Auch hier finde ich kein passendes Ereignis, da Form_Deactivate des UFOs in diesem Fall nicht ausgelöst wird.
    Gesucht wird also ein Ereignis, das im UFO ausgelöst wird, wenn man in das HF wechselt.


    [Edit] Mof-Team AD: Eine aktualisierte Fassung findet sich im 11. Beitrag [/Edit]

    :)
     
    Marsu65, 9. Oktober 2010
    #1
  2. Bin mir jetzt nicht sicher, aber vielleicht könnte das MouseMove-Ereignis hier weiter helfen. Über den Param Button kannst Du ja abfragen ob das MouseMove-Ereignis bei gedrückter linker Maustaste stattfindet oder nicht.

    Bin mir aber eben nicht sicher ob das auch greift wenn sich die Maus über dem Formularrahmen befindet.

    Vielleicht wäre es andersrum einfacher ... ein Ereignis das beim aktivieren des HF's eintritt und dann ein Event auslöst das vom UFO abgehorcht wird.

    Vermutlich wird aber Form_Activate nicht greifen da das HF ja bereits aktiviert ist. Evtl. hier auch ein Workaround über das MouseMove-Ereignis im HF basteln.

    Gruß

    Rainer
     
    raist10, 11. Oktober 2010
    #2
  3. Hallo
    so was wie in meinem Anhang ?

    Anhang kommt gleich muss nur noch etwas kleiner machen

    das ganze dann an eine stelle Endzipen z.B. C:\Temp *Smilie

    Beim öffnen der MDB / mde öffnet sich das Haupt Formular
    jetzt öffne FrmZ1 Und evtl auch FrmZ2
    danach veschiebe das Haupt Fotmular mit der Mous
     
    Lanz Rudolf, 11. Oktober 2010
    #3
  4. Eigenes Kalenderpopup

    Danke euch.
    @Rainer
    Ich hab extra die Klassenlösung gewählt, um das Kalenderpopup weitgehend zu kapseln. Daher würde ich ungerne im aufrufenden Form mehr Code als nötig einbauen.
    @Ruedi
    interessante Lösung, braucht aber auch reichlich Code im aufrufenden Formular.

    Ich präzisiere das Ziel noch einmal:
    Aufruf des Kalenderpopup wie im Beispiel. Wenn man irgendwoanders hinklickt, soll das Popup verschwinden. Also ein Verhalten wie beim Date-Time-Picker-ocx.

    Komischerweise lößt das Kalenderpopup sein Deactivate-Ereignis nicht aus. Liegt das nun an der Klasse als Schnittstelle?
    Wenn ich die Popup-Eigenschaft des Kalenderpopups auf False setze, finden zwar die Activate/Deactivate-Eigenschaften statt, jedoch wird das Popup nicht mehr angezeigt? Rätsel über Rätsel ...
     
    Marsu65, 11. Oktober 2010
    #4
  5. Bist Du sicher das das Kalender-PopUp nicht mehr angezeigt wird oder kann es nicht eher sein das es nur versteckt hinter anderen Formularen geöffnet wird? Ein nicht PopUp-Formular wird wenn ich mich recht entsinne immer "hinter" PopUp-Formularen geöffnet ... wäre also das HF auf PopUp = True eingestellt dann würde die Kalender-Form mit PopUp = False sich hinter dem HF öffnen.

    Wenn dem so ist könntest Du die Kalender-Form mit der API Funktion SetForeGroundWindow möglicherweise nach vorne bringen.

    Code:
    Darauf hast Du Dir ja schon selber die Antwort gegeben, es liegt an der Einstellung PopUp = True.

    Dann verlagere doch die ganze Geschichte auch in eine/die Klasse und schaffe nur Schnittstellen auf die das aufrufende Formular zugreift und eben auch entsprechende Ereignisse anschubst. Kannst ja Form Ereignisse in einer Klasse problemlos abhorchen und darauf reagieren.

    Wie wäre es mit folgendem Workaround:

    Bei jedem MouseMove-Ereignis im Kalender-PopUp resettest Du den Timer des Formulares auf z.B. 50 ms. Wird der Timer irgendwann erreicht prüfst du ob sich die Maus noch innerhalb der Position des Kalender-PopUp befindet, wenn nicht schliesst der Timer das Kalender-Formular wieder und wenn ja setzt er sich selber mit 50 ms wieder neu.

    Klingt jetzt simpel, dürfte aber kein so simples Unterfangen werden weil Du relative Positionen zum Bildschirm nur über API-Funktionen ermitteln kannst.

    Gruß

    Rainer
     
    raist10, 11. Oktober 2010
    #5
  6. Jo, bin ich gestern Nacht auch noch drauf gestoßen. Jörg Ostendorp bringt Popups mit Subclassing bei die Activate/Deactivate-Ereignisse doch auszulösen.
    Dafür bedarf es aber den Einsatz einer ActiveX-dll, was ich vermeiden will.

    Ich werde mal weiter experimentieren ... (to be continued)
     
    Marsu65, 12. Oktober 2010
    #6
  7. Nach einigen Experimenten kann ich Erfolg melden.
    Das eigene, frei zu formatierende, auwählbare Feiertage beinhaltende, auskommentierte Kalenderpopup verhält sich nun fast genauso wie ein DT-Picker.
    (ein Klick auf die freie Arbeitsfläche oder die Menüleiste schließt es (noch) nicht)
    Es geht also auch ohne Subclassing und Axtive-X.

    Damit verabschiede ich mich endgültig von der M$-Willkür mehr oder weniger häßliche Kalender-Steuerelemente einzuführen und nach belieben wieder einzustampfen, statt sie weiterzuentwickeln.

    Wer Spass dran hat, möge es verwenden

    PS:
    Eine Frage hätte ich noch: Hab ich das richtig verstanden, dass normale Formulare Access und Popupformulare Windows "gehören"?


    [Edit] Mof-Team AD: Eine aktualisierte Fassung findet sich im 11. Beitrag [/Edit]
     
    Marsu65, 12. Oktober 2010
    #7
  8. Eigenes Kalenderpopup

    GZ echt Solid Work

    BIGthx Dir
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    WhiteCrow, 12. Oktober 2010
    #8
  9. Leider muss ich nach weiteren Tests eine Einschränkung machen:
    Der Aufruf des Kalender-Popups aus einem Popup-Formular führt dazu, dass das Kalenderpopup im Hintergrund dargestellt wird. *frown.gif*

    Sämtliche Versuche meinerseits das KalenderPopup in diesem Fall nachträglich in den Vordergrund zu holen sind nicht erfolgreich gewesen. Hat diesbezüglich noch jemand eine Idee?
     
    Marsu65, 15. Oktober 2010
    #9
  10. Hast Du schon meinen Tipp aus #6 berücksichtigt (SetForeGroundWindow)?

    Das könnte möglicherweise helfen.

    Gruß

    Rainer
     
  11. Hi Rainer, hab es mit verschiedensten APIs versucht. Windows weigert sich aber hartnäckig ein normales Fenster vor ein Popup zu setzen. Daher hab ich nun den anderen Ansatz gewählt, das Kalender-Form wieder als Popup definiert und es ist mir gelungen, ein Deactivate-Ereignis nachzustellen *Smilie

    @ All
    Hier also Version 3 des Kalenderpopups.
    Unter XP/A2003 hab ich soweit alle Kombinationen mit HF/UF, Modal und Popup durchgetestet und es funktioniert wie gewünscht.

    Das Kalenderpopup schließt nun auch wenn auf die Arbeitsfläche oder Menüleiste geklickt wird.

    Wär schön, wenn das auch in anderen Umgebungen getestet werden könnte.
    (Mir ist z.B. unbekannt, ob die verwendete und weitgehend undokumentierte Funktion ObjPtr OS-abhängig ist)
     
  12. Da objPtr ein Element aus dem VBA-Katalog ist, würde ich mal schwer vermuten das es vom OS genauso abhängig ist wie die anderen Elementen des VBA-Kataloges.

    Gruß

    Rainer
     
  13. Eigenes Kalenderpopup

    Hallo,

    kann man die Farbgestaltung des angezeigten Kalenders noch irgendwie beeinflussen?
    Ich habe da erstmal nichts gefunden, hätte es aber gern weniger bunt.

    Gruß

    cheapy

    Edit: Upps, ziehe die Frage zurück! Hab wohl an der falschen Stelle gesucht
     
    cheaptrick, 4. November 2010
    #13
  14. Hallo

    Habe per Button das Datumfeld (und andere Felder) auf Inhalt geprüft und bin
    bei Leere wieder in das entsprechende Feld gesprungen (focus gesetzt) Wenn ich nun das Kalenderelement anklicke
    kommt plötzllich eine Laufzeit 91 -Fehlermeldung die sich nicht mehr abstellen läßst.
    Nur mehr ein schließen der datenbank ist möglich. (wobei der Fehler später wieder auftritt)
    Verwendet wird das Kalenderelement bei ungebunden Feldern, die später in eine Tabelle gespeichert werden.
    Die Prüf-Sub sieht so aus:
    Public Sub EingabePrüfung(ParamArray SteuerElemente())
    'In Formularen wird oft verlangt, daß eine Eingabe in Kombinations- oder Textfelder gemacht wird.
    'Die Funktion prüft ob eine Eingabe erfolgt ist.

    Dim EingabeFeld
    For Each EingabeFeld In SteuerElemente
    If Nz(EingabeFeld.Value) = vbNullString Then
    EingabeFeld.SetFocus
    MsgBox "Eingabe fehlt", , "Eingabeüberprüfung"
    End
    End If
    Next EingabeFeld


    'Anwendungsbeispiel:
    'EingabePrüfung Me.Name, Me.Vorname, Me.PLZ
    '-->prüft, ob in den Steuerelementen 'Name', 'Vorname' und 'PLZ' eine Eingabe gemacht wurde.
    End Sub

    Hat wer einen Tip, wie ich die Fehlermeldung abstellen kann ??
    mfg
    manfred
     
    topjoiner, 18. Januar 2011
    #14
  15. Schon mal mit Datenbank komprimieren und reparieren versucht?
    Ich hatte auch schon mal so ähnliche Probleme, das einzige was da geholfen hat war eine neue DB zu erstellen und alles aus der defekten in die neue DB zu importieren.
     
    cheaptrick, 18. Januar 2011
    #15
Thema:

Eigenes Kalenderpopup

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden