Aufruf der Pfeil - Funktion: Problem mit Canvas



  • Hi,

    ich hab folgendes Problem,
    die Funktion, die einen Pfeil darstellen lässt, bringt beim Aufrufen zwei Fehlermeldungen:

    [C++ Fehler] Bitausgabe.cpp(111): E2034 Konvertierung von 'TCanvas *' nach 'TCanvas' nicht möglich
    
    und 
    
    [C++ Fehler] Bitausgabe.cpp(111): E2340 Keine Übereinstimmung des Typs beim Parameter 1 ('TCanvas' erwartet, 'TCanvas *' erhalten)
    
    void ZeichnePfeil(TCanvas, TColor Col, byte sLange, byte Beta, bool Filled, TPoint P1, TPoint P2)
    {
            TPoint Punkte[2];              // Array für die Punkte der Pfeilspitze
            int Alpha, AlphaZ;             // Winkel zur horizontalen Achse durch P1
    
            //Farben einstellen
            Form2->Canvas->Brush->Color = Col;
            Form2->Canvas->Pen->Color = Col;
    
      //Linie zeichnen
      Form2->Canvas->Pen->Style = psSolid;
      Form2->Canvas->MoveTo(P1.x,P1.y);
      Form2->Canvas->LineTo(P2.x,P2.y);
    
      //Pfeilspitze (1.Punkt)
      Punkte[0].x = P2.x;
      Punkte[0].y = P2.y;
    
      //Winkel ermitteln
    
      Alpha = 0;
      if(P2.x == P1.x) AlphaZ = 0;
      else            AlphaZ = GetRAD(atan_d((P2.y - P1.y) / (P2.x - P1.x)));
    
      if((P2.x > P1.x) && (P2.y == P1.y)) Alpha = 0;
      else if((P2.x > P1.x) && (P2.y < P1.y))  Alpha = 0 - AlphaZ;
      else if((P2.x == P1.x) &&(P2.y < P1.y))  Alpha = 90;
      else if((P2.x < P1.x) && (P2.y < P1.y))  Alpha = 180 - AlphaZ;
      else if((P2.x < P1.x) && (P2.y == P1.y))  Alpha = 180;
      else if((P2.x < P1.x) && (P2.y > P1.y))  Alpha = 180 - AlphaZ;
      else if((P2.x == P1.x) && (P2.y > P1.y))  Alpha = 270;
      else if((P2.x > P1.x) && (P2.y > P1.y))  Alpha = 360 - AlphaZ;
    
      //2.Punkt
      Punkte[1].x = (P2.x - sLange * cos(GetDEG(Alpha - Beta / 2)));
      Punkte[1].y = (P2.y + sLange * sin(GetDEG(Alpha - Beta / 2)));
    
      //3.Punkt
      Punkte[2].x = (P2.x - sLange * cos(GetDEG(Alpha + Beta / 2)));
      Punkte[2].y = (P2.y + sLange * sin(GetDEG(Alpha + Beta / 2)));
    
      //Pfeil zeichnen
      if(Filled)  Form2->Canvas->Polygon(Punkte,3);
      else
      {
        Form2->Canvas->MoveTo(Punkte[0].x, Punkte[0].y);
        Form2->Canvas->LineTo(Punkte[1].x, Punkte[1].y);
        Form2->Canvas->MoveTo(Punkte[0].x, Punkte[0].y);
        Form2->Canvas->LineTo(Punkte[2].x, Punkte[2].y);
      }
    }
    

    Funktion, die ich aufrufe:

    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
            ZeichnePfeil(Image1->Canvas,clBlue,10,50,FALSE,Point(50,50),Point(100,100));
            ZeichnePfeil(Image1->Canvas,clRed,10,50,TRUE,Point(50,50),Point(100,20));
    }
    //---------------------------------------------------------------------------
    

    wie muss ich denn meine Funktion ZeichnePfeil aufrufen?
    der compiler meckert ja bei Image1->Canvas..

    Vielen Dank!
    Max



  • void ZeichnePfeil(**TCanvas ***, ...)



  • Hallo

    du must den Parameter Canvas als Pointer definieren

    void ZeichnePfeil(TCanvas *,
    

    wobei ich mich frage, warum du den Parameter überhaupt brauchst, wenn du den gar nicht verwendest?

    Desweitern würde ich diese Funktion als Member von Form2 deklarieren, damit du in der Funktion alle Verweise auf Form2 entfernen kannst.

    bis bald
    akari



  • akari schrieb:

    Desweitern würde ich diese Funktion als Member von Form2 deklarieren, damit du in der Funktion alle Verweise auf Form2 entfernen kannst.

    Oder aber den Parameter korrigieren und dann auch über diesen zeichnen. Das sieht mir eher nach der beabsichtigten Wirkung aus.



  • danke für eure Antworten,

    das ist mir im wesentlichen auch klar, hab es ja mit dem Zeiger bei TCanvas probiert, aber dann geht es ja auch net, dann erfolgt im wesentlichen die gleiche Fehlermeldung, hab ein bisschen rum gespielt, aber das hat alles nicht geklappt..

    kennt jemand noch andre möglichkeiten pfeile zu zeichnen ??



  • im wesentlichen die gleiche fehlermeldung ist etwas anderes als die gleiche fehlermeldung! zeig doch mal deinen erfolglosen versuch.


Anmelden zum Antworten