__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){ FNextCbViewer = 0; // Изначально никаких попыток перехвата нет} //---------------------------------------------------------------------------// При уничтожении формы "отцепимся" от цепочкиvoid __fastcall TForm1::FormDestroy(TObject *Sender){ if(FNextCbViewer) { ChangeClipboardChain(this->Handle, FNextCbViewer); FNextCbViewer = 0; }} //---------------------------------------------------------------------------// Эта кнопка будет добавлять наше приложение к цепочке, получающей уведомления// об изменении содержимого Clipboard-аvoid __fastcall TForm1::btnSetViewerClick(TObject *Sender){ if(FNextCbViewer) // Второй раз добавлять себя не будем { ShowMessage(L"Уже зарегистрировано"); } else { FNextCbViewer = SetClipboardViewer(this->Handle); // А если еще не делали - добавим }} //---------------------------------------------------------------------------// Ну, и кнопка, чтобы "отцепиться" вручнуюvoid __fastcall TForm1::btnResetViewerClick(TObject *Sender){ ChangeClipboardChain(this->Handle, FNextCbViewer); FNextCbViewer = 0;} //---------------------------------------------------------------------------// void __fastcall TForm1::WMChangeCBChain(TWMChangeCBChain &Msg){ // inherited; Msg.Result = 0; if(Msg.Remove == FNextCbViewer) { FNextCbViewer = Msg.Next; } else { // Информируем дальше по цепочке о событии изменении цепочки SendMessage(FNextCbViewer, WM_CHANGECBCHAIN, WPARAM(Msg.Remove), LPARAM(Msg.Next)); } }void __fastcall TForm1::WMDrawClipboard(TWMDrawClipboard &Msg){ try { // Собственно, уведомление пользователя. Тут можешь делать // с Clipboard-ом все что нужно MessageBox(0, _T("Содержимое буфера обмена изменилось"), _T("Внимание!"), MB_ICONINFORMATION); } __finally { // Но в конце информируем следующего об изменении буфера SendMessage(FNextCbViewer, WM_DRAWCLIPBOARD, WPARAM(0), LPARAM(0)); }}
Функции передачи дальше по цепочке (если я не ошибаюсь) нет.
Вопрос
nek
Доброго времени суток. Как "прикинуться" приложению Firemonkey ClipboardViewer'ом? И можно ли потом обойтись малой кровью перепилив это дело под мак?
Не делать же каждые N мс проверку буфера (в моём случае на совпадение с рег. выр)
Вот например код для VCL (C++) , но он не работает в FireMonkey, не знаю какую библиотеку ещё подрубить кроме vcl.clipbrd.hpp (clipbrd.hpp)
Функции передачи дальше по цепочке (если я не ошибаюсь) нет.
ChangeClipboardChain(this->Handle, FNextCbViewer);
Если можно с примерами) желательно не делфи
Ссылка на комментарий
1 ответ на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.