:: MVP ::
|
|
:: RSS ::
|
|
|
Как сделать, чтобы Edit воспринимал одни цифры и DecimalSeparator?
// Chr(VK_BACK) нужен для того, чтобы работала
// клавиша Backspace. Уберите Chr(VK_BACK), и
// удалять символы можно будет только клавишей Delete.
// Способ первый
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (GetAsyncKeyState(VK_CONTROL) shr 16) and 1 <> 1 then
if not(Key in ['0'..'9', DecimalSeparator, Chr(VK_BACK)]) then
Key := #0;
end;
// Способ второй
type
TEdit = class(Vcl.StdCtrls.TEdit)
protected
procedure KeyPress(var Key: Char); override;
end;
implementation
procedure TEdit.KeyPress(var Key: Char);
begin
if (GetAsyncKeyState(VK_CONTROL) shr 16) and 1 <> 1 then
begin
if not (Key in ['0'..'9', FormatSettings.DecimalSeparator, Chr(VK_BACK)]) then
Key := #0;
end
else
inherited;
end;
|
Как заставить TEdit работать не только в режиме вставки символов, но и в режиме замены?
// Элемент управления Windows TEdit не имеет режима замены.
// Однако этот режим можно эмулировать установив свойство SelLength TEdit'а в 1
// при обработке события KeyPress. Это заставит его перезаписывать символ в
// текущей позиции курсора.
// Режим вставка/замена переключается клавишей "Insert".
// Если сделать это для TMemo, то клавиши
// Enter и Backspace будут работать некорректно.
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
InsertOn: boolean;
public
{ Public declarations }
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if ( ( Edit1.SelLength = 0 ) and ( not InsertOn ) ) then
Edit1.SelLength := 1;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ( key = VK_INSERT ) and ( Shift = [] ) then
InsertOn := not InsertOn;
end;
|
Как ограничить длинну текста, вводимого в TEdit, чтобы ширина текста не превышала ширину TEdit'а?
// Перхватываем событие KeyPress TEdit'а и измеряем ширину уже введенного текста
// и ширину нового символа. Если ширина больше чем клиентская область TEdit'а,
// новый символ отбрасывается.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
Rect : TRect;
bm : TBitmap;
begin
if ( ( Ord( Key ) <> VK_TAB ) and ( Ord( Key ) <> VK_RETURN ) and
( Ord( Key ) <> VK_LEFT ) and ( Ord( Key ) <> VK_BACK ) ) then
begin
Windows.GetClientRect( Edit1.Handle, Rect );
bm := TBitmap.Create;
bm.Width := Rect.Right;
bm.Height := Rect.Bottom;
bm.Canvas.Font := Edit1.Font;
if bm.Canvas.TextWidth( Edit1.Text + Key + ' ' ) > Rect.Right then
Key := #0;
bm.Free;
end;
end;
|
Как ввести текст в "чужой" Edit?
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage( EditHandle, WM_SETTEXT,
0, LParam( PChar( 'MyText' ) ) );
end;
|
Как в TEdit сделать выравнивание по правому краю?
type
TNumEdit = class(TEdit)
public
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TNumEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or ES_RIGHT;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
NumEdit: TNumEdit;
begin
NumEdit := TNumEdit.Create( Self );
NumEdit.Parent := Form1;
NumEdit.Show;
end;
|
Как перехватить клавишу табуляции (Tab) в TEdit?
type
TForm1 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
procedure CMDialogKey( Var Msg: TWMKey ); message CM_DIALOGKEY;
public
{ Public declarations }
end;
procedure TForm1.CMDialogKey(var Msg: TWMKey);
begin
if ( ActiveControl is TEdit ) and ( Msg.Charcode = VK_TAB ) then
ShowMessage( 'Нажата клавиша TAB' );
inherited;
end;
|
Как убрать звук при нажатии Enter в TEdit?
uses
{...,} ShellAPI;
// Выключить
SystemParametersInfo( SPI_SETBEEP, 0, nil, 0 );
// SystemParametersInfo( SPI_SETBEEP, 0, nil, SPIF_UPDATEINIFILE );
// Включить
SystemParametersInfo( SPI_SETBEEP, 1, nil, 0 );
// SystemParametersInfo( SPI_SETBEEP, 1, nil, SPIF_UPDATEINIFILE );
|
Как перевести в верхний регистр первый вводимый символ?
// Способ первый
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Edit1.SelStart = 0 then
Key := UpCase( Key );
end;
// Способ второй
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
with Sender as TEdit do
if ( SelStart = 0 ) or ( Text[SelStart] = ' ' ) or
( SelLength = Length( Text ) ) or ( Text = ' ' ) then
if Key in ['a'..'z'] then
Key := UpCase( Key );
end;
|
Как в TEdit преобразовать первую букву каждого слова к верхнему регистру?
procedure TForm1.Edit1Change(Sender: TObject);
var
OldChange: TNotifyEvent;
OldStart: integer;
begin
with ( Sender as TEdit ) do
begin
OldChange := OnChange;
OnChange := nil;
OldStart := SelStart;
if ( ( SelStart > 0 ) and ( Text[SelStart - 1] = ' ' ) ) or ( SelStart = 1 ) then
begin
SelStart := SelStart - 1;
SelLength := 1;
SelText := AnsiUpperCase( SelText );
end;
OnChange := OldChange;
SelStart := OldStart;
end;
end;
|
При использовании материала - ссылка на сайт обязательна
|
|