Sender nur über Dynamik Cast verwertbar?



  • Ich bekomme hier ungeberechtigt (!?) andauernd irgendwelche exceptions an den Kopf geballert...

    void __fastcall THauptForm::MausUeberSpacerBewegen(TObject *Sender,
          TShiftState Shift, int X, int Y)
    {
      if((X >= Rahmen[1].Links-3 && X <= Rahmen[1].Rechts+3) &&
         (Y >= Rahmen[1].Oben-3 && Y <= Rahmen[1].Unten+3))
      {
        dynamic_cast<TImage*>(Sender)->Cursor = crSizeNWSE;
      }
    
      AktuelleKoordinatenImBild(-1, -1);
    }
    

    Gibt es eine Möglich das dyn. Casten zu umgehen? 😋



  • Du kannst natürlich auch statisch casten [((TImage)Sender)->Cursor ...* ], bei dem eigentlichen Problem hilft dir das aber auch nicht. Wenn Sender nicht vom Typ TImage ist schlägt das casten so oder so fehl.

    Der Vorteil bei dynamic_cast ist, dass du prüfen kannst, ob es erfolgreich war. Siehe dazu die FAQ um Abschnitt "Allgemeine Programmiertips".

    Mit Aussagen wie "irgendwelche Exceptions" ist übrigens nicht viel anzufangen. Du solltest dir a) die Meldungen auch mal durchlesen und analysieren, und b) ggf. hier posten, um die Problemlösung zu erleichtern.



  • shareholder,

    shareholder schrieb:

    Gibt es eine Möglich das dyn. Casten zu umgehen?

    Du wendest dynamic_cast so an, als wüßtest Du genau, daß sich hinter dem Sender ein TImage* verbirgt. Wenn dem so wäre, könntest Du auch einen C-cast verwenden.
    Überprüfe besser, ob Dein dynamic_cast auch tatsächlich einen gültigen Wert zurückliefert:

    TImage* image = dynamic_cast<TImage*>(Sender);
    if (image != 0)
    {
        image->Cursor = crSizeNWSE;
    }
    

Anmelden zum Antworten