THMMY.gr

Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα => Προγραμματισμός (C, VB, Delphi, PHP, ASP...) => Topic started by: fugiFOX on March 13, 2006, 00:22:02 am



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;  // Τέλος της Διαδικασίας
// {*************************************************************************}