Announcement

Collapse
No announcement yet.

Label Komponenete

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Label Komponenete

    hi,

    so mal ne Frage nebenbei wie kann man ein Label immer zentriet halten auch wenn die Wörter immer größer werden.

    Ich hab es schon mit lbl_text->Left usw ausprobiert.

    gibt es da keine funktion die mir das ausrechnen erspart ?

  • #2
    ja, den Labelrahmen über die ganze Breite ziehen und die Eigenschaft Alignment auf taCenter setzen Autosize auf false
    Christian

    Comment


    • #3
      Ich hab noch ne Frage bei Hang Man sind ja meist die zu suchenden Wörter mit _ unterlegt also die Buchstaben ich hab es jetzt so gemacht das er mir eine Linie zieht (bsp.: das wort ist Apfel _____ so nun sieht man dass, das Wort nicht erkennbar ist aber man kann nur schwer die Anzahl der Buchstaben erkennen).

      hiermit mache ich diesen Strich
      for(int i=1;i<=Wort.Length();i++) // solange bis i = Wort länge des zu suchenden Wortes
      {
      lbl_text->Caption=lbl_text->Caption.Insert("_",i); //fügt bei jeder Stelle ein "_" ein
      }
      so nun dachte ich das ich so etwas (bsp.: Apfel _ _ _ _ _) machen könnte das erkennt man besser und es sieht besser aus.
      Bloß wie mache ich das ich habe oben einfach nur zwei Leerzeichen eingefügt lbl_text->Caption=lbl_text->Caption.Insert("Leerzeichen_Leerzeichen",i);

      jedoch kann ich dann aber nicht mehr diese Überprüfung machen

      void pruefe() //Funktion zum prüfen ob der
      {
      Wort=Wort.UpperCase(); //eingebene (angeklickte) Buchstaben
      String temp;
      //in dem Wort vorhanden ist



      btn[Tastenwert]->Visible=false; //mache den geklickten Buchstaben unsichtbar

      if(Wort.AnsiPos(Tastendruck)>0) //suche Buchstabe Tastendruck im String Wort
      { //Buchstabe vorhanden dann ->

      temp=lbl_text->Caption; //dem Hilfstring die Ausgabe zuweisen

      for (int i=1;i<=Wort.Length();i++) //Zählschleife zählt solange bis i gleich der länge des Wortes ist
      {
      if (Wort.SubString(i,1)==Tastendruck) //schaut ob an der Stelle i (die 1 bedeutet ein Buchstabe) der String gleich mit dem Tastendruck ist
      temp[i] = Wort[i]; //Wenn ja schreibt er diesen Buchstaben an von Wort[i] and die gleiche Stelle in temp[i]

      }

      lbl_text->Caption = temp; //zeige den String nun im Label
      }

      else //Buchstabe nicht vorhanden ->
      {
      fehler++; //erhöhe Merker (Fehlerzähler)
      lbl_fehler->Caption=fehler; //zeigen den Wert in dem Label

      fehler_pruefe(); //führt die Funktion aus mit der entweder die Linien gezeichnet
      } //oder die Endnachricht gesendet wird (sie haben verloren)

      if(Wort==lbl_text->Caption) //überprüft ob der gegebene String(Wort) dem Ausgabe Feld ist
      {
      Application->MessageBoxA(String("Du hast das Wort erraten: "+Wort).c_str(),"Gewonnen!!!",MB_OK|MB_ICONEXCLAMA TION); //Wenn ja Nachricht ausgeben (sie haben das Wort erraten)
      win++;
      lbl_win->Caption=win;
      runden++;
      btn_startClick(this); //danach wieder eine neue Runde starten
      }

      was muss ich hier ergänzen oder verändern damit ich sie wieder benutzen kann!!

      Comment


      • #4
        Du könntest vor der Überprüfung Deine Variable temp wieder "bereinigen", z.B. mittels
        Code:
        temp = StringReplace(temp, " _ ", "_", TReplaceFlags() << rfReplaceAll);
        Gruß Knut

        Comment


        • #5
          das geht nicht wenn ich vor dem das erstetze sieht das Ergebniss nachher so aus wenn das Wort Apfel war und ich es schon erraten habe kommt das zum Vorschein Apfel_ _ _ _ _.

          Comment


          • #6
            Da hast Du was falsch gemacht, denke ich.

            Beispiel:
            • MyLabel->Caption beinhaltet "Ap _ _ l, es fehlen also noch 'f' und 'e' und jeder dieser Buchstaben wird als ' _ ' (blank / underscore / blank) dargestellt.
            • Wenn Du nun StringReplace anwendest, wird aus jedem Vorkommen von ' _ ' (blank / underscore / blank) '_' (underscore) - so wie Du das am Anfang hattest, was aber schlecht zu lesen war.

            Du darst diesen 'bereinigten' String natürlich nur zum Vergleichen heranziehen und so nicht zurückschreiben, sondern musst vorher StringReplace mit vertauschten Parametern (Quelle, Ziel) aufrufen:
            Code:
            MyLbl->Caption = StringReplace(temp, "_", " _ ", TReplaceFlags() << rfReplaceAll)

            Comment


            • #7
              kannst du mir das an meinem Code (siehe oben) zeigen ?

              wo ich den StringReplace usw. machen muss ?

              Comment


              • #8
                Originally posted by Mister Love View Post
                kannst du mir das an meinem Code (siehe oben) zeigen ?

                wo ich den StringReplace usw. machen muss ?
                Nein, finde es bitte selbst heraus, sonst muss ich Dir 'ne Rechnung schreiben
                • Ersetze, bevor Du vergleichst
                • Ersetze zurück, bevor Du es wieder anzeigen lässt

                Comment


                • #9
                  void pruefe() //Funktion zum prüfen ob der
                  {
                  Wort=Wort.UpperCase(); //eingebene (angeklickte) Buchstaben
                  String temp;
                  //in dem Wort vorhanden ist



                  btn[Tastenwert]->Visible=false; //mache den geklickten Buchstaben unsichtbar

                  if(Wort.AnsiPos(Tastendruck)>0) //suche Buchstabe Tastendruck im String Wort
                  { //Buchstabe vorhanden dann ->

                  temp=lbl_text->Caption; //dem Hilfstring die Ausgabe zuweisen
                  temp = StringReplace(temp, " _ ", "_", TReplaceFlags() << rfReplaceAll); /_/_/_/
                  for (int i=1;i<=Wort.Length();i++) //Zählschleife zählt solange bis i gleich der länge des Wortes ist
                  {
                  if (Wort.SubString(i,1)==Tastendruck) //schaut ob an der Stelle i (die 1 bedeutet ein Buchstabe) der String gleich mit dem Tastendruck ist
                  temp[i] = Wort[i]; //Wenn ja schreibt er diesen Buchstaben an von Wort[i] and die gleiche Stelle in temp[i]

                  }
                  temp = StringReplace(temp, "_", " _ ", TReplaceFlags() << rfReplaceAll); /_/_/_/
                  lbl_text->Caption = temp; //zeige den String nun im Label
                  }

                  else //Buchstabe nicht vorhanden ->
                  {
                  fehler++; //erhöhe Merker (Fehlerzähler)
                  lbl_fehler->Caption=fehler; //zeigen den Wert in dem Label

                  fehler_pruefe(); //führt die Funktion aus mit der entweder die Linien gezeichnet
                  } //oder die Endnachricht gesendet wird (sie haben verloren)

                  if(Wort==lbl_text->Caption) //überprüft ob der gegebene String(Wort) dem Ausgabe Feld ist
                  {
                  Application->MessageBoxA(String("Du hast das Wort erraten: "+Wort).c_str(),"Gewonnen!!!",MB_OK|MB_ICONEXC LAMA TION); //Wenn ja Nachricht ausgeben (sie haben das Wort erraten)
                  win++;
                  lbl_win->Caption=win;
                  runden++;
                  btn_startClick(this); //danach wieder eine neue Runde starten
                  }
                  also ich habe was ich eingefügt habe mit /_/_/_/ so etwas gekennzeichnet !! schau ob es richtig !

                  Comment


                  • #10
                    Na, geht doch!
                    Ich habe jetzt nicht die Zeit, es genau zu prüfen, aber scheint richtig zu sein...

                    Ist denn das Ergebnis so, wie Du es willst - nur das zählt!

                    Comment


                    • #11
                      das was ich dir vorhin hingeschrieben hatte habe ich auch schon versucht bloß es geht nicht.


                      Denn letzten Buchstaben macht er auf den ersten Strich mehr nicht alle anderen macht er davor und er schreibt das Wort zusammen.

                      BSP.: wenn das Wort Apfel heißt dann sieht das so aus

                      1. _ _ _ _ _
                      2. l _ _ _ _
                      3. el _ _ _ _
                      4. fel _ _ _ _
                      5. pfel _ _ _ _
                      6. Apfel _ _ _ _

                      aber das Wort soll ja so aussehen:
                      A p f e l
                      _ _ _ _ _
                      jeder Buchstabe ist schön über seinem Strich also der Strich ist nachher weg nur das du es mal siehts was ich meine. So wie oben also das falsche schreibt er ja alles aneinander !

                      Comment


                      • #12
                        muss ich vllt hier noch ein Leezeichen dazuschreiben
                        hier bei der Zuweisung damit nachher die Worte auch so aussehen: A p f e l .
                        temp[i] = Wort[i]; //Wenn ja schreibt er diesen Buchstaben an von Wort[i] and die gleiche Stelle in temp[i]

                        Comment


                        • #13
                          Dann scheint noch was in Deiner Funktion
                          fehler_pruefe(); //führt die Funktion aus mit der entweder die Linien gezeichnet
                          } //oder die Endnachricht gesendet wird (sie haben verloren)
                          nicht zu stimmen (Debugger benutzen! . ) Schau Dir an, wie temp nach der Schleife aussieht und wie nach dem 'Rückwärts'-StringReplace.

                          Comment


                          • #14
                            Du hast inzwischen eine RAR-Datei mit den Debugger Erklärungen bekommen...
                            Christian

                            Comment


                            • #15
                              ???? ich dreh bald noch ab!!

                              Wenn ich beispiel das temp debuggen möchte muss ich doch ...
                              void pruefe() //Funktion zum prüfen ob der
                              {
                              Wort=Wort.UpperCase(); //eingebene (angeklickte) Buchstaben
                              String temp;
                              //in dem Wort vorhanden ist



                              btn[Tastenwert]->Visible=false; //mache den geklickten Buchstaben unsichtbar

                              if(Wort.AnsiPos(Tastendruck)>0) //suche Buchstabe Tastendruck im String Wort
                              { //Buchstabe vorhanden dann ->

                              temp=lbl_text->Caption; //dem Hilfstring die Ausgabe zuweisen
                              temp = StringReplace(temp, " _ ", "_", TReplaceFlags() << rfReplaceAll); Haltepunkt
                              for (int i=1;i<=Wort.Length();i++) //Zählschleife zählt solange bis i gleich der länge des Wortes ist
                              {
                              if (Wort.SubString(i,1)==Tastendruck) //schaut ob an der Stelle i (die 1 bedeutet ein Buchstabe) der String gleich mit dem Tastendruck ist
                              temp[i] = Wort[i]; //Wenn ja schreibt er diesen Buchstaben an von Wort[i] and die gleiche Stelle in temp[i]

                              }
                              temp = StringReplace(temp, "_", " _ ", TReplaceFlags() << rfReplaceAll); debuggen an der Stelle also mach ich hier einen Haltepunkt !!
                              lbl_text->Caption = temp; //zeige den String nun im Label
                              }

                              else //Buchstabe nicht vorhanden ->
                              {
                              fehler++; //erhöhe Merker (Fehlerzähler)
                              lbl_fehler->Caption=fehler; //zeigen den Wert in dem Label

                              fehler_pruefe(); //führt die Funktion aus mit der entweder die Linien gezeichnet
                              } //oder die Endnachricht gesendet wird (sie haben verloren)

                              if(Wort==lbl_text->Caption) //überprüft ob der gegebene String(Wort) dem Ausgabe Feld ist
                              {
                              Application->MessageBoxA(String("Du hast das Wort erraten: "+Wort).c_str(),"Gewonnen!!!",MB_OK|MB_ICONEXC LAMA TION); //Wenn ja Nachricht ausgeben (sie haben das Wort erraten)
                              win++;
                              lbl_win->Caption=win;
                              runden++;
                              btn_startClick(this); //danach wieder eine neue Runde starten
                              }
                              das smilie sollen Haltepunkte sein.

                              dann kann ich mir nochmalerweise doch mittels Ausdruck am Cursor anschauen welchen wert der da hat !! oder?

                              Comment

                              Working...
                              X