TClipboard



  • ich würde gerne auf die windows zwischenablage reagieren.
    dazu habe ich in der BCB hilfe TClipboard gefunden.
    man solle folgendes inkludieren
    #include <Clipbrd.hpp>

    ich frage mich nun aber, wie ich direkt auf die zwischenablage reagieren kann. also sobald text reinkopiert wird etc. wohin muss ich nun

    char *Buffer;
    	int bSize;
    	if(Clipboard()->HasFormat(CF_TEXT))
    	{
    		Memo1->Lines->Add(Clipboard()->GetTextBuf(Buffer, bSize));
    	}
    

    und foglendes stimmt nicht 🙂

    Memo1->Lines->Add(Clipboard()->GetTextBuf(Buffer, bSize));
    


  • Hallo,
    Wie du mit der Komponente umgehend kannst weiß ich nicht (schau mal in die Hilfe vom BCB), aber bei deinem ersten Problem würde ich sagen, dass es am einfachsten ist diese Abfrage in einem OnTimer-Event einer TTimer-Komponente zu setzen; Dann brauchst du dich nicht mehr um den Rest zu kümmern!



  • Reyx danke. grundsätzlich hast du schon recht. aber eine timer lösung finde ich hier nicht gerade elegant. ich denke das geht auch anders. message, hook oder so. nur weis ich hald nicht wie 🙂



  • ich nochmal
    das umgangsproblem habe ich nun gelöst

    if(Clipboard()->HasFormat(CF_TEXT)) 
    	{
    		Memo1->Lines->Add(Clipboard()->AsText);
    	}
    

    bleibt nur die frage wie abfangen, ausser den einsatz von TTimer 🙄



  • Hallo

    schau mal ins WinAPI-Forum, mit "message, hook" wirst du schon richtig liegen.

    bis bald
    akari



  • ich würde das jetzt aber lieber mit einem von hier besprechen der es evl. schonmal gemacht hat, befor ich mich nun tot suche und am ende doch nichts finde 🙄 🙄





  • danke! krieg die übersetzung nach C++ aber nicht ganz hin.
    kann mir jemand helfen?

    Unit1.h

    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
    	void __fastcall FormCreate(TObject *Sender);
    	void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
    	__fastcall TForm1(TComponent* Owner);
    	void __fastcall WMChangeCbChain(TMessage *Msg);
    	void __fastcall WMDrawClipboard(TMessage *Msg);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    Uinit1.cpp

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int NextClipboardViewer;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::WMChangeCbChain(TMessage *Msg)
    {
    	if(Msg->wParam == NextClipboardViewer)
    	{
    		NextClipboardViewer = Msg->lParam;
    	}
    	else
    	{
    		SendMessage(NextClipboardViewer, wm_ChangeCbChain, Msg.wParam, Msg.lParam);
    	}
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::WMDrawClipboard(TMessage *Msg)
    {
    	SendMessage(NextClipboardViewer, wm_DrawClipboard, Msg->wParam, Msg->lParam);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    	NextClipboardViewer = SetClipboardViewer(Form1->Handle);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
    	ChangeClipboardChain(Form1->Handle, NextClipboardViewer);
    }
    //---------------------------------------------------------------------------
    


  • Bin mir nicht ganz sicher, aber schau dir mal BEGIN_MESSAGE_MAP in der (VCL-)Hilfe an.



  • hmm... kriegs nicht hin 🙄


Anmelden zum Antworten