Code:

type

{©Drkb v.3(2007): www.drkb.ru}

TNumEdit = class(TEdit)

   procedure CreateParams(var Params: TCreateParams); override;

.......

procedure TNumEdit.CreateParams(var Params: TCreateParams);

begin

inherited CreateParams(Params);

Params.Style := Params.Style or ES_MULTILINE or ES_RIGHT;

end;

 

 

 

TEdit не поддерживает выравниваение текста по центру и по правой стороне - лучше использовать компонент TMemo. Вам понадобится запретить пользователю нажимать Enter, Ctrl-Enter и всевозможные комбинации клавиш со стрелками, чтобы избежать появления нескольких сторк в Memo. Этого можно добиться и просматривая содержимое текста в TMemo в поисках кода возврата каретки (13) и перевода строки(10) на событиях TMemo Change и KeyPress. Можно также заменять код возврата каретки на пробел - для того чтобы позволять вставку из буфера обмена многострочного текста в виде одной строки.

 

 

В форму добавляются TEditBox и TLabel, при этом TLabel постоянно показывает позицию курсора в элементе редактирования.

Code:

procedure TForm1.Edit1Change(Sender: TObject);

begin

CurPos := Edit1.SelStart;

Label1.Caption := IntToStr(CurPos);

end;

 

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

If Key = VK_LEFT then dec(CurPos);

if Key = VK_RIGHT then inc(CurPos);  

Label1.Caption:= IntToStr(CurPos);

end;

 

 

Code:

{

All you have to do is to verride the CreateParams of the class TEdit.

Install the following unit as a component.

}

 

unit AlignEdit;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls;

 

type

 

  TAlign = (eaLeft, eaCenter, eaRight);

 

  TAlignEdit = class(TEdit)

  private

    { Private-Deklarationen }

    FAlign: TAlign;

    procedure SetAlign(const Value: TAlign);

  protected

    { Protected-Deklarationen }

    procedure CreateParams(var Params: TCreateParams); override;

  public

    { Public-Deklarationen }

    constructor Create(AOwner: TComponent); override;

  published

    { Published-Deklarationen }

    property Alignment: TAlign read FAlign write SetAlign default eaLeft;

  end;

 

procedure Register;

 

implementation

 

constructor TAlignEdit.Create(Aowner: TComponent);

begin

  inherited Create(AOwner);

  FAlign := eaLeft;

end;

 

procedure TAlignEdit.SetAlign(const Value: TAlign);

begin

  if FAlign <> Value then

  begin

    FAlign := Value;

    RecreateWnd;

  end;

end;

 

procedure TAlignEdit.CreateParams(var Params: TCreateParams);

begin

  inherited;

  case FAlign of

    eaLeft: Params.Style   := Params.Style or ES_LEFT;

    eaCenter: Params.Style := Params.Style or ES_CENTER;

    eaRight: Params.Style  := Params.Style or ES_RIGHT;

  end;

end;

 

procedure Register;

begin

  RegisterComponents('SwissDelphiCenter', [TAlignEdit]);

end;

 

end.

 

 

Как-то раз встала такая проблема: если пользователь какое-то время ничего не вводит в элемент управления Edit, то предупредить его об этом.

 

Блокировка вставки нецифровых данных через буфер обмена

Code:

uses Clipbrd;

 

function NewEditProc(wnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM):integer; stdcall;

var

s:string;

i:integer;

begin

if (uMsg=WM_PASTE) and Clipboard.HasFormat(CF_TEXT) then

begin

s := Clipboard.AsText;

for i:=1 to Length(s) do if (not (s[i] in ['0'..'9'])) then begin uMsg:=0; break end

end;

result:=CallWindowProc(Pointer(GetWindowLong(wnd,GWL_USERDATA)),wnd,uMsg,wParam,lParam)

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

SetWindowLong(Edit1.Handle,GWL_STYLE,GetWindowLong(Edit1.Handle,GWL_STYLE) or ES_NUMBER);

SetWindowLong(Edit1.Handle,GWL_USERDATA,SetWindowLong(Edit1.Handle, GWL_WNDPROC, LPARAM(@NewEditProc)))

end;

 
Автор: Krid

Взято из http://forum.sources.ru

 

 

Следующий компонент автоматически подстраивается под текст, вводимый в него:

 

 

...маленький компонент THintEdit, порожденный от TCustomEdit, который представляет собой с виду обычный TEdit элемент с возможностью автоматического выбора стринговых значений из скрытого списка (так, как это реализовано в Netscape Navigator'е). Описание особенно не нужно, так как выполнено все достаточно элементарно: значения для выбора заносятся в свойство HintList, тип свойства TStrings. При нажатии клавиш вверх/вниз выбираются значения, соответствующие набранным начальным символам.

 

 

  

Code:

procedure ClearEdits;

var i : Integer;

begin

for i := 0 to ComponentCount-1 do

if (Components[i] is TEdit) then

   (Components[i] as TEdit).Text := '';

end;

 

 

Перехватите событие KeyPress и установите key = #0 для недопустимых клавиш.

Code:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if ((UpCase(Key) < 'A') or (UpCase(Key) > 'Z')) then Key := #0;

end;

 

 Это можно давольно легко сделать переопределив на форме процедуру CMDialogKey. Чтобы посмотреть как это работает, поместите на форму Edit и введите следующий код: