www.pudn.com > ecc-0.3.16-src.zip > eccPropertyHandler.h
/* ========================================================================== ecc - Erik's Code Collection Copyright (C) 2003-2005 - Erik Dienske This file is part of ecc. ecc is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. ecc is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ecc; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ===========================================================================*/ //--------------------------------------------------------------------------- #ifndef eccPropertyHandlerH #define eccPropertyHandlerH //--------------------------------------------------------------------------- #include#include /* typinfo.hpp can be found in $(BCB)\Include\Vcl. Also see in $(BCB)\Source\Vcl. */ //--------------------------------------------------------------------------- #ifdef _DEBUG #define PROPERTYHANDLER_SHOW_WARNINGS #endif #ifdef PROPERTYHANDLER_SHOW_WARNINGS #include // Necessary for ShowMessage(). #endif //--------------------------------------------------------------------------- //=========================================================================== namespace ecc { //=========================================================================== class TPropertyHandler { private: TComponent* FDefaultComponent; /* Default Component for easier function-calls. */ bool DefaultComponentExists(); /* Shows a message if FDefaultComponent is not initialized. Use this to debug your program. To turn the warning off #define PROPERTYHANDLER_SHOW_WARNINGS. */ String BuildNameValue(TComponent* comp, String prName); /* Returns string: "PropertyName=Value". !! Caution: Assumes all passed parameters are valid! This function only exists to present clear code in the other functions. */ String GetClassNamesValues(TComponent* comp, String prName); /* Returns "PropertyName.SubPropertyName=Value" strings for property prName of Component comp as a String. !! Caution: Assumes prName is an existing property that is a class! This function is used by other functions such as GetNameValue(). */ public: // == Functions for any Component == TPropertyHandler(); // Any component constructor. /* Constructor that does not set a default TComponent. */ int PropertyCount(TComponent* comp); /* Returns the number of properties of comp, including the events. */ bool PropertyExists(TComponent* comp, String prName); /* Checks if property prName exists for TComponent comp. */ bool IsClass(TComponent* comp, String prName); /* Returns true if prName is a class (like the property Font). */ String GetName(TComponent* comp); /* Returns value of Name property for any TComponent (comp) as String. */ Variant GetValue(TComponent* comp, String prName); /* Returns property value for any TComponent (comp) as Variant. If property does not exist the return value is NULL. If property is a class the return value is NULL. */ String GetNameValue(TComponent* comp, String prName); /* Returns "PropertyName=Value" for property prName of comp. If property does not exist the return value is "". If property is a class (ie. TFont) the return value is a string which contains the returnstring from GetClassNamesValues(). */ String GetNamesValues(TComponent* comp, String prNames); /* Returns "PropertyName.Property=Value" strings for all passed prNames (including subprops) of comp as a String. Note that multiple props should be seperated by ';' and are all in one string. The Name of the comp is not a part of the result. (ie. Not f_Main.Left=xx but Left=xx). -Example: { TPropertyHandler ph; Memo1->Lines->Text = ph.GetNamesValues(CheckBox1, "Name;Checked;Cursor" ); } */ String GetAllNamesValues(TComponent* comp); /* Returns "PropertyName.Property=Value" string for all properties (including subprops) of comp, this list is sorted. Events are not returned. */ void SetValue(TComponent* comp, String prName, Variant prValue); /* There seems to be a bug(?) in the SetPropValue function of TypInfo.pas when using the Delphi class Variant. -Example: { TPropertyHandler ph(CheckBox1); ph.SetValue("Checked", 1); // > Ok. ph.SetValue("Checked", "true"); // > Ok. ph.SetValue("Checked", true); // >> WRONG! } The last line does not work as expected because true is passed as value -1, instead of +1, and SetPropValue handles the negative value incorrect. */ void SetNameValue(TComponent* comp, String prName_Value); /* prName_Value is assumed to be formatted like: "propname.subprop=value" or "propname=value". Make sure this is correct, else this func will not work as expected. If prName_Value is a multi-line string, SetNamesValues() will be called. Returns false if an error occured. */ void SetNamesValues(TComponent* comp, String prNames_Values); /* prNames_Values is assumed to be a collection of lines seperated by '\n' (ie. Text property of TStringList). Every line should be formatted like: "propname.subprop=value" or "propname=value". It calls SetNameValue() for every line in prNames_Values. */ TComponent* GetSubComponent(TComponent* comp, String prName); /* Returns a TComponent* for a child component of comp with name prName. If there is no child-component return value is NULL. */ // === Functions using FDefaultComponent: === TPropertyHandler(TComponent* comp); // Default component constructor. /* Constructor that sets a default TComponent for easier function-calls. */ int PropertyCount(); /* Same as other PropertyCount() function, for use with the default component. */ bool PropertyExists(String prName); /* Same as other PropertyExists() function, for use with the default component. */ bool IsClass(String prName); /* Same as other IsClass() function, for use with the default component. */ String GetName(); /* Same as other GetName() function, for use with the default component. */ Variant GetValue(String prName); /* Same as other GetValue() function, for use with the default component. */ String GetNameValue(String prName); /* Same as other GetNameValue() function, for use with the default component. */ String GetNamesValues(String prNames); /* Same as other GetNamesValues() function, for use with the default component. */ String GetAllNamesValues(); /* Same as other GetAllNamesValues() function, for use with the default component. */ void SetValue(String prName, Variant prValue); void SetNameValue(String prName_Value); void SetNamesValues(String prNames_Values); TComponent* GetSubComponent(String prName); }; //=========================================================================== } // namespace ecc; //=========================================================================== #endif