TImage objekte werden nicht ständig angezeigt.



  • Hey @all,

    und zwar habe ich vor für den Anfang eine Art "Schiffe versenken" zu erstellen.
    Das Problem was ich jedoch habe ist, das die "fehlerhaften Schüsse" nicht ständig angezeigt werden, sondern immer nur einer.

    Hier mal der Quellcode

    void __fastcall TForm1::FormCreate(TObject *Sender) {
      int CoordX = 0;
      int Width_Height = 25;
      int Quad = 24;
      for(int x=0; x<Quad; x++) {
        int CoordY = 0;
        for(int y=0; y<Quad; y++) {
          TSpeedButton* sb = new TSpeedButton(this);
          sb->Height = Width_Height;
          sb->Width = Width_Height;
          sb->Left = (CoordX * sb->Width)+1;
          sb->Top = (CoordY * sb->Height)+1;
          sb->Parent = Form1;
          sb->Flat = true;
          sb->OnClick = SBClick;
          sbl.push_back(sb);
          CoordY++;
        }
        CoordX++;
      }
    
      Form1->Height = (Width_Height * Quad) + Width_Height*2;
      Form1->Width = (Width_Height * Quad) + Width_Height*1;
    
      for(sblIter = sbl.begin(); sblIter != sbl.end(); ++sblIter) {
        (*sblIter)->Parent = this;
        (*sblIter)->Show();
        Application->ProcessMessages();
      }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormPaint(TObject *Sender) {
      Canvas->Pen->Color = clBlack;
      int X = 25;
      int Width_Height = 25;
      int Quad = 24;
      for(int y=0; y<Quad; y++) {
        Canvas->MoveTo(X, 0);
        Canvas->LineTo(X, (Width_Height*Width_Height));
        X += Width_Height;
      }
      int Y = 0;
      for(int y=0; y<Quad+1; y++) {
        Canvas->MoveTo(0, Y);
        Canvas->LineTo((Width_Height*Width_Height), Y);
        Y += Width_Height;
      }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::SBClick(TObject *Sender) {
      for(sblIter = sbl.begin(); sblIter != sbl.end(); ++sblIter) {
        if((*sblIter) == Sender) {
          (*sblIter)->Flat = false;
          TImage* img = new TImage(Owner);
          img = imgNoHit;
          img->Left = (*sblIter)->Left;
          img->Top = (*sblIter)->Top;
          il.push_back(img);
          delete (*sblIter);
          sbl.erase(sblIter);
          break;
        }
      }
      refresh();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::refresh() {
      for(ilIter = il.begin(); ilIter != il.end(); ++ilIter) {
        (*ilIter)->Visible = true;
        (*ilIter)->Parent = Form1;
        (*ilIter)->Show();
      }
    }
    

    Kann mir jemand sagen was ich da falsch mache?

    Vielen Dank im Voraus

    Lg _freeze_



  • freeze schrieb:

    TImage* img = new TImage(Owner);

    Mußt Du nicht auch den "Parent" setzen?? 😕



  • Den Parent setze ich doch beim anzeigen der Images

    for(ilIter = il.begin(); ilIter != il.end(); ++ilIter) {
        (*ilIter)->Visible = true;
        (*ilIter)->Parent = Form1;
        (*ilIter)->Show();
      }
    

    Lg _freeze_



  • Ich hab' da nicht viel Ahnung von.
    Aber das Ding sichtbar zu machen (visible = true) ohne daß er weiß, wo er sich überhaupt hin zeichnen soll (parent) halte ich für ziemlich seltsam... :xmas1: :xmas2: 👍 (GEIL! Die Smilies sind wieder da!!) 🤡 👍



  • Sgt. Nukem schrieb:

    Ich hab' da nicht viel Ahnung von.
    Aber das Ding sichtbar zu machen (visible = true) ohne daß er weiß, wo er sich überhaupt hin zeichnen soll (parent) halte ich für ziemlich seltsam...

    Also entweder ich bin blind, oder ich verstehe Deine Aussage nicht ganz:
    Hinzeichnen:

    (*ilIter)->Parent = Form1;
    

    Sichtbar machen:

    (*ilIter)->Visible = true;
        (*ilIter)->Show();
    

    Wo ist da jetzt das Problem? Bei mir ist es so, das er immer nur ein TImage sichtbar macht, obwohl mit dieser Schleife ja alle sichtbar werden müssten

    Lg _freeze_


Anmelden zum Antworten