Problem mit Farbe als Eigenschaft



  • Hallo,
    ich habe eine Eigenschaft, die die Farbe eines Rechteckts bestimmen soll. Diese Eigenschaft befindet sich im Objektinspektor

    __property TColor Rect = {read = clBack, write = SetClBack};
    

    Ich speicher die Farbe in einer privaten Variable namens clBack mit der Methode SetClBack. Im Konstruktor meiner Klasse initialisiere ich diese mit clBlack:

    clBack = clBlack;
    

    Nun möchte ich in einer Funktion, die von OnPaint aufgerufen wird, meinem "Stift" diese Farbe zuweisen:

    TPen *bla;
     bla->Color = clBack;
    

    Wenn ich jedoch meine Komponente nun nehme und aufs Formular tue, dann kommt sofort ein Zugriffsverletzung.

    Weiß jemand woran das liegt?
    Danke schön



  • Das hier funktioniert:

    Canvas->Pen->Color = clBack;

    😕



  • TColor schrieb:

    Das hier funktioniert:

    Canvas->Pen->Color = clBack;

    😕

    Hallo,

    dann hat deine Komponente doch einen Pen 😃 . Also eigentlich unnötig, was du vorhast.

    Aber um deine Frage zu beantworten:

    // *.h
    
    __published:
       TPen* FPen;
       void __fastcall SetPen(TPen* Value);
       __property TPen* Pen = {read=FPen, write=SetPen, nodefault};
    
    //  *.cpp
    // im Konstuktor :
       FPen = new TPen();
       FPen->OnChange = StyleChanged;
    
    // Destruktor
    __fastcall TMeineKompo::~TMeineKompo(void) 
    {
        delete FPen; 
    }
    
    void __fastcall TMeineKompo::StyleChanged(TObject* /*Sender*/)
    {
       Invalidate();
    }
    

    Edit:
    Was mir aufgefallen ist, nimm für deine Farbe eine andere Bezeichnung,
    eine Farbe ist myBlue, clHellGelb oder so was, aber kein Rect!



  • TColor schrieb:

    TPen *bla;
     bla->Color = clBack;
    

    Du erstellst einen Zeiger von Typ TPen aber Zeigst auf nichts!


Anmelden zum Antworten