ntaryl Δημοσ. 3 Μαΐου 2008 Δημοσ. 3 Μαΐου 2008 καλησπερα παιδια εχω φτιαξει ενα μικρο παραδειγμα το οποιο αποτελειται απο ενα button και ενα Ritchtextbox . πως μπορω να kανω Detect αν ο χρηστης σκρολαρει και διαβαζει στο τεχτ ως το τελος . Με λιγα λογια το κουμπι οκ να ενεργοπιειτε οταν το scrolbar φατανει ως το τελος καλο βραδυ Επισυναπτω το παραδειγμα test-scroll.zip
Directx Δημοσ. 4 Μαΐου 2008 Δημοσ. 4 Μαΐου 2008 Το πώς γίνεται σε Visual BASIC 6 δεν γνωρίζω, σε Windows API πάντως πρέπει να στείλεις το μήνυμα EM_GETLINECOUNT ώστε να αποθηκεύσεις τον αριθμό των γραμμών που περιέχει το RichEdit control και ύστερα το μήνυμα EM_LINEFROMCHAR με “wParam = -1” ώστε να λάβεις το αριθμό της γραμμής στην οποία βρίσκεται ο cursor του control (ή την αρχή κάποιου επιλεγμένου block). Τώρα για να υπολογίσεις εάν ο cursor βρίσκεται στην τελευταία γραμμή του RichEdit θα πρέπει να αφαιρέσεις -1 από την τιμή που επιστρέφει η EM_GETLINECOUNT πριν την συγκρίνεις με εκείνη της EM_LINEFROMCHAR διότι η πρώτη ξεκινά το μέτρημα των γραμμών από το 1 ενώ η δεύτερη από το μηδέν. Όλα αυτά αν κάνεις scroll με βάση την θέση του cursor - η διαδικασία με βάση τα ScrollBar είναι πιο περίπλοκη. Πιστεύω ότι το control της Visual BASIC 6 πρέπει να παρέχει όλες τις παραπάνω κλήσεις ως properties καθιστώντας τον προγραμματισμό του εξαιρετικά απλό. Ακολουθεί ένας ενδεικτικός κώδικας γραμμένος σε CodeGear Turbo C++, που παράγει έναν σύντομο ήχο από τα ηχεία του υπολογιστή μόλις φτάσουμε στην τελευταία γραμμή του RichEdit. Ο κώδικας είναι γραμμένος σε Windows API, δίχως να εκμεταλλεύεται τις ιδιότητες του RichEdit που προσφέρει η VCL. Τέλος όπου “RichEdit1->Handle” θα πρέπει να βάζετε το HWND του RichEdit control σας. > // Detect if user scrolled to RichEdit last line and "beep" ... int nRTF_MaxLine = SendMessage(RichEdit1->Handle, EM_GETLINECOUNT, 0, 0L), nRTF_LinePos = SendMessage(RichEdit1->Handle, EM_LINEFROMCHAR, -1, 0L); if(nRTF_MaxLine-1 == nRTF_LinePos) MessageBeep(-1);
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.