Schul Projekt Wer Wird IT Champingnon



  • also pointer array like that:

    TLabel *label_arr[14];
    label_arr[0] = &Label1;
    label_arr[1] = &Label2;
    usw...
    
    for(int i=0; i<14; i++)
    { 
       label_arr[i]->Color = ...
       label_arr[i]->Font->Color = ...
       ...
    }
    


  • jop das war nicht das problem ^^ sry vielleicht wurde ich doch falsch verstanden. mein haupt problem liegt darin das

    label array lässt sich wunderbar hoch zählen verändern und so weiter nur

    habe ich auf meinem Formular 14 Labels -> Label1,Label2 .... Label14

    immer wenn die person nun eine antwort gibt wird das nächste label vberändert. einfach die counter 1 hoch und dynamische label ist verändert nur muss ich dann die labels auf dem formular mit dem des array gleich setzen damit die sich auf meinem formular auch verändern ich geh euch ma grad bissi code

    DynamicArray<TLabel*>lblArray;
    
    __fastcall TfrmMain::TfrmMain(TComponent* Owner)
            : TForm(Owner)
    {
    
      lblArray.Length = LblNum;
      edtArray.Length = EdtNum;
      for (int i = 0; i < lblArray.Length; i++){
        lblArray[i] = new TLabel(this);
        lblArray[i]->Color=clHighlight;
        lblArray[i]->Font->Color=clWhite;
        lblArray[i]->Font->Size=18;
      }
      lblArray[4]->Font->Color=clYellow;
      lblArray[9]->Font->Color=clYellow;
      lblArray[14]->Font->Color=clYellow;
    }
    
    // so nun sind die dynamischen labels initialisiert und schon fertig.
    
    void antwort(AnsiString zahl){ // zahl ist in dem fall A,B,C,D als 1,2,3,4
      if(zahl==richtig){           //richtig ist die Variable der Richtigen Antwort
        lblArray[counter]->Color=clActiveCaption;
        lblArray[counter]->Font->Color=clWhite;
        lblArray[counter+1]->Color=clSilver;
        lblArray[counter+1]->Font->Color=clBlack;             
        counter++;
        aktualisieren();
      }
      else{
        ShowMessage("Sie haben "+IntToStr(stand)+" € gewonnen!!!");
        reset();           //Funktion setzt alles zurück
      }
    
    void aktualisieren(){
        frmMain->lbl50->Color=lblArray[0]->Color;
        frmMain->lbl50->Font=lblArray[0]->Font;
        frmMain->lbl100->Color=lblArray[1]->Color;
        frmMain->lbl100->Font=lblArray[1]->Font;
        frmMain->lbl200->Color=lblArray[2]->Color;
        frmMain->lbl200->Font=lblArray[2]->Font;
        frmMain->lbl300->Color=lblArray[3]->Color;
        frmMain->lbl300->Font=lblArray[3]->Font;
        frmMain->lbl500->Color=lblArray[4]->Color;
        frmMain->lbl500->Font=lblArray[4]->Font;
        frmMain->lbl1000->Color=lblArray[5]->Color;
        frmMain->lbl1000->Font=lblArray[5]->Font;
        frmMain->lbl2000->Color=lblArray[6]->Color;
        frmMain->lbl2000->Font=lblArray[6]->Font;
        frmMain->lbl4000->Color=lblArray[7]->Color;
        frmMain->lbl4000->Font=lblArray[7]->Font;
        frmMain->lbl8000->Color=lblArray[8]->Color;
        frmMain->lbl8000->Font=lblArray[8]->Font;
        frmMain->lbl16t->Color=lblArray[9]->Color;
        frmMain->lbl16t->Font=lblArray[9]->Font;
        frmMain->lbl32t->Color=lblArray[10]->Color;
        frmMain->lbl32t->Font=lblArray[10]->Font;
        frmMain->lbl64t->Color=lblArray[11]->Color;
        frmMain->lbl64t->Font=lblArray[11]->Font;
        frmMain->lbl128t->Color=lblArray[12]->Color;
        frmMain->lbl128t->Font=lblArray[12]->Font;
        frmMain->lbl500t->Color=lblArray[13]->Color;
        frmMain->lbl500t->Font=lblArray[13]->Font;
        frmMain->lblMillion->Color=lblArray[14]->Color;
        frmMain->lblMillion->Font=lblArray[14]->Font;
    }
    

    und wie man sieht nimmt die sache mit dem AKTUALISIEREN der Formular labels am meisten platz weg. da ich für jede eigenschaft ne zeile schreiben muss.

    hoffe es ist jetzt klarer



  • frmMain->lbl50->Color=lblArray[0]->Color;

    was ist lbl50 ist das nicht im array? mach doch bitte auch ein array fuer das ganze geld zeug!



  • lol glaube wurde immer noch net verstanden. und zwar befinden sich

    15 Labels auf meinem FORMULAR
    &
    15 imaginäre Labels

    Imaginäre Labels werden verändert
    &
    Die Labels auf dem FORMULAR werden an die Imaginären Labels angepasst


  • Mod

    An irgendeiner Stelle musst du dem Compiler mitteilen, wie die Labels den Indizes des Arrays zugeordnet ist. Das kann man tatsächlich elegant durch ein weiteres Array machen, wobei die Zuordnung zwischen den beiden Arrays dann trivial über den gleichen Index erfolgt. Zweitens ist es nicht sinnvoll, jedes Attribut einzeln zuzuweisen, wenn es sich tatsächlich um einen einheitlichen Vorgang handelt. Ich weiß nicht, was ein TLabel ist, und will es auch gar nicht wissen. Möglicherweise kann man es trivial zuweisen:

    *frmMain->lblMillion=*lblArray[14]
    

    zumindest lohnt sich hierfür eine eigene Funktion, um jeweils aus zwei Zuweisungen einen Funktionsaufruf zu machen. Also:

    void aktualisieren(){
        // kann man auch nicht-statisch als normale Pointer haben, darauf kommt es nicht an
        static TLabel* TfrmMain::* const label_correlation[14]={
           &TfrmMain::lbl50,  &TfrmMain::lbl100, &TfrmMain::lbl200, &TfrmMain::lbl300, &TfrmMain::lbl500, &TfrmMain::lbl1000, &TfrmMain::lbl2000,
           &TfrmMain::lbl4000, &TfrmMain::lbl8000, &TfrmMain::lbl16t, &TfrmMain::lbl32t, &TfrmMain::lbl64t, &TfrmMain::lbl128t, &TfrmMain::lbl500t, &TfrmMain::lblMillion };
        struct {
            void operator()(TLabel& lhs, TLabel& rhs){
                lhs.Color = rhs.Color;
                lhs.Font = rhs.Font;
            }
        } aktualisiere;
        for (int i = 0; i < 14; ++i)
            aktualisiere(*(frmMain->*label_correlation[i]), *lblArray[i]);
        // wenn aktualisiere nicht gerade lokal ist, wäre ein for_each angebracht,
        // umgekehrt ist der Gewinn einer eigenen Funktion nat. geringer, wenn man sowieso
        // nur eine einfache Schleife hat
    }
    


  • also irgendwie kommt es mir so vor als wenn ich kein c++ kann. oder wir reden aneinander vorbei :D.
    bin noch net gut genug um das zu verstehen. ich bin erst in der 12ten klasse und habe programmieren erst fast einem jahr.

    was ich net verstehe ist das ihr zwei arrays machen wollt.
    warum denn zwei arrays wenn ich die labels auf dem formular net verändern kann im namen. ich weiß auch jetzt net mehr wie ich das anders ausdrücken soll. bin mit meinem latein am ende. 😞



  • hier das projekt. das was ich meine befindet sich in der uWerWirdMillionär.cpp und auf dem Formular dieser datei

    http://www.sharebigfile.com/file/146364/Projekt-rar.html



  • keiner eine idee?



  • nein. aber nicht weil das problem zu kompliziert ist, sondern weil niemand nachvollziehen kann, was dein problem überhaupt ist 🙄



  • Und weil es Borland ist ^^


Anmelden zum Antworten