Текущий архив: 2003.11.17;
Скачать: CL | DM;
ВнизБуфер обмена Найти похожие ветки
← →
Poof-poof (2003-11-05 22:57) [0]Буду краток:
1. Как организовать слежение за буфером обмена? (код)
2. Как определить, что в буфер обмена поступило изображение (скриншот)??? (код)
3. Как этот самый скришот вытащить из буфера обмена и перевести этот формат в TBitmap? (код)
← →
Poof-poof (2003-11-06 00:33) [1]Ребят, ну помогите плиззз...зз...з... :)
← →
KSergey (2003-11-06 08:14) [2]3.См. спарвку по TBimMap.Assign (и Clibboard.Assign)
1.Бувально вчера в каком-то факе видел... А почитайте ка и вы разные - полезно, поверьте. Там какое-то сообщение регистрировалось помнится.
2.Как только будет решена задача п.1 - см. ClipBoard.HasFormat
ЗЫ
Вы книги читать пробовали?
← →
Романов Р.В. (2003-11-06 08:39) [3]1.
McSimm © (10.07.02 10:06)
Есть техника, позволяющая отслеживать изменения Clipboard. Для этого надо
1. Зарегистрировать свое окно в цепочке ClipboardChain
2. Выполнять необходимые действия по передаче сообщений по цепочке
3. Удалить свое окно из цепочки.
Пример :
procedure TForm1.FormCreate(Sender: TObject);
begin
// Регистрируемся и запоминаем соседа
Hn := SetClipboardViewer(Handle)
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// Удаляем себя из списка
ChangeClipboardChain(Handle, Hn);
end;
procedure TForm1.ChangeCBChain(var Message: TWMChangeCBChain);
begin
// Обрабатываем событие изменения очереди
if Message.Remove = Hn then Hn := Message.Next
else
if Hn <> 0 then // передаем по цепочке
SendMessage(Hn, Message.Msg, Message.Remove, Message.Next);
Message.Result := 0
end;
procedure TForm1.DrawClipboard(var Message: TWMDrawClipboard);
begin
//Обрабатываем изменения в Clipboard
Button1.Enabled := IsClipboardFormatAvailable(CF_TEXT);
if Hn <> 0 then // передаем по цепочке
SendMessage(Hn, Message.Msg, 0, 0)
end;
2. CF_BITMAP
3. TPicture.LoadFromClipboardFormat
← →
REA (2003-11-06 09:39) [4]1) OnIdle например
2) HasFormat, class function TPicture.SupportsClipboardFormat
3) Picture.Assign(Clipboard) and
Bitmap.Assign(Clipboard) are also supported to retrieve the contents of the clipboard.
← →
Poof-poof (2003-11-06 17:48) [5]Спасибо всем кто пытался помочь, но я чёто-то запутался...
Мне нужно что-бы если буфер обмена изменился - то вызывалась бы определённая процедура...
Вот нашол следующий код:
unit ClipboardViewer;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FNextViewerHandle : THandle;
procedure WMDrawClipboard (var message : TMessage);
message WM_DRAWCLIPBOARD;
procedure WMChangeCBCHain (var message : TMessage);
message WM_CHANGECBCHAIN;
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
// Проверяем работоспособность функции.
// При невозможности просмотра буфера обмена
// функция возвратит значение Nil.
FNextViewerHandle := SetClipboardViewer(Handle);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// Восстанавливаем цепочки.
ChangeClipboardChain(Handle, FNextViewerHandle);
end;
procedure TForm1.WMDrawClipboard (var message : TMessage);
begin
// Вызывается при любом изменении содержимого буфера обмена
message.Result := SendMessage(WM_DRAWCLIPBOARD, FNextViewerHandle, 0, 0);
end;
procedure TForm1.WMChangeCBCHain (var message : TMessage);
begin
// Вызывается при любом изменении цепочек буфера обмена.
if message.wParam = FNextViewerHandle then begin
// Удаляем следующую цепочку просмотра. Корректируем внутреннюю переменную.
FNextViewerHandle := message.lParam;
// Возвращаем 0 чтобы указать, что сообщение было обработано
message.Result := 0;
end else begin
// Передаем сообщение следующему окну в цепочке.
message.Result := SendMessage(FNextViewerHandle, WM_CHANGECBCHAIN,
message.wParam, message.lParam);
end;
end;
end.
По идее он может следить за буфером обмена...
Как бы мне его скоротить так, что-бы достигнуть вышеописанных задач? :)
← →
Poof-poof (2003-11-06 23:18) [6]Ну помогитееееееее!!!!!!! :)))
← →
Ломброзо (2003-11-07 00:51) [7]Вариант для ленивых - скачать JCL/JVCL и положить на форму требуемый компонент
Вариант для неленивых - полазить по MSDN и поизучать метод OleGetClipboard и интерфейс IDataObject, в особенности методы DAdvise и DUnadvise (привязка к событиям буфера обмена)
← →
Poof-poof (2003-11-07 01:35) [8]Я ленивый! :)
Где скачаеть этот JCL/JVCL?
← →
DJ_Sedoy (2003-11-07 02:06) [9]Гм.... сорри, конечно, но не проще ли в это системе ловить?
← →
Poof-poof (2003-11-07 02:16) [10]:) Ну что же делать?
← →
Poof-poof (2003-11-07 14:32) [11]Помогитееее!!!!!!
← →
Poof-poof (2003-11-07 16:42) [12]Блин!!!!!!!!!!!!
← →
none1 (2003-11-07 18:01) [13]PBClipBoard v.1.20.00.00 FWS 4 Kb 03.01.03
By Poul Bak. PBClipBoard is a small component that monitors the clipboard. It has only one property, the "Onchange" event, that triggers whenever the contents of the clipboard changes. Use it to automatically enable/disable "Paste"-buttons or to view the contents of the clipboard.
How to use: Drop a PBClipBoard component on the form. Write an Onchange event-handler to enable/disable the paste buttons. That"s all.
Fully functional
Source: Included
http://www.torry.net/vcl/system/other/pbclip.zip
← →
Poof-poof (2003-11-08 00:52) [14]Огромное спасибо!!!!!!!! Спасибо! Спасибо!!! Yes!!! Ага...Йе!! Сэнькс!
Страницы: 1 вся ветка
Текущий архив: 2003.11.17;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.019 c