Title: Πως να περάσω αποδοτικά πολλές τιμές Post by: fugiFOX on March 13, 2006, 00:22:02 am έχω μερικά chechboxes και θέλω να περάσω σε μια συνάρτηση,
το ποια είναι ενεργοποιημένα. Πείτε μου έναν καλό τρόπο να το κάνω. Σκέφτηκα έχω έναν πίνακα boolean και κάθε του στοιχείου θα αντιστοιχεί σε ένα checkbox. Το πρόβλημα που έχω είναι ότι μετά αναλόγως με τον συνδυασμό τωνα CBs θα είνα ενεργοποιημένα, θα εκτελείτα κάποια ανάλογη ενέργεια. Ο πιο απλός τρόπος είναι να γίνει με κάποιο switch-case/else-if statement. Όμως όσο αυξάνεται ο αριθμός των CBs, αυτό γίνεται πρακτικά αδύνατον. Ιδέες που να γίνει αυτό; ¨Εχω δει κάτι υλοποιήσεις τύπου κάθε CB έπιστρέφει μια δυαδική τιμή δλδ 1,2,4,8,16,32,64 έτσι ώστε αν πάρουμε το άθροισμα ξέρουμε απευθείας ποιο η ποια CB είναι ενεργοπιοημένα. Ευχαριστώ όποιον προτείνει οτιδήποτε Title: Re: Πως να περάσω αποδοτικά πολλές τιμές Post by: gpavlidi on March 13, 2006, 01:09:01 am Ένας κομψος τρόπος είναι όπως είπες, το κάθε cb να είναι δύναμη του 2, και μετά να χρησιμοποιείς κατάλληλες μάσκες στο άθροισμα τους με if...
πχ. #define CHECK_BOX1 1 #define CHECK_BOX2 2 #define CHECK_BOX3 4 if(sum && CHECK_BOX1) mpla1(); if(sum && CHECK_BOX2) mpla2(); Title: Re: Πως να περάσω αποδοτικά πολλές τιμές Post by: fugiFOX on March 13, 2006, 02:33:33 am Ούτε αυτό που λες είναι τόσο αποδοτικό γιατί (ίσως φταίω και γω που δεν το ξεκαθάρισα στο πρώτο ποστ)
θέλω αναλόγως με το συνδυασμό των "αναμμένων" CBs να γίνεται και η ανάλογη ενέργεια, η οποία δεν είναι άλλη από το να προσθέτει μια αντίστοιχη λέξη σε ένα string. Π.χ. αν έχουμε 4 CBs και είναι αναμμένα το 2 και 4 θα έχει μια έξοδο του στυλ Checked are 2 and 4. Χμ, τώρα μου ήρθε μια άλλη ιδεα. κάτι σε στυλ string="schecked are" + if(cb1==true):"1"?" " if(cb3==true):"3"?" " κτλ αλλά δεν ξέρω αν θα πιάσει και αν καταλήγει σε αποδοτικότερο Title: Re: Πως να περάσω αποδοτικά πολλές τιμές Post by: Katarameno on September 25, 2013, 05:58:07 am Τι λέτε ρε παιδιά? (ανασκαφή της αρκούδας αλλά δεν άντεξα)
Τα Check Boxes έχουν ιδιότητα :Checked η οποία παίρνει τιμές true ή false :) Οπότε λες : if CheckBoxA.Checked = True then begin if CheckBoxB.Checked = True then begin ... end; ... end; else // (δηλαδή αν if CheckBox A.Checked = False) begin ... end; Παράδειγμα : Σε real κώδικα μέσα: // {*************************************************************************} /// <summary> /// Ανοίγει έναν Διάλογο Επιλογής ΓραμματοΣειράς εάν είναι τσεκαρισμένη η αντίστοιχη Επιλογή (εννοώ το αντίστοιχο CheckBox) /// αλλιώς βάζει σε Όλο το Πλέγμα ΓραμματοΣειρά Arial μεγέθους 10 Points /// </summary> procedure TDataEntryMasterBios1000Form.TMS_SetGridFont(Grid: TAdvStringGrid); var ARow , ACol : Integer ; begin try with Grid do begin // Άν είναι τσεκαρισμένη η Επιλογή Επιλογής Γραμματοσειράς (by Default είναι) if CheckBoxSelectAFont.Checked = True then begin FontDialogExcel.Execute ; // Ανοίγει τον Διάλογο Επιλογής ΓραμματοΣειράς Font := FontDialogExcel.Font ; // Βάζει σε Όλα τα Κελλιά τη ΓραμματοΣειρά που επέλεξε ο Χρήστης FixedFont := FontDialogExcel.Font ; // Βάζει σε Όλα τα Φίξ Κελλιά τη ΓραμματοΣειρά Arial end // Τέλος του if CheckBoxSelectAFont.Checked = True then else // Αλλιώς, άν δέν είναι τσεκαρισμένη η Επιλογή Επιλογής Γραμματοσειράς, // βάζει σε Όλο το Πλέγμα ΓραμματοΣειρά Arial μεγέθους 10 Points for ACol := 0 to GetAllColCount(Grid) - 1 do // Για Όλες τις Στήλες του Πλέγματος Grid begin for ARow := 0 to GetAllRowCount(Grid) - 1 do // Για Όλες τις Γραμμές του Πλέγματος Grid begin FontNames[ACol,ARow] := 'Arial' ; // Βάζει σε Όλα τα Κελλιά τη ΓραμματοΣειρά Arial FontSizes[ACol,ARow] := 10 ; // Βάζει σε Όλα τα Κελλιά τo μέγεθος των Χαρακτήρων 10 Points FixedFont.Name := 'Arial' ; // Βάζει σε Όλα τα Φίξ Κελλιά τη ΓραμματοΣειρά Arial FixedFont.Size := 10 ; // Βάζει σε Όλα τα Φίξ Κελλιά τo μέγεθος των Χαρακτήρων 10 Points end; // Τέλος του for ACol := 0 to GetAllColCount(Grid) - 1 do end; // Τέλος του for ARow := 0 to GetAllRowCount(Grid) - 1 do end; // Τέλος του with Grid do except on e: Exception do begin ShowMessage('Παρουσιάστηκε Σφάλμα στην Διαδικασία Ρύθμισης Γραμματοσειράς του Πλέγματος (ExportUpdateEventsMasterForm.TMS_SetGridFont), με μύνημα: ' + e.Message ); WriteLog('Παρουσιάστηκε Σφάλμα στην Διαδικασία Ρύθμισης Γραμματοσειράς του Πλέγματος (ExportUpdateEventsMasterForm.TMS_SetGridFont), με μύνημα: ' + e.Message + ' , από τον Χρήστη : ' + ErrorH.UserName + ' , στον Υπολογιστή : ' + ErrorH.ComputerName ) ; end; // Τέλος του on e: Exception do end; // Τέλος του try/except end; // Τέλος της Διαδικασίας // {*************************************************************************} |