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 ]
|
|