Mehrere TClipboard instanzen



  • hallo. ich möchte von einem TClipboard mehrere instanzen erstellen wobei jede dann ihren eigenen speicherbereich hat. mit dem folgenden code erstelle ich einmal eine instanz und diese enthält dann die zwischenablage in dem derzeitigen zustand. wenn ich dann die zweite instanz erstelle und sich die zwischenablage geändert hät, hätte ich eigentlich erwartet das nun clip1 und clip2 unterschiedliche werte haben. es haben dann aber beide instanzen dann die gleichen werte. insofern wird wohl jede instanz auf den gleichen speicherbereich zeigen oder? wie erreiche ich nun aber das jede instanz nun die werte für sich speichert?

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include <Clipbrd.hpp>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "PBClipBoard"
    #pragma resource "*.dfm"
    TForm1 *Form1;
    TClipboard *clip1;
    TClipboard *clip2;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	clip1 = new TClipboard;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    	clip2 = new TClipboard;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
        Memo1->Lines->Add(clip1->AsText);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
        Memo1->Lines->Add(clip2->AsText);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    	delete clip1;
        delete clip2;
    }
    //---------------------------------------------------------------------------
    


  • Ich sehe keinen Sinn darin, zwei TClipBoards zu haben.
    TClipBoard representiert ja die Zwischenablage des Computers, z.B. zur Kommunikation zweier Programme miteinander. Wenn du Programmintern mehrere Werte zwischenspeichern willst, dann nimmst du dafür Variablen (int, bool, char*, AnsiString oder was auch immer, vielleicht ja eine eigene Implementation).

    Demnach glaube ich nicht, dass das mit zwei TClipBoards so ohne Weiteres möglich ist...



  • Hallo

    TClipboard basiert natürlich auf der Windows-Funktion. Da Windows aber genau ein Zwishcenspeicher anbietet (zumindestens über die Ebene, die TClipboard benutzt), kannst du keine weiteren Zwischenspeicher erstellen, auch nicht wenn du eine neue Instanz von TClipboard erzeugst.

    Dazu nochmal der Text aus der Builder-Hilfe zu TClipboard

    Instantzieren Sie einzelne TClipboard-Objekte nicht durch einen Aufruf des Kontruktors, sondern verwenden Sie statt dessen die globale Instanz von TClipboard, die von der Funktion Clipboard zurückgegeben wird.

    bis bald
    akari


Anmelden zum Antworten