Thank you alot for those information.
I was pretty sure that it is imposible to get the name of a variable at the
runtime but I just
wanted to be sure.
For properties I had a simple component that used the 'is' operator (instead of
RTTI) to save the
values to the HDD. It worked very well with Borland's 'standard' components:
TLabel, TMemo,
TButton, etc.
But when it encountered an unknown component like TSomeComponent it skipped
over that component
without saving.
Other components had also their own problems. I will look for more
documentation adout RTTI to
build my own.
Generally, every time I used an external component I find out that sooner or
later I will replace
that component with my own. The best idea from now on will be to build from the
start my own
component instead of using 3rd party.
--- Cosmin Prund <[EMAIL PROTECTED]> wrote:
> Hello Human.
>
> What you want can easily be done using Delphi's RTTI. Just google for
> RTTI and you'll find some documentation plus some samples. You'll also
> find components that do what you want but if you like rolling your own
> (or need the extra flexibility afforded by rolling your own) go ahead,
> is not nearly as difficult as it sounds. RTTI provides the means to get
> a list of property names given a object class or an object instance and
> it provides the means to get the value of a property given a object
> instance and a property name.
>
> It can't be done the way you suggested because of the way parameter
> passing occurs. When you call a function taking one integer using
> Delphi's default calling convention, the integer parameter will be set
> as one of the registers (EAX?) and then control goes to the procedure.
> From within the procedure you can't tell if the parameter comes from a
> variable, is the result of some computation or is in fact a constant!
>
> Top, Left, FontSize are NOT variables, they are properties. There's a
> huge difference between the two: When you try to get the value of a
> property the compiler will call it's GetXXX function transparently. When
> you try setting it's value the compiler will actually call it SetXXX
> method. The good news is properties get RTTI, variables do not.
>
> Human wrote:
> > I want to know if it is possible to get the name of a variable as
> > text/string (I know this
> might
> > be impossible).
> >
> > For example I need a function that will accept as input a variable and will
> > return a string
> that
> > is the name of that variable. If my variable is FontSize the function will
> > return 'FontSize'.
> >
> >
> > More examples:
> > If my function will be this:
> > function ConvertToString(AVariable: integer): string;
> > then running this program:
> >
> > ---------------------------
> > var FontSize: integer;
> > s: string;
> > begin
> > s:= ConvertToString(FontSize);
> > end;
> > ---------------------------
> >
> > s will be 'FontSize'.
> >
> >
> > I want to use this to store my program's forms state on the HDD in a INI
> > file then restore it
> when
> > the program starts again.
> > I already do this by using something like this:
> >
> > MyIniFile:= TCIniFile.Create(GetApplicationDir+'settings.ini');
> > With MyIniFile DO
> > With MainForm DO
> > begin
> > Left := ReadInteger('WindowState', 'left', 50);
> > top := ReadInteger('WindowState', 'top' , 50);
> > Width := ReadInteger('WindowState', 'width' , 750);
> > Height := ReadInteger('WindowState', 'height', 550);
> > checkboxes, etc...
> > end;
> >
> > but I would like to simplify it to something like
> >
> > SaveToIni(Left);
> > SaveToIni(Top);
> > etc...
> >
> >
> >
> > -----------------------------------------------
> > -----------------------------------------------
> > -----------------------------------------------
> >
> >
> > I realized that in a big program with lots of windows and buttons I can
> > spend lots of time
> coding
> > the store/restore functions.
> > It is also very error prone.
> >
> > There is a VERY good VCL that can store automatically this information for
> > me?
> > I tried several VCLs but all had some problems/limitations.
> >
> >
> >
> >
> >
> > If I choose Christianity then the Islamic will say I'm a pagan.
> > If I choose Islamic then the Buddhism will say I'm a pagan.
> > If I chose Buddhism then the Jewish will say I'm pagan.
> > If I choose no God then everybody will say I'm pagan.
> > Please, can I be free? Can you NOT tell me how I should live MY life?
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Tired of spam? Yahoo! Mail has the best spam protection around
> > http://mail.yahoo.com
> > __________________________________________________
> > Delphi-Talk mailing list -> [email protected]
> > http://www.elists.org/mailman/listinfo/delphi-talk
> >
> >
>
> __________________________________________________
> Delphi-Talk mailing list -> [email protected]
> http://www.elists.org/mailman/listinfo/delphi-talk
>
If I choose Christianity then the Islamic will say I'm a pagan.
If I choose Islamic then the Buddhism will say I'm a pagan.
If I chose Buddhism then the Jewish will say I'm pagan.
If I choose no God then everybody will say I'm pagan.
Please, can I be free? Can you NOT tell me how I should live MY life?
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
__________________________________________________
Delphi-Talk mailing list -> [email protected]
http://www.elists.org/mailman/listinfo/delphi-talk