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

 

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

Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

Îåêßíçóå áðü ôï ìÝëïò pantelee. Τελευταία δημοσίευση από το μέλος George J. Capnias στις 17-07-2007, 23:27. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-06-2007, 20:51 32995

    Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    Συνημμένα: ContainerBox2.3.rar

    Θέλησα να φτιάξω ένα ελεγκτήριο ActiveX το οποίο να μπορεί να περιέχει και άλλα ελεγκτήρια (όπως το PictureBox και το Frame). Χρησιμοποίησα τη βοήθεια του ActiveX Control Interface Wizard και έφτιαξα το έλεγκτήριο ώστε να έχει όλες τις ιδιότητες που θα έχει και ένα PictureBox.

    Σε κάποια σημεία έκανα επεμβάσεις. Συγκεκριμένα:

    Επέμβαση 1:
    Παρατήρησα ότι στο ScaleMode γινόταν 0 (User) μόλις έτρεχε η εφαρμογή που περιείχε το ελεγκτήριο. Τελικά η αιτία ήταν ότι στο ReadProperties event διαβάζονταν οι ιδιότητες ScaleWidth, ScaleHeight κτλ οι οποίες αυτόματα άλλαζαν το ScaleMode. Η λύση ήταν:
    UserControl.ScaleMode = PropBag.ReadProperty("ScaleMode", 1)
    If ScaleMode = 0 Then
     
    UserControl.ScaleWidth = PropBag.ReadProperty("ScaleWidth", 4800)
      UserControl.ScaleTop = PropBag.ReadProperty("ScaleTop", 0)
      UserControl.ScaleLeft = PropBag.ReadProperty("ScaleLeft", 0)
      UserControl.ScaleHeight = PropBag.ReadProperty("ScaleHeight", 3600)
    End If
     


    Επέμβαση
    2:
    Πολλές ιδιότητες (Appearance, BackStyle ...) ήταν δηλωμένες ως Integer χωρίς Enumeration. Αυτό μειονεκτούσε στην εμφάνιση του πίνακα των ιδιοτήτων. Αυτό που έκανα ήταν να δημιουργήσω από μόνος μου Enumeration για κάθε τέτοια ιδιότητα και να αλλάξω τη δήλωση της μεταβλητής της. Η λύση π.χ. για την ιδιότητα BackStyle:
    Enum BackStyleEnum
      [bs-Transparent] = 0
     
    [bs-Opaque] = 1
    End Enum

    και
    'WARNING! DO NOT REMOVE OR MODIFY THE FOLLOWING COMMENTED LINES!
    'MappingInfo=UserControl,UserControl,-1,BackStyle
    Public Property Get BackStyle() As BackStyleEnum
        BackStyle = UserControl.BackStyle
    End Property
    Public Property Let BackStyle(ByVal New_BackStyle As BackStyleEnum)
        UserControl.BackStyle() = New_BackStyle
        PropertyChanged "BackStyle"
    End Property

    Παρεπιπτόντως, οι γραμμές 'WARNING!... 'MappingInfo... τι ρόλο παίζουν;


    Επέμβαση 3:

    Παρατήρησα ότι η ιδιότητα MaskColor εμφανιζόταν ως αριθμός και όχι ως παλέτα επιλογής χρώματος. Συγκρίνοντάς την με άλλες ιδιότητες (BackColor, ForeColor) πρόσεξα ότι δηλώνονταν ως Long και όχι ως OLE_COLOR που συνέβαινε στις άλλες. Άλλαξα τη δήλωση σε OLE_COLOR και το πρόβλημα λύθηκε.


    Και τρία προβλήματα που δεν μπορώ να φανταστώ τη αντιμετώπισή τους:


    Πρόβλημα 1:

    Το ελεγκτήριο δε συγκρατεί την ιδιότητα BackColor. Ορίζω σε DesignTime το BackColor π.χ. σε κόκκινο και μόλις τρέξω την εφαρμογή ξαναπαίρνει το default χρώμα του συστήματος. Παρατήρησα μάλιστα ότι οι γραμμές του κώδικα που αφορούν τις ιδιότητες BackColor και ForeColor είναι ακριβώς οι ίδιες. Και ενώ η τιμή της BackColor δε συγκρατείται, η τιμή της ForeColor δεν παρουσιάζει κανένα πρόβλημα.
    Πρόχειρη λύση
    : Καθορίζω το BackColor σε RunTime στο Load Event της φόρμας.


    Πρόβλημα 2:

    Οι φόρμες και τα συνηθισμένα ελεγκτήρια-ControlContainers έχουν την ιδιότητα να επηρεάζουν το μέτρο της διάστασης των ελεγκτηρίων που περιέχουν σύμφωνα με την ιδιότητά τους ScaleMode. Π.χ. ένα TextBox με Width = 1500 που βρίσκεται μέσα σε ένα PictureBox το οποίο έχει ScaleMode = vbTwip, θα έχει Width = 100 αν αλλάξουμε το ScaleMode του PictureBox σε vbPixels. Το ελεγκτήριο που έχω φτιάξει εγώ δεν το κάνει αυτό και μάλιστα τα ελεγκτήρια που περιέχει μετρώνται σε twips πάντα και ανεξάρτητα από την τιμή της ιδιότητας ScaleMode είτε του ελεγκτηρίου είτε της φόρμας.
    Πρόχειρη λύση
    : Όποτε μου χρειαστεί κάτι που αφορά τις διαστάσεις των ελεγκτηρίων, κάνω μετατροπή από twips (θα είναι πάντα twips;) σε αυτήν που θέλω.


    Πρόβλημα 3:

    Έχω μέσα σε ένα PictureBox ένα πλήθος από Combo, Option, Command controls και στα Click Event αυτών μία πληθώρα γραμμών εντολών οι οποίες χρειάζονται αρκετό χρόνο κατά την εκτέλεση τους (γιαυτό και χρησιμοποιώ DoEvents μέσα στις γραμμές αυτές) ενώ δεν πρέπει τα Events αυτά να εκτελεστούν ταυτόχρονα. Για τον λόγο αυτό στην αρχή κάθε τέτοιου Event έχω τη γραμμή Picture1.Enabled = False και αντίστοιχα στο τέλος τη γραμμή Picture1.Enabled = True. Οι γραμμές αυτές "παγώνουν" τα ελεγκτήρια αυτά για όσο διαρκεί η εκτέλεση των γραμμών εντολών στο κάθε Event, ώστε να μην μπορεί ο χρήστης κατά τον χρόνο εκτέλεσης να καλέσει άλλο event. Με το PictureBox όλα καλά. Αν όμως το αντικαταστήσω με το ελεγκτήριο που έχω φτιάξει αντιμετωπίζω -τουλάχιστον- το εξής: Αν στο Combo γυρίσω τη ροδέλα του ποντικιού κατά περισσότερα από ένα κλικ, αυτά, απ' ό,τι καταλαβαίνω, αποθηκεύονται σε κάποια μνήμη και τα Events εκτελούνται το ένα μετά το άλλο. Αυτό το πρόβλημα με το PictureBox και ακριβώς τις ίδιες γραμμές κώδικα δεν το είχα. Δηλαδή το PictureBox.Enabled δρα άμεσα στα ελεγκτήρια που περιέχει, ενώ το ελεγκτήριο που έχω φτιάξει όχι.
    Πρόχειρη λύση
    : Στην αρχή κάθε event, εκτός από το Container1.Enabled = False να βάζω και το Combo1.Enabled = False και αντίστοιχα στο τέλος. Έτσι δουλεύει. Αλλά γιατί να διαφέρει από το PictureBox;


    Θα ήθελα τη γνώμη σας για τις επεμβάσεις που έκανα και τη βοήθειά σας στα προβλήματα που αντιμετωπίζω.


    Ευχαριστώ
    Παντελής


    Υ.Γ. Το ελεγκτήριο που θέλησα να φτιάξω είναι ένα PictureBox εφοδιασμένο με δύο ScrollBars, ένα οριζόντιο και ένα κατακόρυφο, τα οποία θα εμφανίζονται και θα παίρνουν θέση και τιμές ανάλογα με το μέγεθος του ελεγκτηρίου και τη θέση των ελεγκτηρίων που θα περιέχονται σε αυτό, όπως συμβαίνει και με ένα σωρό φόρμες (MDI, Explorers). Μήπως τελικά υπάρχει κάποια έτοιμη λύση; Ούτως ή άλλως τα σχόλια και οι απαντήσεις σας θα μου χρησιμεύσουν και θα τις ήθελα. Άλλωστε, όπως βλέπετε, πρόχειρες και ίσως μεμονωμένες λύσεις έχω βρει. Θα ήθελα να μάθω αν υπάρχουν δόκιμες και αποδεκτές.


    Για οποιαδήποτε σχόλια, επισυνάπτω το project (οι εικόνες είναι μικρές και συμπιεσμένες λόγω μεγέθους). Ευχαρίστως θα απαντήσω σε οτιδήποτε.

  •  18-06-2007, 12:24 33009 σε απάντηση της 32995

    Re: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    Συγγνώμη... προσπαθώ να καταλάβω το POST.

    Τι είναι το ελεγκτήριο?

    -------------------------------
    Κ. Γιαγιάς

    Θα ήθελα να είμαι μέσα στην φωτογραφία και όχι εδώ!!!!

    http://beastie06.wordpress.com
  •  18-06-2007, 15:03 33014 σε απάντηση της 33009

    Απ: Re: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    ελεγκτήριο = control (λογικά)
  •  18-06-2007, 18:31 33021 σε απάντηση της 33014

    Απ: Re: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    Πράγματι, είναι τα control. Την ορολογία την πήρα από ένα βιβλίο που έχω. Ελεγκτήρια, σύμφωνα με την ορολογία αυτή, είναι τα TextBox, PictureBox, CommandButton, CheckBox κτλ. Ακόμη και το ActiveX Control που επιχειρώ να φτιάξω είναι ελεγκτήριο.
  •  18-06-2007, 19:14 33022 σε απάντηση της 33021

    Απ: Re: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    Κανείς δεν χρησιμοποιεί τη φράση "ελεγκτήριο". Είναι άλλη μία κακή μετάφραση ενός αγγλικού όρου, όπως και τόσες άλλες στα τεχνικά βιβλία που μεταφράζονται στα ελληνικά. Όπως και να έχει, σπάνια θα βρει κανείς καλό βιβλίο μεταφρασμένο στα ελληνικά (πως λέμε, 15 χρόνια έχω δει μόνο ένα).
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  19-06-2007, 15:52 33044 σε απάντηση της 33022

    Re: Απ: Re: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    Μα για αυτό είχα και την αρχική μου απορία. Ελεγα ισως να είναι αλλά δεν μπορω να είμαι σίγουρος και για αυτό καλύτερα να ρωτήσω.

    Καλές είναι οι μεταφράσεις αλλά καλό είναι στην τεχνολογία να μιλάμε με τους αγγλικούς όρους ώστε όλοι να καταλαβαίνουμε το ίδιο...

    Βοηθάει και το search το DNZ αν η ορολογία είναι πάντα σε μία γλώσσα. (όπως δλδ αποφεύγουμε και τα greeklish)


    Για τα προβλήματα τώρα. Δεν γνωρίζω κάτι. Αν βρω χρόνο θα δοκιμάσω τον κώδικα που έστειλες μήπως βρω κάτι.

    -------------------------------
    Κ. Γιαγιάς

    Θα ήθελα να είμαι μέσα στην φωτογραφία και όχι εδώ!!!!

    http://beastie06.wordpress.com
  •  24-06-2007, 14:25 33126 σε απάντηση της 32995

    Απ: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    Βρέθηκα σε ένα φίλο και κατέβασα το συνημμένο που είχα στείλει από το δικό του υπολογιστή και είδα ότι δεν τρέχει. Πρέπει να φταίει η αποθήκευση των διαδρομών μέσα στα αρχεία .vbg, .vbp, .frm για κάποια reference. Τελικά μάλλον το συνημμένο αυτό τρέχει μόνο στο δικό μου υπολογιστή και για να τρέξει σε κάποιον άλλο πρέπει να γίνουν κάποιες αλλαγές στα αρχεία (μία πατέντα μπορεί να γίνει αν ανοιχτούν τα αρχεία αυτά με το σημειωματάριο και γίνουν εκεί κάποιες επεμβάσεις, αλλά γιατί;). Πιστεύω πως έχω κάνει αυτές τις αλλαγές με πιο σωστό τρόπο και πως το νέο συνημμένο θα λειτουργεί σε κάθε υπολογιστή.
  •  01-07-2007, 19:35 33300 σε απάντηση της 33126

    Απ: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    Αν και καθυστεριμένα ήθελα να απαντήσω σε αυτό το ερώτημα... Έχω το project επάνω στο desktop μου επάνω από δύο βδομάδες και έψαχνα καιρό να το κάνω!

    Το πρόβλημα με τις διαδρομές δεν είναι φοβερό, μερικές αλλαγές στο .vbg και στα .vbp και είμαστε οκ!

    Πρόβλημα 1:
    Στο Public Property Let BackColor γράφεις UserControl.BackColor() = New_BackColor. Αν και πίστευα ότι δεν θα έκανε compile με αυτό, έκανε μια χαρά. Άλλαξε το σε UserControl.BackColor = New_BackColor να δεις αν το πρόβλημα με το background πρόβλημα παραμένει

    Πρόβλημα 2:
    Μάλλον θα πρέπει να "παίξεις" περισσότερο με το Private Sub UserControl_InitProperties(). Από ότι βλέπω διαβάζεις μόνο το Ambient.Font. Θα πρέπει να δεις και να χρησιμοποιήσεις το Ambient.ScaleUnits για να μπορείς να έχεις ομοιόμορφες μονάδες σε όλα τα controls. Μπορεί να σε βοηθήσει και στην Επέμβαση 1.

    Πρόβλημα 3:
    Εδώ θα πρέπει να κατανοήσεις πως δουλεύει η VB6. Στην VB6 υπάρχει μόνο ένα execution thread - αυτό σημαίνει ότι κάθε στιγμή εκτέλεση κώδικα μπορεί να γίνεται μόνο σε ένα σημείο του προγράμματος. Συνεπώς 2 events δεν θα εκτελούνται ταυτόχρονα. Μερικές συμβουλές/προτροπές για καλύτερα αποτελέσματα:

    • Μέσα σε ένα event προσπαθούμε να γράφουμε κώδικα που θα εκτελεστεί όσο το δυνατόν πιο γρήγορα, για να εξασφαλίσουμε ότι δεν θα προκίψει ένα άλλο event που θα προσπαθήσει να εκτελεστεί, όταν εκτελείται ο κώδικάς μας.
    • Όταν παρόλα αυτά ο κώδικας είναι αναγκαστικά μεγάλος, μία λύση είναι να βάλουμε το DoEvents, και να επιτρέψουμε στο πρόγραμμα να λάβει και άλλα events - αυτό όμως είναι δίκοπο μαχαίρι, γιατί μπορεί να μπούμε στο ίδιο event και να εκτελεστεί κάτι την δεύτερη φορά και να έχει υποθέσει ότι έχει τελιώσει το προηγούμενο συνήθως με καταστροφικά αποτελέσματα. Συνήθως εγώ έχω μια static boolean που όταν εκτελώ κώδικα event event την κάνω true, ενώ ταυτόχρονα στην αρχή του κώδικα του event υπάρχει ένα if statement που ελέγχει αν αυτό το boolean είναι false, για να αποτρέψει την ροή του προγράμματος από το κώδικα του event εφόσον ήδη βρίσκεται σε εκτέλεση. Ο δικός σου τρόπος - να κάνεις disable το control, πρέπει να ομολογίσω ότι είναι προτότυπος - δεν τον έχω ξαναδει κάπου. Αν δεν σου προκαλεί προβλήματα με το display (flickering) δεν υπάρχει λόγος να το αλλάξεις.
    • Ο μηχανισμός των windows μαζεύει τα events σε μια ουρά και περιμένει την εφαρμογή να τα βγάλει και να τα επεξεργαστεί - με το τρόπο που σου περίγραψα ότι χρησιμοποιώ εγώ, τα events βγαίνουν από την ουρά και δεν τρέχει κώδικας για αυτά. Με τον δικό σου τρόπο, παραμένουν και περιμένουν να εκτελεστούν - πιθανώς να σου προκαλέσει προβλήματα στην εφαρμογή σου όταν γεμίσει η ουρά.
    • Καλό είναι στα ActiveX DLL, ActiveX EXE και ActiveX Controls τα projects να γίνονται compile με Binary Compatibility, για να μπρορεί να υπάρξει δυνατότητα μεταφερσιμότητας της εφαρμογής και debug από τρίτες εφαρμογές σε άλλο υπολογιστή από αυτόν που έχει γίνει compile το VB6 project.
    • Δες να μην χρησιμοποιείς δικά σου enums με τις ιδιότητες του control - χρησιμοποιήσε τα έτοιμα που έχει η VB6.

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  12-07-2007, 18:56 33556 σε απάντηση της 33300

    Απ: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    Επίσης καθυστερημένα κι εγώ, μέσα σ' όλα έλειπα και σε διακοπές.
    George J., σ' ευχαριστώ για την απάντησή σου.

    Πρόβλημα 1:
    Οι παρενθέσεις με παραξένεψαν κι εμένα. Δεν είναι δικός μου κώδικας. Αυτόματα γράφεται από το ActiveX Control Interface Wizard. Μόλις διάβασα την απάντηση το δοκίμασα και ...τίποτα Sad. Αμέσως μετά ήρθε η αναλαμπήBig Smile . Είχα την υποψία ότι κάποια γραμμή αναιρούσε την τιμή της ιδιότητας του BackColor. Στη ρουτίνα ReadProperties άλλαξα τη σειρά των γραμμών κι έβαλα αυτή που αφορά το BackColor τελευταία και δούλεψε. Μετά από δοκιμές βρήκα ότι έφταιγε η ιδιότητα Appearance. Με την παρακάτω δοκιμή γίνεται πέρα για πέρα κατανοητό:
    Σε μία φόρμα αλλάξτε το BackColor και στη συνέχεια δώστε στην ιδιότητα Appearance την τιμή 1 - 3D (ενώ είναι ήδη 1!). Το χρώμα του BackColor επιστρέφει στο αρχικό του συστήματος. Αυτό γινόταν και στη ReadProperties.

    Πρόβλημα 2:
    Και πάλι, στην InitProperties ο κώδικας που αφορά το Ambient.Font είναι γραμμένος αυτόματα. Απ' ότι είδα η Ambient.ScaleUnits είναι String και όχι enumarated integer όπως οι σταθερές vbTwips, vbPixels. Να παίρνω if Ambient.ScaleUnits = "Twip" then AmbScaleMode = vbTwips κτλ; Και αυτό που δεν ανταποκρίνεται σωστά είναι το ScaleMode του Control και όχι το ScaleMode της φόρμας. Αλλά και κάτι άλλο: Κάποιες ιδιότητες δεν ορίζονται μέσα από τις γραμμές του κώδικά μας, έτσι δεν είναι; Π.χ. ανεξάρτητα από το τι ActiveX Control θα φτιάξω αυτό θα έχει τις ιδιότητες Index, ToolTipText, Left, Top χωρίς να έχω μεριμνήσει για αυτές. Μπορώ να ορίσω τις ιδιότητες Width και Height των ContainedControls μέσα από κώδικα; Το μόνο που μπορώ να φανταστώ είναι το ScaleMode και ενώ αυτό κάνω δε λειτουργεί. Με το ScaleUnits θα το ψάξω λιγάκι και γενικά θέλει λίγο ψάξιμο.

    Πρόβλημα 3:
    Εδώ θα εφεύρω το μονόπρακτο του διαλόγου!
    George J. Capnias:
    2 events δεν θα εκτελούνται ταυτόχρονα.

    Κατανοητότατο.
    George J. Capnias:
    Μέσα σε ένα event προσπαθούμε να γράφουμε κώδικα που θα εκτελεστεί όσο το δυνατόν πιο γρήγορα, για να εξασφαλίσουμε ότι δεν θα προκίψει ένα άλλο event που θα προσπαθήσει να εκτελεστεί, όταν εκτελείται ο κώδικάς μας.

    Ιδανικό και μερικές φορές ουτοπικό! Πολλές φορές έχω ταλαιπωρηθεί από τέτοιες περιπτώσεις. Μαλιστα πρόσφατα παραδόξως έγινε κλήση από event σε event την οποία δεν είχα φανταστεί, με βόλεψε αφάνταστα πολύ και ενώ προσπάθησα, ακόμα δεν έχω εντοπίσει!
    George J. Capnias:
    Συνήθως εγώ έχω μια static boolean που όταν εκτελώ κώδικα event event την κάνω true...

    Παρομοίως. Τελικά δεν πρωτοτυπώ συνεχώς!
    George J. Capnias:
    Ο μηχανισμός των windows μαζεύει τα events σε μια ουρά και περιμένει την εφαρμογή να τα βγάλει και να τα επεξεργαστεί...

    Εδώ ας σταθούμε λίγο. Σύμφωνοι. Υπάρχει ουρά και με τον ένα τρόπο τα events κρατιούνται στην ουρά ενώ με τον άλλον όχι. Ποια η διαφορά ενός PictureBox από το δικό μου Control; Διότι στο PictureBox το αποτέλεσμα δείχνει ότι τα events δεν κρατιούνται στην ουρά. Και στα δύο χρησιμοποιώ το Enabled. Διότι όλα αυτά είναι κατανοητά αλλά μήπως η απάντηση είναι άλλη; Στο σημείο αυτό να παραθέσω και μια υποψία μου:
    Κάνω πολλαπλά click με τη ροδέλα στο Combo. Με το πρώτο click το event του Combo θέτει το Enabled του Parent Control σε False. Τα υπόλοιπα click περιμένουν στην ουρά. Μόλις ολοκληρωθεί η εκτέλεση του κώδικα το Enabled επιστέφει σε True. Η ουρά ανοίγει και τα click εκτελούνται, αλλά: Στην περίπτωση του PictureBox το Focus πηγαίνει στο PictureBox και τα click εκεί δε βρίσκουν κώδικα να εκτελέσουν ενώ στην περίπτωση του Control το Focus επιστρέφει στο Combo, εκτελείται το επόμενο click και τελικά εκτελούνται όλα. Να τονίσω ότι εντοπίζω διαφορά μόνο στο Combo και μόνο στα events από ένα συνεχόμενο ρολάρισμα της ροδέλας (υπάρχει παράδειγμα στο επισυναπτόμενο για να τονιστεί ακριβώς αυτό).
    George J. Capnias:
    Καλό είναι στα ActiveX DLL, ActiveX EXE και ActiveX Controls τα projects να γίνονται compile με Binary Compatibility...

    Αυτό θέλει λίγο ψάξιμο. Ξέρω πως γίνεται αλλά δεν ξέρω ποια η διαφορά. Δεν περιμένω να το ψάξω πρώτα και μετά να απαντήσω διότι τότε θα απαντούσα προκλητικά αργά.
    Η αναφορά σε Compatibility μου θύμησε και μία ερώτηση που έχω περί των ActiveX Controls. Την αναφέρω στο τέλος.
    George J. Capnias:
    Δες να μην χρησιμοποιείς δικά σου enums...

    Πράγματι θα ήταν καλό. Μάλιστα τα enum που έχω φτιάξει δημιουργούν και πρόβλημα στη χρήση τους καθώς τα ονόματα είναι μη-επιτρεπτά και κάθε φορά χρειάζεται να τα περικλείεις με αγκύλες.

    Κάτι που ανέφερες στην αρχή το αφήνω για το τέλος. Αισθάνομαι πως το post ξεχυλώνει αλλά ίσως η όλη συζήτηση έχει ένα κοινό σημείο αναφοράς τα ActiveX Controls.
    George J. Capnias:
    Το πρόβλημα με τις διαδρομές δεν είναι φοβερό, μερικές αλλαγές στο .vbg και στα .vbp και είμαστε οκ!

    Ψύχραιμο σε βλέπω. Πράγματι αν ανοίξω τα αρχεία αυτά με το σημειωματάριο μπορώ να κάνω κάποιες παρεμβάσεις. π.χ. μία διαδρομή Form=D:\Παντελής\Προγραμματισμός\Drafts\Browsers\Folder Browser\frmBrowser.frm τη μετατρέπω σε Form=frmBrowser.frm και πιάνει (η φόρμα frmBrowser.frm να βρίσκεται στον ίδιο φάκελο με το αρχείο .vbp). Αλλά στην αντιστοίχιση Object={59E5D0C8-4C70-489A-87B0-AB080AF1204C}#1.0#0; UserControl.ocx τι μπορώ να κάνω; Μου βγάζει κάτι πράγματα για upgrade control και γενικά δε βγάζω άκρη. Και το βασικότερο: Ορισμένες φορές αυτές οι διαδρομές αποθηκεύονται χωρίς να καταλάβω το γιατί. Μπορώ να κάνω μία ρύθμιση ώστε να αποφέυγω τέτοια προβλήματα; Ίσως κάποιες φορές αυτή η αποθήκευση των διαδρομών να είναι χρήσιμη αλλά για μένα είναι μόνο μπελάς. Όλες τις φόρμες, τις κλάσεις και τα μόντουλα που αφορούν ένα project τις αποθηκεύω πάντα στον ίδιο φάκελο.


    Παντελής
  •  17-07-2007, 21:24 33632 σε απάντηση της 33300

    Απ: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    Για το 2ο πρόβλημα:
    Τελικά παραμένει ως έχει. Αναφέρεται ως bug: http://support.microsoft.com/kb/q188552/
    ...και η πατέντα που πρότεινα ως πρόχειρη λύση είναι ίδια με αυτή που προτείνεται.
  •  17-07-2007, 23:27 33637 σε απάντηση της 33556

    Απ: Συμπεριφορά ActiveX - Προσπάθεια για ContainerBox

    pantelee:
    George J. Capnias:
    Το πρόβλημα με τις διαδρομές δεν είναι φοβερό, μερικές αλλαγές στο .vbg και στα .vbp και είμαστε οκ!

    Ψύχραιμο σε βλέπω. Πράγματι αν ανοίξω τα αρχεία αυτά με το σημειωματάριο μπορώ να κάνω κάποιες παρεμβάσεις. π.χ. μία διαδρομή Form=D:\Παντελής\Προγραμματισμός\Drafts\Browsers\Folder Browser\frmBrowser.frm τη μετατρέπω σε Form=frmBrowser.frm και πιάνει (η φόρμα frmBrowser.frm να βρίσκεται στον ίδιο φάκελο με το αρχείο .vbp). Αλλά στην αντιστοίχιση Object={59E5D0C8-4C70-489A-87B0-AB080AF1204C}#1.0#0; UserControl.ocx τι μπορώ να κάνω; Μου βγάζει κάτι πράγματα για upgrade control και γενικά δε βγάζω άκρη. Και το βασικότερο: Ορισμένες φορές αυτές οι διαδρομές αποθηκεύονται χωρίς να καταλάβω το γιατί. Μπορώ να κάνω μία ρύθμιση ώστε να αποφέυγω τέτοια προβλήματα; Ίσως κάποιες φορές αυτή η αποθήκευση των διαδρομών να είναι χρήσιμη αλλά για μένα είναι μόνο μπελάς. Όλες τις φόρμες, τις κλάσεις και τα μόντουλα που αφορούν ένα project τις αποθηκεύω πάντα στον ίδιο φάκελο.

    Φαίνεται ότι μου διέφυγε το μήνυμά σου.

    Σε αυτό το σημείο, εισέρχεται αυτό που σου είχα γράψει για το πως θα γίνει compile το project σου - όταν έχεις ActiveX DLLs και EXEs θα πρέπει να έχει binary compatibility ακριβώς για να μην αλλάζει αυτό το νούμερο.

    Ένας πρακτικός τρόπος να το σώσεις, είναι να φτιάξεις ένα καινούργιο project που να το χρησιμοποιεί και να αντιγράψεις - μέσω Notepad - την γραμμή που της δήλωσης, από το καινούργιο project στο παλιό που δεν μπορεί να το βρει.

    Για το path, δεν υπάρχει κάποια ρύθμιση που μπορείς να κάνεις. Το "πρόβλημα" συνήθως παρουσιάζεται όταν δημιουργήσεις το project, ή το μετονομάσεις και δημιουργήσεις ή προσθέσεις αρχείο μέχρι να βγεις από την VB6. Αλλιώς δεν έχει τέτοια προβλήματα, οι διαδρομές είναι σχετικές και δεν έχεις μπλεξίματα.

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems