TImage wird auf dem Panel nicht angezeigt unter bestimmten Bedingungen



  • Ich versuche ein dynamisch erstelltes TImage auf einem Panel anzeigen zu lassen. Das Panel hat absolute Größen und liegt in einer Scrollbox, mit dem ich dann in dem Panel rumscrollen kann.

    Das TImage wird so angezeigt.

    void __fastcall TCard::BringToPlay(void)
    {
      Graphics::TBitmap* bmp = new Graphics::TBitmap(); //Zwischenspeicher für das Bild
      bmp->Width = 40;
      bmp->Height = 55;
      TRect r(1,1,39,54); //Für das Bild
      TRect s(0,0,40,55); //Für den Rahmen
    
      bmp->Canvas->StretchDraw(r, CardImage->Picture->Bitmap); //Voriges Bild zwischenspeichern
    
      bmp->Canvas->Brush->Color = Spieler->GetColor();
      bmp->Canvas->FrameRect(s); //Rahmen mit der Spielerfarbe um das Bild
    
      CardImage->Picture->Bitmap->Assign(bmp);
      CardImage->Parent = Form1->SpielfeldPanel;
    
      CardImage->OnMouseDown = OnMouseDown;
      CardImage->OnMouseUp   = OnMouseUp;
      CardImage->OnMouseMove = OnMouseMove;
    
      delete bmp;
    }
    

    Wenn ich das Bild an einer Position anzeigen lasse, die nicht in dem Ausschnitt der Scrollbox liegt, dann wird das Bild perfekt angezeigt.
    Wenn das Bild in dem Ausschnit der Scrollbox angezeigt wird, wird das Bild gar nicht angezeigt. Die Maße und Koordinaten stimmen aber, dass konnte ich über den Hint und über den OnMouseDown-Event testen. Das einzige was Fehlt, ist die Darstellung.

    Dieses Phänomen passiert nur dann, wenn ich diese Funktion über TidTCPServer->Execute() aufrufe.
    Wenn diese Funktion über ein Button oder ein Timer aufgerufen wird, funktioniert die Darstellung auch perfekt.

    Ich bin ein bisschen ratlos. Hat jemand eine idee für eine mögliche Ursache? Ich kann mir das einfach nicht erklären.



  • versuche es mal unter Zeile 15 mit einem

    CardImage->Repaint();
    

Anmelden zum Antworten