Προς το περιεχόμενο

wizard & S/N & C++


emilios_x

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω ένα πρόβλημα και δε μπορώ να βρω λύση,θα ήθελα την βοήθεια σας.

 

Λοιπόν:

Προσπαθώ να κάνω ένα απλό wizard στην C,όπου θα ζητά κάποια στιγμή ένα S/N έτσι λοιπόν δημιουργώ για αρχή δυο φορμες

 

Στην Form1 έχω διάφορα κουμπάκια(δεν παίζουν ρόλο) και στο Event- OnShow της φόρμας

γράφω αυτό:

>void __fastcall TForm1::FormShow(TObject *Sender)
{
       Form2->ShowModal();        
}

 

Στην Form2 τώρα βάζω 1 editbox και 2 BitBtn όπου στο ένα BitBtn το Kind του είναι bkOK και εκεί γράφω τον παρακάτω κώδικα:

 

>int result;
       bool passok=false;

       while(!passok)
       {
               result=Form2->ShowModal();
               if(result==ID_OK)
               {
                       if(Form2->Edit1->Text!="12")
                       {
                               ShowMessage("Lathos");
                       }
                       else
                       {
                               passok==true;
                       }
                }
                else if(result==ID_CANCEL)
                {
                       break;
                }
        }
        if(!passok)
        {
               Close();
        }

 

 

Κάπου κάνω λάθος αλλά δε το βρίσκω,ο Κώδικας είναι σωστός,αλλά κάτι μου ξεφευγει ίσως στα Properties του editbox ή του BitBtn ή κάτι άλλο.

Όταν τρέχω το Project μου εμφανίζει κανονικά πρώτα την Form2 αλλά όταν βαζω το pass είναι σωστό είτε λάθος μου πετάει σφάλμα :rolleyes:

 

Κάθε βοήθεια ευπρόσδεκτη :-)

Δημοσ.

Η ματαβλητήση σου passok έχει πολύ γέλιο!!

 

Η C δεν έχει build-in τύπο boolean, αν θες να χρησιμοποιήσεις κάνε κάτι σαν το παρακάτω, μάλλον εννοείς C++, πάντως για C:

>typedef bool int
#define true 1
#define false 0

 

 

>void __fastcall TForm1::FormShow(TObject *Sender)
{
       Form2->ShowModal();        
}

 

>int result;
       bool passok=false;

       while(!passok)
       {
               result=Form2->ShowModal();
               if(result==ID_OK)
               {
                       if(Form2->Edit1->Text!="12")
                       {
                               ShowMessage("Lathos");
                       }
                       else
                       {
                               [b]passok=true;[/b]
                       }
                }
                else if(result==ID_CANCEL)
                {
                       break;
                }
        }
        if(!passok)
        {
               Close();
        }

 

Επίσης βάλε και κανένα σχόλιο στον κώδικα σου. Πιο συχνά διαβάζονται οι κώδικες από ανθρώπους παρά από μηχανές, άρα τα σχόλια είναι χρήσιμα.

Δημοσ.

Ευχαριστώ myle

Ναι μιλάω για C++ το γράφω και στο τίτλο εκ παραδρομής στην συνέχεια λέω C

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

Το passok το είχα βάλει στην αρχή σαν pass_ok αλλά μου άρεσε η ιδέα και το γύρισα σε passok :P

Είχα γράψει στα γρήγορα τον κώδικα και δεν έβαλα σχόλια στην αρχή και το πόσταρα έτσι :D

Δημοσ.
>
Form2->Edit1->Text!="12" 

???

 

Ο φίλος μας γράφει σε C/C++ Builder ο οποίος χάριν της οπτικής βιβλιοθήκης VCL (η ίδια που χρησιμοποιεί και η Delphi) επιτρέπει πολλά κόλπα, έτσι η παραπάνω εντολή απλά λέει πως αν το Text του Edit1 component της Form2 δεν είναι 12 κάνε αυτό..

 

Το Text κάθε TEdit class (edit control για το Windows API) σε C/C++ Builder VCL είναι ένα VCL AnsiString class (θυμίζει το ανάλογο C++ STL string) το οποίο ενσωματώνει τον τελεστή != (και άλλους βέβαια, πχ. ==) για απλές / γρήγορες συγκρίσεις strings (σε C θα λέγαμε strcmp) ..

 

@emilios_x:

Αντί των Windows API ID_OK ID_CANCEL μπορείς να χρησιμοποιήσεις και τα VCL mrOk και mrCancel για παράδειγμα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...