Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 21.12.2011, 12:49   #1
Mick
AnyKey`щик
 
Регистрация: 22.07.2011
Сообщений: 6
Написано одно полезное сообщение
CBuilder и буфер обмена

Добрый день.
Может кто-нибудь подскажет, как увязать CBuilder и буфер обмена.
Если поконкретнее, то проблема в следующем:
устанавливаю свою программу в цепочку слежения за буфером обмена, а вот дальше непонятно, как получить сообщение об изменении содержимого буфера. В VisualC сообщение WM_DRAWCLIPBOARD перехватывается явно, а вот где в билдере это сделать непонятно. Да и вообще, как в билдере можно обработать сообщения Windows, отличные от стандартных эвентов компонент?
(Offline)
 
Ответить с цитированием
Старый 21.12.2011, 14:55   #2
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: CBuilder и буфер обмена

TApplicationEvents компонент
void __fastcall TMainForm::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
 {
   switch (Msg.message)
   {
    case WM_NCLBUTTONUP:
      Handled = true;
    break;
    case WM_NCLBUTTONDOWN:
      Handled = true;
    break;
    case WM_NCMOUSEMOVE:
      Handled = true;
    break;
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (21.12.2011)
Старый 28.12.2011, 01:05   #3
Mick
AnyKey`щик
 
Регистрация: 22.07.2011
Сообщений: 6
Написано одно полезное сообщение
Ответ: CBuilder и буфер обмена

Спасибо, но...
Делаю так:
...
next_wiever = SetClipboardViewer(Handle);//устанавливаю свое окно в цепочку слежения за буфером обмена
...
и далее
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{

  switch (Msg.message)
   {
     case WM_DRAWCLIPBOARD:     MessageBox(0,"WM_DRAWCLIPBOARD","  ",MB_OK);//просто вывести сообщение если в буфер что-то скопировано
      Handled = true;
   break;
   }
}
...
В результате - ничего.
Причем установка в цепочку происходит, указатель ненулевой, а вот на изменение содержимого нет реакции.
(Offline)
 
Ответить с цитированием
Старый 28.12.2011, 09:20   #4
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: CBuilder и буфер обмена

Сообщение от Mick Посмотреть сообщение
Спасибо, но...
Делаю так:
...
next_wiever = SetClipboardViewer(Handle);//устанавливаю свое окно в цепочку слежения за буфером обмена
...
и далее
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{

  switch (Msg.message)
   {
     case WM_DRAWCLIPBOARD:     MessageBox(0,"WM_DRAWCLIPBOARD","  ",MB_OK);//просто вывести сообщение если в буфер что-то скопировано
      Handled = true;
   break;
   }
}
...
В результате - ничего.
Причем установка в цепочку происходит, указатель ненулевой, а вот на изменение содержимого нет реакции.
как то так
class TForm1 : public TForm
{
__published:	// IDE-managed Components
TMemo *Memo1;
TImage *Image1;
void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
private:	// User declarations
void __fastcall OnClipboard(TWMNoParams& Msg);
void __fastcall OnChgChain(TWMNoParams& Msg);
public:	 // User declarations
__fastcall TForm1(TComponent* Owner);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DRAWCLIPBOARD,TWMNoParams,OnCli pboard)
MESSAGE_HANDLER(WM_CHANGECBCHAIN,TWMNoParams,OnChg Chain)
END_MESSAGE_MAP(TComponent)
};

#cpp - file


#include <vcl.h>
#pragma hdrstop

#include "Unit3.h"
#include <vcl\Clipbrd.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HWND Hclb;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
SetClipboardViewer(Handle);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
ChangeClipboardChain(Handle,Hclb);
CanClose = true; 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnClipboard(TWMNoParams& Msg){
Memo1->Visible = false;
Image1->Visible = false;
try{
if(Clipboard()->HasFormat(CF_BITMAP)){
Image1->Picture->LoadFromClipboardFormat(CF_BITMAP,Clipboard()->GetAsHandle(CF_BITMAP),0);
Image1->Visible = true;
}
else{
Memo1->Text = Clipboard()->AsText;
Memo1->Visible = true;
}
}
catch(...){ SendMessage(Hclb,WM_DRAWCLIPBOARD,0,0);}
}
void __fastcall TForm1::OnChgChain(TWMNoParams& Msg){
SendMessage(Hclb,WM_CHANGECBCHAIN,0,0);
}
еще можно попробовать отлавливать
if (msg.message == WM_DRAWCLIPBOARD)
{
MessageBox(Form1->Handle, "asd", "asd", MB_OK);
Handled = true;
}
else if (msg.message == WM_CHANGECBCHAIN)
{

}
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mick (30.12.2011)
Старый 30.12.2011, 01:29   #5
Mick
AnyKey`щик
 
Регистрация: 22.07.2011
Сообщений: 6
Написано одно полезное сообщение
Ответ: CBuilder и буфер обмена

Спасибо, все работает.
Я и раньше пробовал через таблицу откликов, но тип сообщения указывал неверно.
Если не секрет, откуда взято значение TWMNoParams - где можно почитать.
(Offline)
 
Ответить с цитированием
Старый 30.12.2011, 09:16   #6
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: CBuilder и буфер обмена

Это чисто VCL фишка http://docwiki.embarcadero.com/VCL/e...es.TWMNoParams первое в яндексе
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 01:43.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com