Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  91

•  TDictionary Custom Sort  3 292

•  Fast Watermark Sources  3 043

•  3D Designer  4 797

•  Sik Screen Capture  3 293

•  Patch Maker  3 512

•  Айболит (remote control)  3 608

•  ListBox Drag & Drop  2 969

•  Доска для игры Реверси  81 409

•  Графические эффекты  3 897

•  Рисование по маске  3 207

•  Перетаскивание изображений  2 592

•  Canvas Drawing  2 711

•  Рисование Луны  2 540

•  Поворот изображения  2 145

•  Рисование стержней  2 149

•  Paint on Shape  1 556

•  Генератор кроссвордов  2 211

•  Головоломка Paletto  1 754

•  Теорема Монжа об окружностях  2 192

•  Пазл Numbrix  1 675

•  Заборы и коммивояжеры  2 045

•  Игра HIP  1 270

•  Игра Go (Го)  1 219

•  Симулятор лифта  1 462

•  Программа укладки плитки  1 204

•  Генератор лабиринта  1 534

•  Проверка числового ввода  1 339

•  HEX View  1 481

•  Физический маятник  1 347

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Предотвратить работу с командами буфера обмена в TEdit



Оформил: DeeCo

unit MyEdit;

 interface

 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
   Dialogs, stdctrls, clipbrd;

 type
   TPreventNotifyEvent = procedure(Sender: TObject; Text: string; var Accept: Boolean) of object;

 type
   TMyEdit = class(TCustomEdit)
   private
     FPreventCut: Boolean;
     FPreventCopy: Boolean;
     FPreventPaste: Boolean;
     FPreventClear: Boolean;

     FOnCut: TPreventNotifyEvent;
     FOnCopy: TPreventNotifyEvent;
     FOnPaste: TPreventNotifyEvent;
     FOnClear: TPreventNotifyEvent;

     procedure WMCut(var Message: TMessage); message WM_CUT;
     procedure WMCopy(var Message: TMessage); message WM_COPY;
     procedure WMPaste(var Message: TMessage); message WM_PASTE;
     procedure WMClear(var Message: TMessage); message WM_CLEAR;
   protected
     { Protected declarations }
   public
     { Public declarations }
   published
     property PreventCut: Boolean read FPreventCut write FPreventCut default False;
     property PreventCopy: Boolean read FPreventCopy write FPreventCopy default False;
     property PreventPaste: Boolean read FPreventPaste write FPreventPaste default False;
     property PreventClear: Boolean read FPreventClear write FPreventClear default False;
     property OnCut: TPreventNotifyEvent read FOnCut write FOnCut;
     property OnCopy: TPreventNotifyEvent read FOnCopy write FOnCopy;
     property OnPaste: TPreventNotifyEvent read FOnPaste write FOnPaste;
     property OnClear: TPreventNotifyEvent read FOnClear write FOnClear;
   end;

 procedure Register;

 implementation

 procedure TMyEdit.WMCut(var Message: TMessage);
 var
   Accept: Boolean;
   Handle: THandle;
   HandlePtr: Pointer;
   CText: string;
 begin
   if FPreventCut then
     Exit;
   if SelLength = 0 then
     Exit;
   CText := Copy(Text, SelStart + 1, SelLength);
   try
     OpenClipBoard(Self.Handle);
     Accept := True;
     if Assigned(FOnCut) then
       FOnCut(Self, CText, Accept);
     if not Accept then
       Exit;
     Handle := GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, Length(CText) + 1);
     if Handle = 0 then
       Exit;
     HandlePtr := GlobalLock(Handle);
     Move((PChar(CText))^, HandlePtr^, Length(CText));
     SetClipboardData(CF_TEXT, Handle);
     GlobalUnlock(Handle);
     CText := Text;
     Delete(CText, SelStart + 1, SelLength);
     Text := CText;
   finally
     CloseClipBoard;
   end;
 end;


 procedure TMyEdit.WMCopy(var Message: TMessage);
 var
   Accept: Boolean;
   Handle: THandle;
   HandlePtr: Pointer;
   CText: string;
 begin
   if FPreventCopy then
     Exit;
   if SelLength = 0 then
     Exit;
   CText := Copy(Text, SelStart + 1, SelLength);
   try
     OpenClipBoard(Self.Handle);
     Accept := True;
     if Assigned(FOnCopy) then
       FOnCopy(Self, CText, Accept);
     if not Accept then
       Exit;
     Handle := GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, Length(CText) + 1);
     if Handle = 0 then
       Exit;
     HandlePtr := GlobalLock(Handle);
     Move((PChar(CText))^, HandlePtr^, Length(CText));
     SetClipboardData(CF_TEXT, Handle);
     GlobalUnlock(Handle);
   finally
     CloseClipBoard;
   end;
 end;


 procedure TMyEdit.WMPaste(var Message: TMessage);
 var
   Accept: Boolean;
   Handle: THandle;
   CText: string;
   LText: string;
   AText: string;
 begin
   if FPreventPaste then
     Exit;
   if IsClipboardFormatAvailable(CF_TEXT) then
   begin
     try
       OpenClipBoard(Self.Handle);
       Handle := GetClipboardData(CF_TEXT);
       if Handle = 0 then
         Exit;
       CText := StrPas(GlobalLock(Handle));
       GlobalUnlock(Handle);
       Accept := True;
       if Assigned(FOnPaste) then
         FOnPaste(Self, CText, Accept);
       if not Accept then
         Exit;
       LText := '';
       if SelStart > 0 then
         LText := Copy(Text, 1, SelStart);
       LText := LText + CText;
       AText := '';
       if (SelStart + 1) < Length(Text) then
         AText := Copy(Text, SelStart + SelLength + 1, Length(Text) - SelStart + SelLength + 1);
       Text := LText + AText;
     finally
       CloseClipBoard;
     end;
   end;
 end;


 procedure TMyEdit.WMClear(var Message: TMessage);
 var
   Accept: Boolean;
   CText: string;
 begin
   if FPreventClear then
     Exit;
   if SelStart = 0 then
     Exit;
   CText  := Copy(Text, SelStart + 1, SelLength);
   Accept := True;
   if Assigned(FOnClear) then
     FOnClear(Self, CText, Accept);
   if not Accept then
     Exit;
   CText := Text;
   Delete(CText, SelStart + 1, SelLength);
   Text := CText;
 end;


 procedure Register;
 begin
   RegisterComponents('Samples', [TMyEdit]);
 end;

 end.




Похожие по теме исходники

Clipboard (буфер обмена)

Расширение компонента TEdit




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте