Тема: Clipbrd Delphi 7
Показать сообщение отдельно
  #7  
Старый 02.04.2018, 21:44
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Vilor
...без углубленных знаний этот проект реализовать не получиться?...
Да какое там углублёнка, всё предельно просто, вот вариант под VCL, различает два сценария
Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Clipbrd;
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure WMChangeCBChain(var Msg: TWMChangeCBChain);
    message WM_CHANGECBCHAIN;
    procedure WMDrawClipboard(var Msg: TWMDrawClipboard);
    message WM_DRAWCLIPBOARD;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
PrevHwnd: Hwnd;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMChangeCBChain(var Msg: TWMChangeCBChain);
begin
 if PrevHWnd = Msg.Remove then PrevHWnd:= Msg.Next;
 if Msg.Remove <> Handle then
  SendMessage(PrevHWnd, WM_CHANGECBCHAIN, Msg.Remove, Msg.Next);
end;

procedure TForm1.WMDrawClipboard(var Msg: TWMDrawClipboard);
 function tk(ds: string): boolean;
  var
   i, b: integer;
  begin
   b:= 0;
   for i := 1 to length(ds) do if ds[i] in ['0'..'9'] then inc(b);
   Result:= (b = Length(ds));
  end;
var
 P: PChar;
 H: THandle;
 i, b: integer;
 s: string;
begin
 SendMessage(PrevHWnd, WM_DRAWCLIPBOARD, 0, 0);
if Clipboard.HasFormat(CF_TEXT) then
begin
   H := Clipboard.GetAsHandle(CF_TEXT);
   P := GlobalLock(H);
  // Memo1.SetTextBuf(P);
   memo1.Lines.Add(String(P));
   GlobalUnlock(H);

 for i := 0 to Memo1.Lines.Count-1 do
  begin
  s:= Memo1.Lines[i];
  if Length(s) <> 0 then
   begin
  if pos('.', s) > 0 then Memo1.Lines[i]:= '1 сценарий: адрес - ' + s;
  if tk(s) then Memo1.Lines[i]:= '2 сценарий: номер телефона - ' + s;
   end;
  end;

 Msg.Result:= 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 PrevHwnd:= SetClipboardViewer(Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 ChangeClipboardChain(Handle, PrevHwnd);
end;

end.
правда так и не понял, построчно данные в буфере лежат или все сразу?
Ответить с цитированием