How do I get current field name ?

I have created a form with a number of fields on it, and want to know how do I get the name of the current field being edited, or focused, without writing code for every field component on the form ?

I can do this in a DBGrid easy enough, but am unable to apply the same code to the form.
pjeliasAsked:
Who is Participating?
 
JimboKern69Connect With a Mentor Commented:
This seemed to do the trick...

First some details:

I created a main form, then two sub-frames that I placed on the main form.

The Main Form also has a label who's caption will be the currently focused control.

What I did was create another Interface (TFieldFrame) which each sub-form will implement.  This interface has a single method - GetFieldName(fld:Integer):String;

The main form can then hook in to the active frame and using a generic onEnter and onExit methods, which control is active and get the names.

Instead of posting all the code, which is extensive, I'll send you to a web-site to get the sample D5 project I created.

http://kernsoft.freeservers.com/FieldNames.html

Hope this helps.

Jim Kern
0
 
rwilson032697Commented:
Use TForm.ActiveControl like this:

TheActiveControlName := ActiveControl.Name;

Cheers,

Raymond.
0
 
pjeliasAuthor Commented:
Have already tried that. The Problem is I am using a FRAME (Delphi 5) that appears on a Form. When I attach the code to the Frame, nothing happens. When I attach code to the Main Form containing the Frame, all other objects names are accessible but not the frame or object within the Frame ?

The Use of Frames has solved alot of problems, but has caused a number of others.

I was thinking of code more related to the Table or Data Components, which can detect field movements/changes etc.

Thanks for your response anyway.
0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

 
pjeliasAuthor Commented:
Adjusted points from 50 to 100
0
 
jeurkCommented:
Hello,
are you talking about knowing wich of your
ttable field is beeing edited ?
Is suggest you use the ondatachange event
of you datasource :
extracted from the help file ...

Occurs when the current record has been edited and the application moves from one field or record to another in a dataset associated with the data source component.

type TDataChangeEvent = procedure(Sender: TObject; Field: TField) of object;
property OnDataChange: TDataChangeEvent;

Description

Write an OnDataChange event handler to take specific actions when a field in the current record has been edited and an application moves from one field or record to another in a dataset associated with a data source component. For example, methods that can trigger this event include the Next or Prior methods for the dataset.

Data-aware controls notify a data source of a data change because of:

Scrolling to a new record.
      Modifications to a field’s data.

The Field parameter is nil if more than one of the fields changed simultaneously, such as when moving from one record to another. Otherwise, Field indicates the edited field.

OnDataChange is especially useful in applications that must synchronize data display in controls that are not data aware.
what do you think of that ?
0
 
JimboKern69Commented:
BTW...I didn't mean to make it look like there is a lot of code to get this done...there is for the initial setup, but then, to add additional frames and/or controls, there is not much to do at all...really.

Anyway...hope it helps.

Jim Kern
0
 
pjeliasAuthor Commented:
This appears to work well and will be of benefit in future apps, but, I have tried the code in the problem app and have found another hurdle.

I am using a Third Party Component from Infopower 2000 - A RecordView Panel - which after setting a number of options, creates a nicely formatted ViewPanel with Fields and Labels displayed.

Unfortunately, there is no way to attach code to each Edit Box/Component to return the TAG Value, as these components do not exist within the panel.

********************************************************
Have just found a workaround for the problem in preceding paragraph, by creating Infopower Edit/Comboboxes, and then assigning these to each field via Custom Edit option in the Control Type Dialog.
********************************************************

Will give you the points anyway, as the sample app you supplied looks very useful for future apps.

Thanks

0
 
JimboKern69Commented:
You are welcome...thanks for the grade as well.

Actually, this will also come in handy for myself in future apps, so I will certainly be keeping this code around for some time now.

Note: In about a month I will probably take the code off that web-site, so if the above link is no longer active, feel free to e-mail kernsoft@juno.com for the code or any other questions you may have about it.

Thanks

Jim Kern
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.