Alphabet in QuickReport drucken.....Problem!



  • Danke für die rasche Antwort, so funktionierts eigentlich auch schon ganz gut. Wollte aber eigentlich 4 Buchstaben pro Zeile haben.

    Leider häng ich hier schon wieder.

    Schöne Grüße

    Maik



  • Hallo!

    Ich habe nun versucht die Schleife zu ergänzen, leider ist das Ergebnis immer, dass dann 4 x derselbe Buchstabe pro Reihe vorkommt.

    Ich möchte ja aber 4 Buchstaben des Alphabets pro Zeile, also in Zeile 1
    A,B,C,D in Zeile 2 E,F,G,H usw.

    Kann mir da jemand weiterhelfen? ich komm sonst hier nicht weiter.

    Gruß

    Maik



  • Du musst hier ansetzen:

    if (MoreData) {
        QRLabel1->Caption = myString[Row];
        Row++;
      }
    

    Anstatt nur einen Buchstaben auszugeben, musst du halt gleich vier ausgeben und Row um vier erhöhen.

    P.S. Wenn du Beispielcode posten würdest, könnte man dir bestimmt besser helfen.



  • Ich hatte es so versucht:

    void __fastcall Tf_alphabetaufkleber_drucken::QuickRep1NeedData(
          TObject *Sender, bool &MoreData)
    {
    
      static int Row = 1;
      AnsiString myString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
      if (Row <= 26)
        MoreData = true;
      else
        MoreData = false;
    
      if (MoreData) {
    
            QRLabel1->Caption = myString[Row];
        Row++;
            QRLabel2->Caption = myString[Row];
        Row++;
            QRLabel3->Caption = myString[Row];
        Row++;
            QRLabel4->Caption = myString[Row];
        Row++;
    
      }
      else
       Row = 1;
    

    Leider bricht er sofort mit einem Fehler ab.

    Auch andere Versuche sind gescheitert, weil er immer nur 2 Buchstaben geschrieben hat und dann in die nächste Zeile gesprungen ist.

    Für eine kurze Antwort wär ich dankbar

    Gruß

    Maik 😞 😞 😞



  • Die Fehlermeldung wäre jetzt auch hilfreich zu wissen.
    Ein Fehler in dem Beispielcode ist, das die Arraygrenze überschritten wird, d.h. du greifst auf myString[27] zu.



  • Die Fehlermeldung lautet:

    ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead ??

    Wie kann ich das überschreiten verhindern?

    Gruß

    Maik



  • Z. B. so:

    if (Row <= 26)
       QRLabel2->Caption = myString[Row];
    

    oder so:

    AnsiString myString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ  ";
    

    ...



  • @Fincki

    Jetzt sind wir wieder am Anfang:

    if (Row <= 26) 
       QRLabel2->Caption = myString[Row];
    

    Dieser Code kommt bei mir bereits vor!

    Noch mal, was ich möchte:

    Pro Zeile 4 Buchstaben des Alphabets, solang bis das Alphabet durch ist!

    Schöne Grüße

    Maik



  • solange du 26 Buchstaben durch 4 teilen willst gibt das immer eine Überschreitung,
    also versuch einfach mal Finkis Tipp und mach an myString noch 2 Leerzeichen dran

    und denk dran: du willst was von uns, nicht wir von dir 😉



  • Ich hatte den Beitrag von Finki nicht richtig gelesen,

    aber so funktionierts.

    Vielen Dank.

    Wollte nicht unhöflich sein.

    Gruß

    Maik



  • void __fastcall TForm1::QuickRep1NeedData(TObject *Sender, bool &MoreData)
    {
      static int al = 0;
      TQRLabel *label[4]={QRLabel1,QRLabel2,QRLabel3,QRLabel4};
      int i;
      for(i=0;i<4;i++)
      {
          if(al+i<26) label[i]->Caption=char(65+al+i);
          else label[i]->Caption =EmptyStr;
      }
      al+=i;
      if(al<26) MoreData=true;
      else MoreData=true;
    }
    

Anmelden zum Antworten