Difference between revisions of "TEdit"

From Lazarus wiki
Jump to navigationJump to search
(Mention TextHint)
 
(6 intermediate revisions by 3 users not shown)
Line 4: Line 4:
  
 
==Usage==
 
==Usage==
You can add to your [[TForm|form]] a TEdit input box add by clicking on it at the Standard component palette and place it on your form with one click. You can now edit this single-line text box at run time.
 
  
Want you this text elsewhere have, you can read this text, like every other [[String]].
+
You can add a TEdit text input field to your [[TForm|form]] by clicking on it in the Standard tab of the component palette and place it on your form with one click. You can now edit this single-line text field at run time.
  
For example, you have a TEdit ''Edit1'' on your form placed, you can use '''<code>myString: = Edit1.Text;</code>'''. To change the shown Text in ''Edit1'', you can use '''<code>Edit1.Text := myString;</code>'''.  
+
If you want to use this text elsewhere, you can use it like every other [[String]].
 +
 
 +
For example, if you have a TEdit ''Edit1'' on your form, you can use <code>myString := Edit1.Text;</code>. To change the shown text in ''Edit1'', you can use <code>Edit1.Text := myString;</code>.  
  
 
If you want to display another text instead of the default text (e.g. ''Edit1'') in a TEdit ''Edit1'' at the start of your application, you can proceed as follows:
 
If you want to display another text instead of the default text (e.g. ''Edit1'') in a TEdit ''Edit1'' at the start of your application, you can proceed as follows:
 +
 
* Select the TEdit on your form with one click.
 
* Select the TEdit on your form with one click.
 
* Go to the properties tab in the Object Inspector.
 
* Go to the properties tab in the Object Inspector.
* Select the property '''Text''' and change it in the next input box.
+
* Select the property '''Text''' and change it in the neighbouring input field.
 
* In the same way, you can select the property '''Name''' and give the TEdit a better name.
 
* In the same way, you can select the property '''Name''' and give the TEdit a better name.
  
 
===Password input===
 
===Password input===
You can also easily use a TEdit to enter passwords. It is then instead of actually entered [[Char]] a PasswordChar displayed.
+
 
 +
You can also easily use a TEdit to enter passwords. Then instead of the actually entered [[Char]] a PasswordChar is displayed.
  
 
Little Example:
 
Little Example:
 +
 
* Create a new GUI application with a TEdit ''Edit1'' and a TButton ''Button1'' on the form.
 
* Create a new GUI application with a TEdit ''Edit1'' and a TButton ''Button1'' on the form.
* In the Object Inspector set the property PasswordChar of ''Edit1'' to a " * ".
+
* In the Object Inspector set the property PasswordChar of ''Edit1'' to am asterisk ( * ).
* In the event handler of ''OnClick'' of ''Button1'' show the entered password: '''<code>ShowMessage(Edit1.Text);</code>'''
+
* In the event handler of ''OnClick'' of ''Button1'' show the entered password: <code>ShowMessage(Edit1.Text);</code>.
 +
 
 +
===TextHint===
 +
 
 +
Have you used a GUI that has, for example, a Search Box where you can type in a search term. And when unused, that Search Box displays something like "Search Here" so you know what it is for ? Well, TEdit has a property called TextHint for that purpose. Set TextHint to some appropriate text and if the normal 'Text' is empty and the Control is not in use, your Search Here message is displayed. On most Widget Sets, the TextHint is automatically cleared once the user starts typing in there. The exception is GTK2/3, they like to clear things as soon as the Control gets focus.
 +
 
 +
The text from TextHint is displays a little greyer than normal text so the user is aware it is somehow special. Most people find this interface quite intuitive.
  
 
==Requested Features==
 
==Requested Features==
 +
 
===Embedding Button/Other Controls in TEdit===
 
===Embedding Button/Other Controls in TEdit===
It's a WinAPI feature to allow embedding any sorts of controls into TEdit.
+
 
 +
It's a WinAPI feature to allow embedding any sort of control into a TEdit.
  
 
Considerations.
 
Considerations.
  
* The feature is not supported by all Widgetsets natively.  For example: for Gtk2/Gtk3 it's not possible, as GtkEntry is not derived from a container. SpinEdit control is a special kind of control in Gtk2. (This the main reason on why [[TSpinEdit]] has it's own WS class).
+
* The feature is not supported by all Widgetsets natively.  For example: for Gtk2/Gtk3 it's not possible, as GtkEntry is not derived from a container. The SpinEdit control is a special kind of control in Gtk2. (This is the main reason on why [[TSpinEdit]] has its own WS class).
 +
 
 +
* The placement of an embedded control (or controls) cannot be set by Left or Top properties (as normally happens). Instead the "Align" property should be used.
  
* The placement of an embedded control (or controls) cannot be set by Left or Top properties (as it's normally happening). Instead "Align" property should be used.
+
<syntaxhighlight lang="delphi">
<source lang="delphi">
+
button1.Parent:=edit1;
  button1.Parent:=edit1;
+
button1.Width:=20;
  button1.Width:=20;
+
button1.Align:=alRight;
  button1.Align:=alRight;
+
button1.Constraints.MaxHeight:=18; //edit1.Height;
  button1.Constraints.MaxHeight:=18; //edit1.Height;
+
</syntaxhighlight>
</source>
 
  
 
* The "text" entry field must be limited by some TEdit property
 
* The "text" entry field must be limited by some TEdit property
 
:OR this should be done automatically by the widgetset.
 
:OR this should be done automatically by the widgetset.
  
With out such limitation the entered text doesn't go "below" the embedded button.
+
Without such a limitation, the entered text goes "underneath" the embedded button.
  
 
[[Image:edit1.gif]]
 
[[Image:edit1.gif]]
  
If using pure WinAPI, this can be achieved by using EM_SETMARGINS message:
+
If using pure WinAPI, this can be achieved by using an EM_SETMARGINS message:
<source lang="delphi">
+
 
uses
+
<syntaxhighlight lang="delphi">
 +
Uses
 
   Windows, ...
 
   Windows, ...
  
 
...
 
...
 +
 
   SendMessage(Edit1.Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, MakeLParam(0, button1.Width))
 
   SendMessage(Edit1.Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, MakeLParam(0, button1.Width))
</source>
+
</syntaxhighlight>
  
 
[[Image:edit2.gif]]
 
[[Image:edit2.gif]]
 +
 +
The Delphi VCL does provide a Margins property, but it is not mapped to EM_SETMARGINS and has a different meaning in the VCL.
  
 
==See also==
 
==See also==

Latest revision as of 12:22, 6 December 2022

Deutsch (de) English (en) suomi (fi) français (fr) 日本語 (ja) русский (ru)

A TEdit tedit.png is a control with a single line of editable text. It is available from the Standard tab of the Component Palette.

Usage

You can add a TEdit text input field to your form by clicking on it in the Standard tab of the component palette and place it on your form with one click. You can now edit this single-line text field at run time.

If you want to use this text elsewhere, you can use it like every other String.

For example, if you have a TEdit Edit1 on your form, you can use myString := Edit1.Text;. To change the shown text in Edit1, you can use Edit1.Text := myString;.

If you want to display another text instead of the default text (e.g. Edit1) in a TEdit Edit1 at the start of your application, you can proceed as follows:

  • Select the TEdit on your form with one click.
  • Go to the properties tab in the Object Inspector.
  • Select the property Text and change it in the neighbouring input field.
  • In the same way, you can select the property Name and give the TEdit a better name.

Password input

You can also easily use a TEdit to enter passwords. Then instead of the actually entered Char a PasswordChar is displayed.

Little Example:

  • Create a new GUI application with a TEdit Edit1 and a TButton Button1 on the form.
  • In the Object Inspector set the property PasswordChar of Edit1 to am asterisk ( * ).
  • In the event handler of OnClick of Button1 show the entered password: ShowMessage(Edit1.Text);.

TextHint

Have you used a GUI that has, for example, a Search Box where you can type in a search term. And when unused, that Search Box displays something like "Search Here" so you know what it is for ? Well, TEdit has a property called TextHint for that purpose. Set TextHint to some appropriate text and if the normal 'Text' is empty and the Control is not in use, your Search Here message is displayed. On most Widget Sets, the TextHint is automatically cleared once the user starts typing in there. The exception is GTK2/3, they like to clear things as soon as the Control gets focus.

The text from TextHint is displays a little greyer than normal text so the user is aware it is somehow special. Most people find this interface quite intuitive.

Requested Features

Embedding Button/Other Controls in TEdit

It's a WinAPI feature to allow embedding any sort of control into a TEdit.

Considerations.

  • The feature is not supported by all Widgetsets natively. For example: for Gtk2/Gtk3 it's not possible, as GtkEntry is not derived from a container. The SpinEdit control is a special kind of control in Gtk2. (This is the main reason on why TSpinEdit has its own WS class).
  • The placement of an embedded control (or controls) cannot be set by Left or Top properties (as normally happens). Instead the "Align" property should be used.
button1.Parent:=edit1;
button1.Width:=20;
button1.Align:=alRight;
button1.Constraints.MaxHeight:=18; //edit1.Height;
  • The "text" entry field must be limited by some TEdit property
OR this should be done automatically by the widgetset.

Without such a limitation, the entered text goes "underneath" the embedded button.

edit1.gif

If using pure WinAPI, this can be achieved by using an EM_SETMARGINS message:

Uses
  Windows, ...

...

  SendMessage(Edit1.Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, MakeLParam(0, button1.Width))

edit2.gif

The Delphi VCL does provide a Margins property, but it is not mapped to EM_SETMARGINS and has a different meaning in the VCL.

See also


LCL Components
Component Tab Components
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedButton • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TControlBar • TFlowPanel • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TCoolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier • TDateTimePicker
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TTaskDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid • TDBDateTimePicker
Data Access TDataSource • TCSVDataSet • TSdfDataSet • TBufDataset • TFixedFormatDataSet • TDbf • TMemDataset
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TSimpleIPCServer • TXMLConfig • TEventLog • TServiceManager • TCHMHelpDatabase • TLHelpConnector
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TTimeEdit • TCalcEdit • TFileListBox • TFilterComboBox • TComboBoxEx • TCheckComboBox • TButtonPanel • TShellTreeView • TShellListView • TXMLPropStorage • TINIPropStorage • TJSONPropStorage • TIDEDialogLayoutStorage • TMRUManager • TStrHolder
LazControls TCheckBoxThemed • TDividerBevel • TExtendedNotebook • TListFilterEdit • TListViewFilterEdit • TLvlGraphControl • TShortPathEdit • TSpinEditEx • TFloatSpinEditEx • TTreeFilterEdit • TExtendedTabControl •
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection • TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TMySQL57Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader
Pascal Script TPSScript • TPSScriptDebugger • TPSDllPlugin • TPSImport_Classes • TPSImport_DateUtils • TPSImport_ComObj • TPSImport_DB • TPSImport_Forms • TPSImport_Controls • TPSImport_StdCtrls • TPSCustomPlugin
SynEdit TSynEdit • TSynCompletion • TSynAutoComplete • TSynMacroRecorder • TSynExporterHTML • TSynPluginSyncroEdit • TSynPasSyn • TSynFreePascalSyn • TSynCppSyn • TSynJavaSyn • TSynPerlSyn • TSynHTMLSyn • TSynXMLSyn • TSynLFMSyn • TSynDiffSyn • TSynUNIXShellScriptSyn • TSynCssSyn • TSynPHPSyn • TSynTeXSyn • TSynSQLSyn • TSynPythonSyn • TSynVBSyn • TSynAnySyn • TSynMultiSyn • TSynBatSyn • TSynIniSyn • TSynPoSyn
Chart TChart • TListChartSource • TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
IPro TIpFileDataProvider • TIpHtmlDataProvider • TIpHttpDataProvider • TIpHtmlPanel
Virtual Controls TVirtualDrawTree • TVirtualStringTree • TVTHeaderPopupMenu