auf Änderung einer vorhandenen Eigenschaft reagieren



  • ich habe bei meiner kompo die standardeigenschaft "Enabled" hinzugefügt:

    __property Enabled;
    

    ich will jetzt aber mitbekommen, wenn Enabled sich ändert.
    ich will keine neue eigenschaft anlegen, weil ich die dann nicht mehr "Enabled" nennen kann.

    hat da jmd. eine idee?



  • Hmm... evtl. eine Set-Funktion fuer die property einführen in der du dann etwas abändern kannst? (Nachricht schicken, Messagebox ausgeben, bool-Wert verändern)



  • das problem dabei ist, wenn ich eine set-funktion hinzufüge, dann kann ich in dieser funktion nicht mehr auf das "richtige"-enabled zugreifen, weil ich es ja überschrieben hab. verstehst du das dilemma?



  • Jester2000 schrieb:

    das problem dabei ist, wenn ich eine set-funktion hinzufüge, dann kann ich in dieser funktion nicht mehr auf das "richtige"-enabled zugreifen, weil ich es ja überschrieben hab. verstehst du das dilemma?

    Also ich nicht, aber ich habe eine Vermutung. Falls Du Deine Klasse von einer bereits existierenden ableitest und in dieser Basisklasse die Enabled-Property bereits vorhanden ist, kannst Du in der set-Mehtode Deiner abgeleiteten Klasse mit "BaseClassName::Enabled" auf die ursprüngliche Enabled-property zugreifen. Ist es das, was Du suchst?

    --- editiert ----
    Ach nein, jetzt verstehe ich die Frage. Du redest von der Enlosschleife, die beim Zugriff in der set-Funktion auf die Enabled-property entsteht - gelle?
    Deswegen erstellt man eine weitere private Variable für die Speicherung des Zustandes und nennt Sie zumeist FEnabled oder so (würde gern wissen, woher das F eigentlich kommt). Zugriffe auf FEnabled werden dann nur in set und get vorgenommen.



  • hey super, war genau dass, was ich brauchte.
    ich frag mich, wie die programmierer damals ohne internet klar gekommen sind. 😃



  • Jester2000 schrieb:

    ich frag mich, wie die programmierer damals ohne internet klar gekommen sind. 😃

    RTFM 😉



  • Jester2000 schrieb:

    ich habe bei meiner kompo die standardeigenschaft "Enabled" hinzugefügt:

    __property Enabled;
    

    Ich denke du solltest dir nochmals in der FAQ WebFritzis Beitrag zur Deklaration von Properties reinziehen...

    -junix



  • hab da keinen beitrag von WebFritzis gefunden.
    was hast du denn an der deklaration auszusetzen?



  • Du meinst davon abgesehen, dass das nicht funktioniert?

    http://www.c-plusplus.net/forum/viewtopic.php?t=39242&highlight=property Den beitrag meinte ich. Hatte ihn etwas anders in Erinnerung. So wie da properties deklariert sind ists richtig. (und löst gleichzeitig grad auch ncoh dein Problem)

    Ausserdem gibts beim BCB > 3 auch eine Funktion "Eigenschaft hinzufügen" wenn du einen Rechtsklick auf die entsprechende Klasse machst...

    -junix



  • hmm, ich glaub du hattest mein problem nicht richtig verstanden
    mit dem was WebFritzis gepostet hab ich ja grad das Problem bekommen
    ich weiß wie man eine neue Eigenschaft implementiert, nur wollte ich eine vorhandene nutzen, ohne sie selbst neu schreiben zu müssen.

    also mit der idee von dschensky hat es wunderbar funktioniert:

    __property Enabled = {write = setIVEnabled};
    .
    .
    .
    void __fastcall TGDButton::setIVEnabled(bool newValue)
    { TCustomPanel::Enabled = newValue;
      Repaint();  // ziel war es, dieses repaint aufzurufen, wenn Enabled 
                  // sich ändert. alles andere was enabled sonst noch so macht
                  // soll weiterhin das "alte" enabled übernehmen
    }
    

    so bekomme ich ein enabled, was ein repaint auslöst und weiterhin das macht, was ein enabled halt so im hintergund macht
    und vor allem heißt es in meiner neuen komponente weiterin "enabled", dass wollte ich ja erreichen



  • Jester2000 schrieb:

    so bekomme ich ein enabled, was ein repaint auslöst und weiterhin das macht, was ein enabled halt so im hintergund macht
    und vor allem heißt es in meiner neuen komponente weiterin "enabled", dass wollte ich ja erreichen

    1. Was macht die Eigenschaft denn noch so alles???
    2. Na es haette ja auch noch Enabled heissen koennen, wenn du die Eingeschaft komplett neu deklarierst.. oder nicht??

    MfG Aoeke



  • Aus der Hilfe:

    Die Eigenschaft Enabled steuert, ob das Steuerelement auf Maus-, Tastatur- und Timer-Ereignisse reagiert.

    außerdem unterdrückt "enabled=false" semtliche ereignise die das objekt auslösen kann

    das hätte ich alles selber schreiben müssen, aber wozu das rad neu erfinden 😉


Anmelden zum Antworten