Canvas auf ein Panel malen



  • Hi allerseits!

    Ich möchte im Form-Show-Ereignis ein Panel mit irgendwas vollmalen. Leider wird nach dem Programmstart nichts angezeigt, da das Canvas sofort wieder vom Panel überlagert wird. Führe ich dagegen die selbe Funktion über einen Button aus, so wird die Zeichenfläche korrekt dargestellt:

    void __fastcall TfrmMain::FormShow(TObject *Sender)
    {
       float Step;
       TRect BandRect;                                   //Panel hat kein Canvas 
       TControlCanvas *PanelCanvas = new TControlCanvas; 
       PanelCanvas->Control=Panel1;
       Step=(float)Panel1->ClientHeight / 256;
       for(int i=0;i<256;i++)
       {
          BandRect.Left = 0;
          BandRect.Top = (int)(i*Step);
          BandRect.Right = Panel1->ClientWidth + 1;
          BandRect.Bottom = (int)((i+1)*Step);         
          PanelCanvas->Brush->Color = RGB(0, 0, 255-i);
          PanelCanvas->FillRect(BandRect);
       }
    
       delete PanelCanvas;
    }
    

    Meine Frage ist nun, wie kann ich es erreichen das die Zeichenfläche richtig dargestellt wird?

    MfG F98



  • Überschreib die WM_PAINT deines Panels.



  • Hi WebFritzi

    Ich hab noch ein bisschen im Forum rescherschiert und so ein ähnliches Thema gefunden "canvas in OnPaint" vom 08.08.2002 da hatte Eßer das selbe Problem mit einem Label. Die Lösung in dem Fall war dann nach zwei Seiten WM_Paint und Subclassing einfach das Label auf transparent=true zu setzen.
    Die Frage nun, ist das in dem Fall nicht auch sinvoll bzw. wie geht das ??
    Und wenn nicht wie macht man das mit WM_Paint, hab damit noch keine Erfahrung weiter.

    Aber Vielen Dank schonmal



  • Schau mal in die FAQ unter "Windows Messages". Da steht, wie du das mit dem WM_PAINT machen kannst.
    Du scheinst eine Art horizontale ProgressBar bauen zu wollen. Mach dir doch ne neue Kompo, abgeleitet von TGraphicControl. Da kannst du auch direkt die Methode Paint() überschreiben und hast ein Canvas.



  • Hey, wenn du
    PanelCanvas->Parent = Form; setzt,
    könnte es eigentlich auch funktionieren, denke ich mir, hab es aber nicht ausprobiert.

    Zu "Eigene Kompo schreiben"
    Über WindowsMessages Handle gibt es wirklich einen guten Beitrag in der FAQ.

    [ Dieser Beitrag wurde am 08.04.2003 um 10:28 Uhr von maam editiert. ]



  • @WebFritzi

    Danke erstmal.

    @maam

    Das mit der eigenen Kopmo versuche ich gerade.


Anmelden zum Antworten