Q&A

  • clipboard 사용법 좀....
델파이 초보입니다.

클립보드를 이용해서 텍스트나 그림을 복사하고 붙이는 법 좀 알려주세요.

1  COMMENTS
  • Profile
    임형호 2000.01.10 18:50
    델초 wrote:

    > 델파이 초보입니다.

    > 클립보드를 이용해서 텍스트나 그림을 복사하고 붙이는 법 좀 알려주세요.





    제가 쓴건 아니고요. 참고로 가지고 있던 내용이거든요. 김영대님이 쓰셨다고 되어있군요.

    저도 전에 참고를 했었던걸로 기억합니다. 도움이 되셨으면 좋겠습니다.

    (음... 저작권침해로 혼나는건 아닐지?????

    )

    //=============================================================================

    안녕하세요 김영대입니다.

    클립보드에 자료를 복사하는 방법은 두가지 정도가 있습니다

    위의 문제를 해결하는 방법을 몇자 적어보았습니다.

    좋은 결과 있기를 바랍니다



    첫번째 방법,



    화면에 Edit 콤포넌트를 하나 놓고 실행시 보이지 않도록 Visible을 False로

    만드신후 필드의 값을 Edit에 넣으신 후 Edit의 CopyToClipboard 메소드를

    사용하시면 됩니다

    Edit1.Text := Query1.FieldByName('KORNAME').AsString;

    Edit1.CopyToClipboard;





    두번째 방법,

    아래 소스에서 보시면 클립보드로 문자열을 복사하는 프로시져를 API로 작성

    하여 사용해 보았습니다



    unit Unit1;



    interface



    uses

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

    StdCtrls, Clipbrd, Db, DBTables;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    Query1: TQuery;

    DataSource1: TDataSource;

    DBGrid1: TDBGrid;

    procedure Button1Click(Sender: TObject);

    procedure FormActivate(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    procedure SetClipData(Wdata: String);

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure TForm1.FormActivate(Sender: TObject);

    begin

    Query1.Open;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    {Query1의 "KORNAME" 필드의 값을 클립보드에 복사}

    SetClipData(Query1.FieldByName('KORNAME'.AsString);

    end;



    // 파라미터 Wdata의 문자열을 클립보드로 복사하는 프로시저

    procedure TForm1.SetClipData(Wdata: String);

    var

    P: PChar;

    hMem: THandle;

    begin

    {클립보드를 열어 응용 프로그램이 내용을 읽거나 세트할 수 있게 한다}

    OpenClipboard(handle);

    {클립보드를 비우고 그것에 관계하는 데이타를 자유롭게 한다}

    EmptyClipboard();

    {전역 힙(heap)에 메모리 블록을 할당한다}

    hMem := GlobalAlloc(GMEM_MOVEABLE, 255);

    {전역 힙의 할당된 메모리 블록을 고정(lock)시킨다}

    P := GlobalLock(hMem);

    {힙에 문자열을 복사}

    StrPCopy(P, Wdata);

    {전역 메모리 핸들을 클립보드에 전달, 메모리 블록은 클립보드 데이타가 된다}

    SetClipboardData(CF_TEXT, hMem);

    {전역 힙에서 메모리 블록의 잠금 해제}

    GlobalUnlock(hMem);

    {클립보드를 닫는다}

    CloseClipboard();

    end;



    end.