Label Frage + eine Weitere



  • Sagen wir mal ich habe 2 Labels untereinander

    Label1
    
    Label2
    

    Nun, wenn ich VK_DOWN drücke wird Label1 Rot.
    Wenn ich nochmal VK_DOWN drücke wird Label1 wieder die Farbe wie am Anfang und
    Label 2 Rot.

    Wie geht das?

    nun meine weitere Frage.
    Wie kann ich allgemein solche dinge machen.
    Wie geht der Code dass ich zweimal etwas drücken kann ohne 2 Buttons zu brauchen oder so?

    lg h4xter



  • kann man ganz einfach machen:

    if(c==0) {
    Label1->Color=clRed;
    c++;}
    else{
    Label1->Color=clBlue;
    c--;}
    

    und da sbekommt man auch ohne wissen von ireghdwelchen funktionen hin .. einfach mal sufu nutzen



  • guck dir mal (in der BcB-Hilfe) bei TButton die Eigenschaft 'Tag' an



  • Was ist dieses c-- und c++.

    Bei mir ist immer undefiniert.
    Wie geht das GENAU? 😃



  • c ist ein Integer(int) (muss bei dir dann auch im quelltext initialiesiert sein 'int c;' 😉 )

    und ++ ist der inkrement und -- ist dekrement
    da er erhöht einen wert um eins(++) oder vermindert es (--)
    ein bisschen literatur (also ganz grob und kurz):
    es gibt die vorläufer von C++ und zwar C davor gabs B davor A
    so eigentlich hätten die C++ auch D nennen können aber *zwinker* der wert wird ja um eins erhöht also ist C++ D (im übertragenen Sinne geht nur mit Zahlen also Integer 😉 )

    und zur eigentlichen Frage:
    da: http://www.c-plusplus.net/forum/viewtopic-var-t-is-217250.html
    hast du doch schon fast die selbe Frage gestellt mit selben Hintergrund 😕



  • Bei sowas einfachen kannste:

    if(Label1->Color == clRed)
    {
       Label1->Color = clBlue;
       Label2->Color = clRed;
    }
    else
    {
      Label1->Color = clRed;
      Label2->Color = clBlue;
    }
    

    Wen zum Beispiel ein Button zwei verschiedene Arten von Ereignissen nacheinander machen soll:

    Header:

    void __fastcall Button1Click(TObject *Sender);
    void __fastcall Button1Click2(TObject *Sender);
    

    CPP:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        Button1->OnClick = Button1Click2;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click2(TObject *Sender)
    {
        Button1->OnClick = Button1Click;
    }
    //---------------------------------------------------------------------------
    

    mfg



  • @ Multi

    Wie geht das denn?

    **
    Label1
    Label2**

    ALSO:

    Wenn ich nun VK_DOWN klicke wird Label1 Rot.
    Wenn ich nochmal VK_DOWN klicke wird Label1 wieder wie vorhin und label2 wird Rot

    Ich krieg es einfach net hin 😞



  • oh sind ja Labels 😃

    genau so wie mit den Buttons 😉
    TLabel hat auch 'Tag'



  • wie soll das denn genau sein?

    variante 1:

    1 2
    1 2
    1 2
    1 2
    1 2

    oder variante 2:

    1 2
    1 2
    1 2
    1 2
    1 2
    ?

    bei variante 2 guck dir das mit den Tags an und + eine if-else-Bedingung
    bei variante 1 " " " " " " " " + 1-2Zeilen mehr schreiben 😉



  • Also ich meine es so:

    z.B

    Label1
    Label2
    Label3
    Label4

    Nun habe ich einmal VK_DOWN gedrückt.

    Label1
    Label2
    Label3
    Label4

    Nochmal VK_DOWN gedrückt.

    Label1
    Label2
    Label3
    Label4

    Nochmal VK_DOWN gedrückt.

    Label1
    Label2
    Label3
    Label4

    So meine ich das. Nur dass es statt "fett" dann rot ist 😉



  • Ach sooooo 💡

    ja dann mach das mit einem Inkrement (das mit dem ++ 😉 )

    und dann am besten eine switch-Bedingung die deine erhöhte Zahl überprüft (die ++ wird)
    und in den einzelnen case dann die farbige gestalltung und beim letzten (dh bei dir 3) nicht vergessen die Variabel (also den Integer) wieder auf 0 setzten

    also:

    int deineZahl = 0;
    switch(deinZahl)
    {
    case 0: //code für farbige Labels (hier für Label1)
    deineZahl++;
    break;
    case 1: //code für Farbe des Label2 ... usw
    deineZahl++;
    break;
    case n: /*also dein letztes case ..   *code* */
    deineZahl = 0;
    }
    


  • Geht nicht.

    Also meine Form sieht so aus:
    http://img3.imagebanana.com/img/0ov61s0y/Unbenannt.bmp.png

    Und das habe ich in einen Timer gepackt:

    {
    int deineZahl = 1;
    switch(3)
    {
    case 0: if(GetAsyncKeyState(VK_DOWN))Label1->Font->Color=clRed;
    deineZahl++;
    break;
    case 1: if(GetAsyncKeyState(VK_DOWN))Label3->Font->Color=clRed;
    deineZahl++;
    break;
    }
    }
    


  • Hi,

    switch(3)
    

    😕

    mfg, Micha



  • kA wie es geht. Pls schreibt ma den Code rein :S



  • Lies dir besser mal eine Erklärung dazu durch, besser noch das ganze Tutorial.
    http://tutorial.schornboeck.net/switch.htm



  • Also ich fasse mal zusammen:

    Du weißt nicht was ein Inkrement/Dekrement ist.
    Das heißt du kennst auch keine for-Schleife (da ist das fast sozusagen ein Hauptbestandteil)

    Zudem weißt du auch nichts von eine switch-Bedingung.

    Bei recht einfachen Sachen kommst du nicht weiter.

    Da gab es mal sonn schönen Satz von akari (hab den Beitrag nicht gefunden):
    Einen Programmierer mit OOP und GUI anfangen zu lassen, ist als wenn man einen Nichtschwimmer bei Sturm ins Wasser stürzt. (oder so ähnlich)

    Ich würde dir Raten erstmal programmieren in einer Konsole zu lernen,
    sodass dir nachher die ganzen Schleifen/Bedingungen usw ein Name ist.

    Und zu deinem Problem:
    In einem Timer das hineinzumachen ist eigentlich (für die CPU (obwohl die packt das dann wie in den L2Cache rein)) recht zeitaufwendig, also immer in einem gewissen Zeitinterval das zu überprüfen.
    Es gibt da eine andere Möglichkeit, guck mal in der FAQ


Anmelden zum Antworten