Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Ημιδιαφάνεια στις αναδυόμενες και αποκλειστικές φόρμες

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 16-03-13, 11:55
Όνομα: ΛΙΑ
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-03-2013
Μηνύματα: 17
Προεπιλογή Ημιδιαφάνεια στις αναδυόμενες και αποκλειστικές φόρμες

Καλησπέρα

Θα ήθελα να κάνω μια ερώτηση σχετικά με την ικανότητα να ενεργοποιήσεις ενα συμβάν σε αναδυόμενες και/ή αποκλειστικές φόρμες.

Χρησιμοποιώ το παρακάτω για να μπορώ να ρυθμιζω την διαφάνεια μιας φόρμας

Public Sub SetFormOpacity(frm As Form, sngOpacity As Single)
Dim lngStyle As Long
lngStyle = GetWindowLong(frm.hwnd, GWL_EXSTYLE)
SetWindowLong frm.hwnd, GWL_EXSTYLE, lngStyle Or WS_EX_LAYERED
SetLayeredWindowAttributes frm.hwnd, 0, (sngOpacity * 255), LWA_ALPHA
End Sub

Εχω μια φόρμα που λειτουργεί ως query builder και γυριζει καποια αποτελεσματα. Ας πουμε οτι λέγεται Main. Αναλογα με το αν θα πατησει ο χρηστης με διπλό κλικ πανω σε κάποια πεδία ανοίγουν δύο αναδυόμενες και αποκλειστικες φιλτραρισμενες φόρμες (η καθε μια σε διαφορετικό χρόνο).
Θα ήθελα όταν ανοιγουν αυτες οι φορμες να χρησιμοποιω το SetFormOpacity για την Main. Δυστυχως κανένα συμβάν της Main από τα On Lost Focus ή On Deactivate δεν με εξυπηρετεί καθώς δεν δείχνει να ενεργοποιείται. Υποθετω εχω παρεξηγησει την ικανοτητα των αναδυόμενων και/ή αποκλειστικών να χανουν το focus τους...και γενικώς τελώ λιγο υπό σύγχυση με την χρηση τους.

Μήπως υπάρχει κάποια πρόταση για το παραπάνω?
Προς το παρον εχω μια λύση να ανοιγω μια αναδυόμενη ημιδιαφανη άδεια φόρμα πάνω από την main απλά για να τη κρύβω, αλλά την θεωρώ λίγο 'μπακαλίστικη' λύση...

Ευχαριστώ εκ των προτέρων
Λία
Απάντηση με παράθεση
  #2  
Παλιά 16-03-13, 14:02
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.010
Προεπιλογή

Καλησπέρα!
Σε μια κοινή λειτουργική μονάδα πέρασε τον παρακάτω κώδικα:

Κώδικας:
Option Compare Database
Option Explicit

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
        ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function SetLayeredWindowAttributes Lib "user32" ( _
        ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
        ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Const WS_EX_LAYERED = 524288
Private Const GWL_EXSTYLE = -20
Private Const LWA_ALPHA = 2


Public Sub SetFormOpacity(WHandle As Long, sngOpacity As Single)
    Dim lngStyle As Long
    lngStyle = GetWindowLong(WHandle, GWL_EXSTYLE)
    SetWindowLong WHandle, GWL_EXSTYLE, lngStyle Or WS_EX_LAYERED
    SetLayeredWindowAttributes WHandle, 0, sngOpacity, LWA_ALPHA
End Sub
Στις φόρμες που θέλεις να εφαρμόσεις ημιδιαφάνεια πέρασε το παρακάτω:

Κώδικας:
Private Sub Form_Load()
    SetFormOpacity Me.hwnd, 128    ' 50 - 255 ; 128 = 50% Διαφάνεια
End Sub
Καλή συνέχεια!

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #3  
Παλιά 16-03-13, 14:15
Όνομα: ΛΙΑ
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-03-2013
Μηνύματα: 17
Προεπιλογή

Πρώτα απ όλα ευχαριστώ για την άμεση απάντηση :)

Δεν διευκρινησα στο πρωτο οτι εχω ήδη δηλώσει μεταβλητές κλπ. Χρησιμοποιώ το SetFormOpacity ετσι κι αλλιως επιτυχως στην 'μπακαλιστικη' εκδοχή μου.

Το πρόβλημά μου είναι ότι κανένα event της Main στο οποιο έθεσα την αλλαγή δεν κάνει fire όταν η Main πάει πίσω (συγνωμη χρησιμοποιω μονο αγγλικό office και δεν ειμαι τοσο καλή στην ελληνικη ορολογία)
Kαι έχω την εντύπωση ότι ίσως δεν εχω καταλαβει σωστά τις ιδιοτητες των modal/pop up. Οταν παει πισω δεν χανει το focus? Γιατι δεν μου δουλευει το SetFormOpacity στο Οn Lost Focus της Main?
Απάντηση με παράθεση
  #4  
Παλιά 16-03-13, 14:45
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.010
Προεπιλογή

Όταν ανοίξει μια αποκλειστική φόρμα ή ένα παράθυρο διαλόγου:

Οποιοσδήποτε κώδικας που ίσως τρέχει εκείνη τη στιγμή διακόπτεται και θα συνεχίσει αφού κλείσει το παράθυρο της αποκλειστικής φόρμας ή διαλόγου.

Συνεπώς το Οn Lost Focus της Main θα διακοπεί προσωρινά και έτσι δεν θα εκτελεστεί η διαδικασία "SetFormOpacity".

Μόνο ο κώδικας της αποκλειστικής φόρμας έχει την εξουσιοδότηση να εκτελεστεί.

Αν καλέσεις τη διαδικασία "SetFormOpacity" από την αποκλειστική φόρμα όπως φαίνεται στο παράδειγμα μου η διαδικασία θα εκτελεστεί κανονικά.

Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #5  
Παλιά 16-03-13, 15:28
Όνομα: ΛΙΑ
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-03-2013
Μηνύματα: 17
Προεπιλογή

Τελικά η συζητηση καμια φορα βοηθάει να βάλω σε σειρά αυτό που έχω στο μυαλό μου

Ελυσα το θεμα μου ενεργοποιώντας τη διαφάνεια της Main παραλληλα με το ανοιγμα της Form2

DoCmd.OpenForm "form2", acNormal
SetFormOpacity Me.hwnd, 100

και επανεφερα το κανονικό χρώμα με το onclose της form2

Private Sub Form_Close()
SetFormOpacity Forms!Main.hwnd, 255
End Sub

Το παραπανω το ήθελα για να μη μπερδευεται ο καταχωρητης από τα στοιχεια της φορμας που φαινοταν πισω και ηταν μεγαλη. Τώρα το βλέμμα του θα πεφτει στην μπροστά.

Ευχαριστώ πολύ!
Λία
Συνημμένα Αρχεία
Τύπος Αρχείου: zip test.zip (39,3 KB, 76 εμφανίσεις)
Απάντηση με παράθεση
  #6  
Παλιά 18-03-13, 07:49
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.010
Προεπιλογή

Καλημέρα!
Λία, πάρα πολύ ωραίο εφέ!

Δες στο συνημμένο μια ακόμα προσέγγιση.

Είναι απλό στη χρήση.
Για να ανοίξεις μια φόρμα, είτε αποκλειστική είτε αναδυόμενη χρησιμοποιείς : OpenPopupForm "Form1"

Καλή συνέχεια!
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb AccTransparent.mdb (356,0 KB, 134 εμφανίσεις)
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #7  
Παλιά 18-03-13, 12:52
Όνομα: ΛΙΑ
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 13-03-2013
Μηνύματα: 17
Προεπιλογή

Εξαιρετικό παράδειγμα στο συνημμένο σου!!!
Μ αρεσει το Fade in, Fade out της διαφάνειας! Στη πρωτη πρωτη προσπαθεια ειχα φτιαξει μια τετοια φορμα που ανοιγε πισω αλλα επεφτε ουρανοκατεβατη και δεν μ αρεσε σαν αποτελεσμα. Αυτο που μου εδειξες ειναι πολυ πιο ελκυστικό στο μάτι.

Ας πάμε στο ζουμί τώρα...

Παλευα να βρω τι ειναι αυτο που κανει την Form2 να κλεινει οταν χανει την εστιαση. Αν καταλαβα καλα η διαφορα ειναι στο οτι η μια ειναι αποκλειστική και η άλλη οχι?

Μηπως μπορείς να μου δώσεις μια μικρή εξήγηση για τη λειτουργία του Form_Timer()? Αυτό ειναι που αναγκάζει το κλείσιμο?

Επίσης μια και πρόσφατα σας βρήκα και άρχισα να γράφω θα ήθελα να πω το εξης...
Αρχισα να ασχολούμε με την Access από χόμπυ και ως μια διευκόλυνση στην εργασία μου αλλά πάντα παλευα με ατελειωτο διάβασμα σε ξένα φορουμ. Σημειωτέον δεν εχω ουτε εναν γνωστό να ασχολείται για να συζητησω τυχον προβλήματα που συναντώ και ο μόνος πιστός ακροατής τις ατελειωτες ωρες πανω απο το pc είναι...ο σκυλος μου! Γι αυτο πρεπει να σας πω οτι ειναι ααααπιστευτη η χαρά μου που βρηκα ενα ελληνικό φορουμ με πολυ καλους γνωστες του αντικειμενου και εξαιρετικά απ όσο έχω δει μεχρι τώρα θέματα στο ιστορικό του! Και μόνο η συζήτηση βοηθά απίστευτα το μυαλό να γίνει πιο δημιουργικό...πόσο μάλλον και οι εξαιρετικές προτάσεις σας!
Για τα παραπάνω λοιπόν θα ήθελα να πω ένα μεγάλο Ευχαριστώ! (μαλλον θα θελει να σας ευχαριστησει και ο σκυλος μου για την ησυχία του πλεον χεχε)
Απάντηση με παράθεση
  #8  
Παλιά 18-03-13, 14:05
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.010
Προεπιλογή

Καλησπέρα!

Ο κώδικας του συμβάντος Form_Timer() στη φόρμα " frmBg" ελέγχει
ποιο παράθυρο έχει την εστίαση και κάνει τις ανάλογες ενέργειες.

Πιο αναλυτικά:

Κώδικας:
' frmName = Μεταβλητή τύπου "String". περιέχει το όνομα της αναδυόμενης φόρμας.
' WHandle = Μεταβλητή τύπου "Long" παίρνει που επιστρέφει η GetActiveWindow()
' frmHandle = Μεταβλητή τύπου "Long" ; το νούμερο του παραθύρου της αναδυόμενης φόρμας

Private Sub Form_Timer()
' έχει ρυθμιστεί να εκτελείται κάθε 50 χιλιοστά του δευτερολέπτου.

    On Error Resume Next
    If Not IsOpen(frmName) Then
        ' Αν η αναδυόμενη φόρμα δεν βρίσκεται σε κανονική προβολή τότε...

        DoCmd.Close acForm, Me.Name
        '...Κλείνει την ημιδιαφανή φόρμα "frmBg" (αυτή τη φόρμα)

        DoCmd.Close acForm, frmName
        '...Κλείνει την αναδυόμενη φόρμα

        Exit Sub
        '...Εξοδος από τη διαδικασία

    End If

    WHandle = GetActiveWindow()
    ' GetActiveWindow() = συνάρτηση  API που επιστρέφει το νούμερο του
    ' εστιασμένου παραθύρου. Θα μπορούσε κανείς να χρησιμοποιήσει την
    ' Screen.ActiveForm της Access. Δεν λειτουργεί σωστά σε παλαιότερες εκδόσεις Access


    If WHandle <> frmHandle Then
        ' Αν το νούμερο του εστιασμένου παραθύρου είναι διαφορετικό από το νούμερο
        'της αναδυόμενης φόρμας....

        If GetActiveWindow = Me.hWnd Then
            '...και εάν το νούμερο του εστιασμένου παραθύρου είναι διαφορετικό
            ' από το νούμερο αυτής της φόρμας που σημαίνει ότι ο χρήστης έχει
            ' εστιάσει κάποιο παράθυρο έκτός της εφαρμογής τότε...

            DoCmd.Close acForm, Me.Name
            ' Κλείνει την ημιδιαφανή φόρμα "frmBg" (αυτή τη φόρμα)

            DoCmd.Close acForm, frmName
            ' Κλείνει την αναδυόμενη φόρμα

        End If
    End If
End Sub
Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[ Φόρμες ] Αναζήτηση σε φόρμες που επιστρέφει φόρμες theo93 Access - Ερωτήσεις / Απαντήσεις 17 12-08-14 09:54
φόρμες - υποφόρμες tolkap Access - Ερωτήσεις / Απαντήσεις 0 17-01-14 18:17
[ Φόρμες ] Aυτόματη προσαρμογή στις διαστάσεις της οθόνης mikekal1oo Access - Ερωτήσεις / Απαντήσεις 4 29-04-13 13:52
Απορία σχετικά με το πως βάζω όριο στις μέρες ενοικίασης Vansel Access - Ερωτήσεις / Απαντήσεις 19 02-06-12 12:10
Φόρμες πολλαπλών ενεργειών Zoe Forte Access - Ερωτήσεις / Απαντήσεις 2 08-05-12 23:10


Η ώρα είναι 04:23.