Буфер обмена

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Буфер обмена

Сообщение bokul » 16.09.2006 04:38:41

Возможно ли средсвами freepascal'я скинуть текстовые данные, строку например, в Буфер обмена - ClipBoard.
bokul
новенький
 
Сообщения: 45
Зарегистрирован: 16.09.2006 04:33:58

Сообщение serg_iv » 16.09.2006 08:52:40

Легко.
Нужно обязательно подключить в uses модуль clipbrd;

а пример вот
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
   s:string;
begin
   s:='привет, выпить нет?';
   clipboard.SetTextBuf(PChar(s));
end;


Строку к типу PChar приводить обязательно!
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение bokul » 16.09.2006 19:14:18

Легко, но у меня этого юнита нету... да й решения я уже нашел ( на дугом форуме подсказали). Не столь лаконичное, но работает без дополнительных юнитов - через WinAPi.

P.S извините что задал вопрос сразу на двух форумах. Просто я уже думал, что там мне ответа не дадут и решил попробывать более специализированный форум.
bokul
новенький
 
Сообщения: 45
Зарегистрирован: 16.09.2006 04:33:58

Сообщение ev » 16.09.2006 21:08:32

написал бы решение тут ;)
вдруг еще кому понадобится...
ev
долгожитель
 
Сообщения: 1764
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение bokul » 16.09.2006 23:50:07

А ссылку можна дать?
bokul
новенький
 
Сообщения: 45
Зарегистрирован: 16.09.2006 04:33:58

Сообщение ev » 17.09.2006 00:15:12

лечше написать
может тот форум линк сменит или еще что (вон у нас например форум поменялся и все линки сменились)
ev
долгожитель
 
Сообщения: 1764
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение bokul » 17.09.2006 02:11:31

Код: Выделить всё
uses windows, sysutils;

const
  size = 80 * 50;
var
  chiBuffer: string;
  hStdOut: THandle;

  rd: LongWord;
  buf: array[0 .. pred(size)] of char;


function GetConsoleWindow: THandle;
var
  S: AnsiString;
  C: Char;
begin
  Result := 0;
  Setlength(S, MAX_PATH + 1);
  if GetConsoleTitle(PChar(S), MAX_PATH) <> 0 then
  begin
    C := S[1];
    S[1] := '$';
    SetConsoleTitle(PChar(S));
    Result := FindWindow(nil, PChar(S));
    S[1] := C;
    SetConsoleTitle(PChar(S));
  end;
end;


procedure grabber();
var
  Data: THandle;
  DataPtr: Pointer;
  len: integer;

  crd: TCoord;
  i: integer;

begin
  crd.X := 0;
  crd.Y := 0;

  hStdout := GetStdHandle(STD_OUTPUT_HANDLE);
  ReadConsoleOutputCharacter(hStdout, buf, size, crd, rd);

  chiBuffer := '';
  for i := 0 to pred(rd) do begin

    chiBuffer := chiBuffer + buf[i];
    if succ(i) mod 80 = 0 then chiBuffer := chiBuffer + #13#10;

  end;

  if OpenClipboard(GetConsoleWindow) then
    try
      { opening clipboard succeeded... }
      len := Length(chiBuffer) + 1;
      Data := GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, len);
      try

        DataPtr := GlobalLock(Data);
        try
          Move(pchar(chiBuffer)^, DataPtr^, len);
          EmptyClipboard;
          SetClipboardData(CF_TEXT, Data);
        finally
          GlobalUnlock(Data);
        end;

      except
        GlobalFree(Data);
      end;

    finally
      CloseClipboard;
    end;

end;



var
  i: integer;

begin

  for i := 1 to 10 do
    writeln('Wow !!! Wow !!! Wow !!! ', i);

  grabber();

end.

Автор volvo.
Кому интересно все-таки посмотреть тему, заходим http://forum.pascal.net.ru/index.php?showtopic=12777&st=0
bokul
новенький
 
Сообщения: 45
Зарегистрирован: 16.09.2006 04:33:58

Картинку в Буфер

Сообщение EmeraldMan » 20.10.2008 18:30:51

Текст в буфер обмена легко (выше уже написали как), а вот картинку проблематично.
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Буфер обмена

Сообщение Andreich » 21.10.2008 10:54:30

EmeraldMan писал(а):Текст в буфер обмена легко (выше уже написали как), а вот картинку проблематично.


uses ..., ClipBrd;

...

Clipboard.Assign(Image1.Picture);
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Буфер обмена

Сообщение Attid » 21.10.2008 12:20:14

никрофилы :evil:
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение ADR » 23.03.2011 18:52:37

"TextIntoVoice.lpr(9,15) Fatal: Can't find unit Clipbrd used by TextIntoVoice"
GNU/Linux... и что делать?
ADR
новенький
 
Сообщения: 43
Зарегистрирован: 11.05.2010 18:22:39
Откуда: Ukraine


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 93

Рейтинг@Mail.ru