Event aufrufen. ( Bitte nach Vcl C++ Builder verschieben. )



  • Hi, ich wollte mal fragen wie ich z.B. aus meinem OnPaint event meiner Paintbox jetzt einen event eines anderes Objektes aufrufe ( z.B. den OnCLick event eines buttons. )

    der grund für was ich sowas brauche ist, ich mache grad nen programm das mir ne parabel zeichnen. und da ich nicht herausgefunden habe wie ich meinen persönlichen event mache hab ich das zeichnen der parabel auf einen button-onclick event gelegt und das zeichnen des untergrundes auf den onpaint event.

    doch wenn ich jetzt meine x o. y achse verschiebe verschwindet die parabel natürlich ^^ und deswegen will ich den zeichenevent der parabel nochmal aufrufen



  • OnPaint(), Paintbox? - Sicher das du in WinAPI richtig bist? - Hört sich irgendwie Delphi-mässig an?



  • hum, bin mir sehr sicher 🙂 nennt sich eben so in borland ^^

    hier mal mein sourcecode

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Para.h"
    #include <sstream>
    #include <windows.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int XCorrection = 0;
    int YCorrection = 0;
    float ax = 0.115;
    float bx = 5;
    float c = 0;
    const int maxX = 100, maxY = 100;
    const int minX = -100, minY = -100;
    const int Feinheit = 1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    
    }
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    void __fastcall TForm1::btn_EndeClick(TObject *Sender)
    {
    Application->Terminate();
    }
    //---------------------------------------------------------------------------
    //--------------------Der besagte On Paint event.  --------------------------
    //---------------------------------------------------------------------------
    void __fastcall TForm1::pb_MalenPaint(TObject *Sender)
    {
    // Zeichenfarben Setzen
       pb_Malen->Canvas->Pen->Color=cb_Farbe->Selected;
       pb_Malen->Canvas->Brush->Color=cb_HintergrundFarbe->Selected;
    // Untergrund Malen
       pb_Malen->Canvas->FillRect(Rect(0,0,pb_Malen->Width,pb_Malen->Height));
    // Vertikale ( x , y ) X Endlos, Y = Hälfte vom Fenster
       pb_Malen->Canvas->MoveTo(     0,                   pb_Malen->Height / 2 + YCorrection);
    // Linie zur anderen Bildschirmseite
       pb_Malen->Canvas->LineTo(     pb_Malen->Width,     pb_Malen->Height / 2 + YCorrection);
    // Horizontale ( x , y ) Y Endlos, X = Hälfte vom Fenster
       pb_Malen->Canvas->MoveTo(     pb_Malen->Width / 2 + XCorrection,      0);
    // Linie von oben nach Unten
       pb_Malen->Canvas->LineTo(     pb_Malen->Width / 2 + XCorrection,      pb_Malen->Height);
    // Skalierung 
    
    // ==========Striche
    int Count = 0;// Strichabstand
    while ( Count < pb_Malen->Width / 2 ){
    // ------------X Achse-Striche Links----------------- X Achse ----------- Y Achse ---------
                   pb_Malen->Canvas->MoveTo((pb_Malen->Width/2)-Count,(pb_Malen->Height/2)-10 + YCorrection);
                   pb_Malen->Canvas->LineTo((pb_Malen->Width/2)-Count,(pb_Malen->Height/2)+10 + YCorrection);
    // ------------X Achse-Striche Rechts---------------- X Achse ----------- Y Achse ---------
                   pb_Malen->Canvas->MoveTo((pb_Malen->Width/2)+Count,(pb_Malen->Height/2)-10 + YCorrection);
                   pb_Malen->Canvas->LineTo((pb_Malen->Width/2)+Count,(pb_Malen->Height/2)+10 + YCorrection);
    // ________________________________________________________________________________________
    Count += 100;// Strichabstand
    }
    Count = 0;
    while ( Count < pb_Malen->Height / 2){
    // ------------Y Achse-Striche Oben----------------- X Achse ----------- Y Achse ---------
                   pb_Malen->Canvas->MoveTo((pb_Malen->Width/2)-10 + XCorrection,(pb_Malen->Height/2)-Count);
                   pb_Malen->Canvas->LineTo((pb_Malen->Width/2)+10 + XCorrection,(pb_Malen->Height/2)-Count);
    // ------------Y Achse-Striche Unten---------------- X Achse ----------- Y Achse ---------
                   pb_Malen->Canvas->MoveTo((pb_Malen->Width/2)-10 + XCorrection,(pb_Malen->Height/2)+Count);
                   pb_Malen->Canvas->LineTo((pb_Malen->Width/2)+10 + XCorrection,(pb_Malen->Height/2)+Count);
    // ________________________________________________________________________________________
    Count += 100;// Strichabstand
    // === Note
    // === Hätte man glaub ich auch einfach von links nach rechts machen koennen statt von der Mitte aus :|
    // === Ausrede = Wie ein schüler ^^
    // === Note End
    }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::cb_FarbeChange(TObject *Sender)
    {
    pb_Malen->Refresh();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::cb_HintergrundFarbeChange(TObject *Sender)
    {
    pb_Malen->Refresh();
    }
    //---------------------------------------------------------------------------
    // ========== Bei den folgenden Buttons sollte der btn_Zeichen OnClick event aufgerufen werden
    //---------------------------------------------------------------------------
    void __fastcall TForm1::btn_HochClick(TObject *Sender)
    {
    YCorrection+=100;
    pb_Malen->Repaint();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::btn_RunterClick(TObject *Sender)
    {
    YCorrection-=100;
    pb_Malen->Repaint();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::btn_LinksClick(TObject *Sender)
    {
    XCorrection+=100;
    pb_Malen->Repaint();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::btn_RechtsClick(TObject *Sender)
    {
    XCorrection-=100;
    pb_Malen->Repaint();
    }
    //---------------------------------------------------------------------------
    //===========================================================================
    //---------------------------------------------------------------------------
    void __fastcall TForm1::btn_ZeichnenClick(TObject *Sender)
    {
    // S = Scheitelpunkt
    float xS = -1 * bx / 2*ax;
    float yS = -1 * bx * bx / 4*ax + c;
    // P = Zu Zeichnender Punkt.
    float xP = 0;
    float yP = 0;
    int Durchlauf = 1;
    // While schleife noch fehlerbehaftet!
    //while (( xP < maxX+XCorrection && xP > minX+XCorrection ) && ( yP < maxY+YCorrection && yP > minY+YCorrection))
    while (( xP < maxX && xP > minX ) || ( yP < maxY && yP > minY))
          {
          float temporaryX, temporaryY;
          if ( Durchlauf == 1 )
             {
             temporaryX = xS;
             temporaryY = yS;
             }else
                  {
                  temporaryX = xP;
                  temporaryY = yP;
                 }
          xP = Feinheit * Durchlauf;
          yP =( xP * xP ) * ax;
              pb_Malen->Canvas->MoveTo((pb_Malen->Width/2)+temporaryX+XCorrection,(pb_Malen->Height/2)-temporaryY+YCorrection);
              pb_Malen->Canvas->LineTo((pb_Malen->Width/2)+xP+XCorrection,(pb_Malen->Height/2)-yP+YCorrection);
              pb_Malen->Canvas->MoveTo((pb_Malen->Width/2)-temporaryX+XCorrection,(pb_Malen->Height/2)-temporaryY+YCorrection);
              pb_Malen->Canvas->LineTo((pb_Malen->Width/2)-xP+XCorrection,(pb_Malen->Height/2)-yP+YCorrection);
          Durchlauf += 1;
          }
    // Note == Zu erweitern, erst achsenkreuz fertigstellen!
    }
    //---------------------------------------------------------------------------
    

    EDIT: Uppppsss... okay vieleicht gehört das hier doch eher in Vcl ( C++ Builder )


Anmelden zum Antworten