Eigene Grafik in StatusBar neuzeichnen bei verdecken der Form



  • Hallo,

    ich möchte in die StatusBar einen ausgefüllten Kreis zeichnen. Das funktioniert auch wunderbar bis auf 2 Situationen. Beim Start des Programmes und beim Neuzeichnen der Form wird der Kreis nicht gezeichnet.
    Ich habe schon das OnDrawPanel Ereignis probiert - leider ohne Erfolg. Scheinbar wird zuerst mein Kreis gezeichnet und dann erst das Panel.

    void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar,
          TStatusPanel *Panel, const TRect &Rect)
    {
      TCanvas *pCanvas = StatusBar1->Canvas;
    
      if(Panel->Index == 0)
      {
        if(CAN1->Active == true)
        {
          pCanvas->Brush->Color = clGreen;
        }
        else
        {
          pCanvas->Brush->Color = clGRed;
        }
    
        pCanvas->Brush->Style = bsSolid;
        pCanvas->Ellipse(4, 6, StatusBar1->Height-4, StatusBar1->Height-4);
      }
    }
    

    Gruß



  • Gehört so was nicht in die OnPaint des Forms?



  • hi, schau mal hier:

    http://www.bytesandmore.de/rad/index.htm

    unter snippets c++ / vcl/Bitmaps und ProgressBar in der Statusleiste anzeigen



  • Kannst ja mal explizit "StatusBar1->Refresh()" im OnPaint des Formulars aufrufen.



  • Mir ist zwar nicht klar was im obigen Code falsch ist, aber ich habe nun eine etwas andere funktionsfähige Version.

    void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar,
          TStatusPanel *Panel, const TRect &Rect)
    {
      if (Panel->Index == 0)
      {
        Graphics::TBitmap* pBitmap = new Graphics::TBitmap();
    
        pBitmap->Height = Rect.Height();
        pBitmap->Width  = Rect.Width();
        pBitmap->Transparent = true;
        pBitmap->TransparentColor = clWhite;
        pBitmap->Canvas->Brush->Color = clWhite;
        pBitmap->Canvas->Brush->Style = bsSolid;
        pBitmap->Canvas->FillRect(TRect(0,0,Rect.Width(),Rect.Height()));
    
        if(CAN1->Active == true)
        {
          pBitmap->Canvas->Brush->Color = clGreen;
        }
        else
        {
          pBitmap->Canvas->Brush->Color = clRed;
        }
    
        pBitmap->Canvas->Ellipse(3,3,Rect.Width()-3,Rect.Height()-3);
    
        StatusBar->Canvas->Draw(Rect.Left,Rect.Top,pBitmap);
    
        if(pBitmap)delete pBitmap;
      }
    }
    

    Warum muss ich dem Bitmap immer mit FillRect die transparente Farbe zuweisen? 😕
    Ich habe es zumindest nicht anderst geschafft.

    Gruß



  • Hrmpf

    Man sollte doch zuerst das Fenster refreshen bevor man einen weiteren Beitrag schreibt.

    @Avalon: Das Snippet war meine Basis und hat ebenfalls das Problem, dass das Icon nicht neu gezeichnet wird.

    Den richtigen Denkanstoß habe ich bei
    http://fatman98.fa.funpic.de/builder_grafik.php
    bekommen.

    Danke trotzdem!!!


Anmelden zum Antworten