Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Εύρεση ονόματος στοιχείου ελέγχου

Îåêßíçóå áðü ôï ìÝëïò ChrisGT7. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 17-12-2012, 11:56. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-12-2012, 09:42 71764

    Εύρεση ονόματος στοιχείου ελέγχου

    Με τον παρακάτω κώδικα βρίσκω την κλάση που ανήκει ένα στοιχείο ελέγχου καθώς περνάει ο κέρσορας του ποντικιού από πάνω του:

    Public Declare Function GetCursorPos Lib "user32" _
        (lpPoint As POINTAPI) As Long
    Public Declare Function WindowFromPoint Lib "user32" _
        (ByVal xPoint As Long, ByVal yPoint As Long) As Long
    Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
        (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

    Type POINTAPI
        X As Long
        Y As Long
    End Type

    Private Sub Tmr_Timer()
        GetCursorPos mousePT
        X = mousePT.X
        Y = mousePT.Y
       
        curWindow = WindowFromPoint(X, Y)
        If curWindow <> prevWindow Then
            className = String$(256, " ")
            prevWindow = curWindow
            retValue = GetClassName(curWindow, className, 255)
            className = Left$(className, InStr(className, vbNullChar) - 1)
            Me.Caption = className
            If className <> "ThunderRT6UserControlDC" Then
                For I = 0 To 8
                    If Bttn(I).Value Then
                        Cmd(I).ZOrder
                        Exit For
                    End If
                    Cmd(11).ZOrder
                Next
            End If
        End If
        DoEvents
    End Sub

    Μπορείτε να με βοηθήσετε ώστε να μπορώ να βρίσκω το όνομα του control με κάποια αντίστοιχη συνάρτηση API πού φέρνει τα στοιχεία του ελεγκτηρίου;

    Αυτό που θέλω να κάνω είναι καθώς περνάει το ποντίκι πάνω από κάποιο control να εκτελείται ο επιθυμητός κώδικας.


    Your Curiosity Will Be The Death Of You!
  •  17-12-2012, 10:22 71765 σε απάντηση της 71764

    Απ: Εύρεση ονόματος στοιχείου ελέγχου

    Γιατί να το κάνεις αυτό? Τα περισσότερα controls έχουν το MouseMove event. Αν όχι τίποτε άλλο, η συνεχής αναζήτηση μέσω του timer κοστίζει και σε μπαταρία.

    Αν τώρα η VB6 έχει προβλήματα στο MouseMove ... 

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-12-2012, 11:20 71766 σε απάντηση της 71765

    Απ: Εύρεση ονόματος στοιχείου ελέγχου

    Έχω φτιάξει ένα μενού σε μια MDI φόρμα που αποτελείται από κουμπιά (Πελάτες, Προμηθευτές, Πωλήσεις κτλ) όπου βάζοντας το ποντίκι πάνω τους, θέλω να εμφανίζεται η αντίστοιχη εικόνα του σε άλλο κεντρικό (απενεργοποιημένο) κουμπί. Κάτι σαν το νέο μενού Start των Windows 7, όπου αν βάλεις το δείχτη πάνω από τις Εικόνες εμφανίζεται η εικόνα που αντιπροσωπεύει το φάκελο Εικόνες.

    Απέφυγα να χρησιμοποιήσω το event MouseMove γιατί θα πρέπει να βάλω κώδικα σε πάρα πολλά controls που έχει η κάθε φόρμα και μερικές φορές "τρεμοπαίζει" το ελεγκτήριο που απευθύνεται ο κώδικας του MouseMove. Και επίσης αν κινείται πολύ γρήγορα το ποντίκι έχω παρατηρήσει δεν προλαβαίνει να εκτελεστεί το MouseMove άλλου control και το προσπερνάει. Χώρια που αν βγει εκτός φόρμας το ποντίκι έχει θέμα το MouseMove.

    Εκτός και αν υπάρχει κώδικας για τις συντεταγμένες  Χ και  Υ του MouseMove που αν βγει εκτός του ελεγκτηρίου τότε να εκτελείται άλλος κώδικας.

    Μήπως έχεις να προτείνεις κάτι καλύτερο; Είμαι ανοιχτός σε κάθε ιδέα! :)


    Your Curiosity Will Be The Death Of You!
  •  17-12-2012, 11:56 71767 σε απάντηση της 71766

    Απ: Εύρεση ονόματος στοιχείου ελέγχου

    Πέρα από το να γυρίσεις σε κάποια γλώσσα που να μπορεί να κάνει αυτό που θες?

    Το πρόβλημα είναι ότι η VB6 έχει εμπόδια παντού. Θα μπορούσες να χρησιμοποιήσεις το ίδιο function ως event handler για πολλά διαφορετικά events. Σε μεγάλο βαθμό, μπορείς να ορίσεις μία μεταβλητή WithEvents και να προσθέσεις handlers για το MouseMove. Αν θυμάμαι καλά όμως, δεν μπορείς απλά να πάρεις όλα τα controls που θέλεις και να προσθέσεις event handlers, είτε επειδή το Controls property δεν επιστρέφει όλα τα controls ή επειδή, από τη στιγμή που δεν υπάρχει inheritance και casting, δεν μπορείς να χειριστείς όλα τα controls ως ένα κοινό τύπο.

    Ό,τι και να δοκιμάσεις θα είναι χακιά. Είτε θα προσπαθείς όλη την ώρα να δεις που είναι το ποντίκι, και θα διαλύσεις τη μπαταρία, ή θα πρέπει να βάλεις πολλούς event handlers. Θα μπορούσες ίσως να πιάσεις και τα windows messages σε επίπεδο φόρμας για να δεις ποιό control στέλνει Windows messages εκείνη την ώρα. Τα events στην πραγματικότητα είναι callbacks για συγκεκριμένα Windows messages που στέλνει ένα παράθυρο στην εφαρμογή.

    Όπως και να έχει, θα χρειαστεί πολύ φασαρία. Άσε που οι αναφορές ή τα βιβλία με τις τεχνικές που χρησιμοποιούσαμε πριν 10 χρόνια για να κάνουμε όσα ζητάς κοντεύουν να εξαφανιστούν. 

    Τα δικά μου σίγουρα χάθηκαν όταν πλημμύρισε το υπόγειο. Αν κανένας Καπνιάς θυμάται τίποτε ...

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems