Re: using the value of a string as a reference to a component


[ Related Articles and Replies ] [ Delphi Forum ] [ Delphi Tutorials -- by DelphiLand ]

Posted by p12334 Alex diNorcia on June 25, 2003
In Reply to: Re: using the value of a string as a reference to a component posted by webmaster Guido on June 20, 2003

Thank you very much!

--------------------

: You can not *directly* reference a Delphi component from a string, but there is a way around, although with some limitations.

: Given the component's name, you can search through all the components of a form, and if a component with that name is found, put a reference to that component in a temporary variable, say TempComp. If TempComp is of the desired TYPE, you can change properties of TempComp. So, you have to decide if you're going to modify a TLabel with a certain name, or a TEdit, or another type of component.

: An example: a form contains several TLabel components, named Label1, Label2, and so on... We want a procedure to change the caption of a certain label by specifying the label's name, like this:

: ChangeLabelCap('Label2', 'Caption of Label2');

: This procedure will do the job, and additionally give a warning if the label is not found:

: procedure TForm1.ChangeLabelCap(CompName, CompCaption: string);
: var
: Found: Boolean;
: i: integer;
: TempComp: TComponent;
: begin
: Found := False;
: for i := 0 to ComponentCount - 1 do begin
: if LowerCase(Components[i].Name) = LowerCase(CompName) then begin
: TempComp := Components[i];
: Found := TempComp is TLabel;
: end;
: if Found then break;
: end;
: if Found then
: // TYPECAST TempComp as a TLabel before using it
: (TempComp as TLabel).Caption := CompCaption
: else
: ShowMessage('No label found with the name ' + CompName);
: end;

: With this code as a basis, you can easily write other procedures, like for example: change the color of a named TPanel.
:
: You could also expand the procedure above for *several* types of components, and change a string-property if a suitable component with the given name is found. Some ideas: change the caption of a label, OR the caption of a button, OR the text of an edit, and more...
: Here's an example:
:
: procedure TForm1.ChangeCompString(CompName, S: string);
: var
: Found: Boolean;
: i: integer;
: TempComp: TComponent;
: begin
: Found := False;
: for i := 0 to ComponentCount - 1 do begin
: if LowerCase(Components[i].Name) = LowerCase(CompName) then begin
: TempComp := Components[i];
: Found := (TempComp is TLabel)
: or (TempComp is TButton) or (TempComp is TEdit);
: end;
: if Found then break;
: end;
: if not Found then
: ShowMessage('Not found of correct type: ' + CompName)
: else if TempComp is TLabel then
: (TempComp as TLabel).Caption := S
: else if TempComp is TButton then
: (TempComp as TButton).Caption := S
: else if TempComp is TEdit then
: (TempComp as TEdit).Text := S;
: end;


Related Articles and Replies:


[ Related Articles and Replies ] [ Delphi Forum ]
[ DelphiLand: free Delphi source code, tips, tutorials ]