:: MVP ::
|
|
:: RSS ::
|
|
|
Как запретить вставку текста (Ctrl + V) в TEdit?
uses
{...,} ClipBrd;
function NewEditProc(MyWnd: HWND; uMsg: UINT; MyWParam: WPARAM; MyLParam: LPARAM): Integer; stdcall;
var
s: string;
i: Integer;
begin
if (uMsg = WM_PASTE) and Clipboard.HasFormat(CF_TEXT) then
begin
s := Clipboard.AsText;
if StrLen(PChar(s)) > 10 then // Запрет на вставку строк
uMsg := 0; // длиной более 10 символов
end;
Result := CallWindowProc(Pointer(GetWindowLong(MyWnd, GWL_USERDATA)),
MyWnd, uMsg, MyWParam, MyLParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_USERDATA,
SetWindowLong(Edit1.Handle, GWL_WNDPROC, LPARAM(@NewEditProc)));
end;
|
Как подавить реакцию TEdit на горячие клавиши (Ctrl + C, Ctrl + V, Ctrl + X, Ctrl + Z и т.п.)?
// Способ первый
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in [#3 {Ctrl + C}, #22 {Ctrl + V}, #24 {Ctrl + X}, #26 {Ctrl + Z}] then
Key := #0;
end;
// Способ второй
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
// Выполняя проверку Key in [^A..^Z] можно отловить нажатие
// буквенных клавиш совместно с модификатором Control
if Key in [^C {Ctrl + C}, ^V {Ctrl + V}, ^X {Ctrl + X}, ^Z {Ctrl + Z}] then
Key := #0;
end;
|
Как выделить определенную часть текста в TEdit при получении фокуса?
type
TEdit = class({Vcl.}StdCtrls.TEdit)
procedure EMSetSel(var Msg: TMessage); message EM_SETSEL;
end;
implementation
procedure TEdit.EMSetSel(var Msg: TMessage);
begin
// Начальная позиция выделения
// (в символах)
Msg.WParam := 2;
// Конечная позиция выделения
// (в символах)
Msg.LParam := 3;
inherited;
end;
|
При использовании материала - ссылка на сайт обязательна
|
|