Auf Zwischenablage zugreifen?



  • Kurz und knapp, wir kann ich auf das Clipboard zugreifen? Also entweder löschen oder "" reinschreiben?

    Cya



  • Siehe TClipboard.



  • Gut, dann sag uns mal, wie du da jetzt nen AnsiString reinkopierst...

    Müsste die Funktion "SetFormat" sein...

    Wenn ich die benötigte Datei "QClipbrd.hpp" includiere, und ein Objekt der Klasse erstelle...

    TClipboard* cbTest=new TClipboard;
    cbTest->SetFormat("Test",0);
    delete cbTest;
    

    ...dann bekomme ich folgende Fehlermeldungen:

    [Linker Error] Unresolved external '__fastcall Qclipbrd::TClipboard::~TClipboard()' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
    [Linker Error] Unresolved external 'Qclipbrd::TClipboard::' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
    [Linker Error] Unresolved external '__fastcall Qclipbrd::TClipboard::SetFormat(const System::AnsiString, Classes::TStream *)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ

    Und ich kann die exe nicht ausführen. Was fehlt bei mir noch / was muss ich tun, damit es läuft?

    MfG Windoof



  • Windoof schrieb:

    was muss ich tun, damit es läuft?

    Z.B. dir das Beispiel zu TClipboard::AsText ansehen.



  • Nein, sorry, hab was verwechselt!!! Bitte nicht diesen Fehler machen! Includiert die Clipbrd.hpp, nicht die QClipbrd.hpp!!! Dann kann man mit einer ganz einfachen Funktion nen String in die Zwischenablage schieben:

    TClipboard* cbTest=new TClipboard;
    AnsiString Text="Test!!!";
    cbTest->SetTextBuf(Text.c_str());
    delete cbTest;
    

    Gut, dass ich das auch noch selbst gefunden habe 😉



  • Zitat aus der Hilfe, die du offenbar vorsätzlich ignorierst:
    "Instantiieren Sie einzelne TClipboard-Objekte nicht durch einen Aufruf des Kontruktors, sondern verwenden Sie statt dessen die globale Instanz von TClipboard [...]".



  • Ach mann jansen, nu akzeptiere es doch einfach, dass ich eine Lösung gefunden habe. Gönne es mir wenigstens einmal.



  • Schlechte Lösungen werden immer kritisiert, das hat nichts mit dir persönlich zu tun.



  • ich danke euch!! Klappt wunderbar.

    Cya



  • @jansen: Natürlich... klappt wunderbar, er sagt es auch, ist vollkommen zufrieden... stimmt, ist wirklich eine schlechte Lösung, wenn sie klappt. Vielleicht hätte ich ja dashier posten sollen:

    TClipboard Clipboard1;
    Clipboard.SetTextBuf("lol");
    

    Das klappt nicht, also scheint es in deinen Augen ne gute Lösung zu sein *lölz*



  • Tu dir (und uns) doch bitte, bitte den Gefallen und lies dir die Hilfe zu TClipboard durch, einschliesslich der angesprochenen Beispiele.

    Hier noch eine Illustration zur Aussage, dass "funktioniert" nicht unbedingt gleich "gut" ist:

    TClipboard *cb111 = new TClipboard();
    TClipboard *cb222 = new TClipboard();
    
    cb111->SetTextBuf("111");
    cb222->SetTextBuf("222");
    
    Caption = cb111->AsText;
    
    delete cb222;
    delete cb111;
    

    Quizfrage: Was steht wohl in Caption?



  • Klar, da steht dann 222, man sollte auch nicht unbedingt 2 TClipboards auf einmal verwenden. Aber in dieser gegebenen Situation reict das vollkommen aus, und ist 100%ig zufriedenstellend, das meine ich damit, genauso wie mit Systemweit Tastatureingaben abfangen... da muss man nicht gleich ne DLL-Datei einbinden, und 30000 Funktionen schreiben, dann schießt man mit einer Panzerfaust auf Mücken, da reicht auch einfach nur GetKeyState() aus, wenn man weiß, um welche Taste es sich handeln soll. Du nimmst gleich die beste Funktioj, die es gibt, die aber Rechenzeit und Speicherplatz beansprucht, obwahl eine kleinere vollkomen ausreicht... Ist ja nicht böse gemeint gewesen. Ist nur so als Anmerkung zu interpretieren, in der ich dir und den anderen Empfehle, dass man angemessene Funktionen verwendet. 👍



  • Wenn du dir die Hilfe durchgelesen hättest wäre dir vielleicht aufgegangen, dass die globale Instanz von TClipboard automatisch das ganze Programm hindurch zur Verfügung steht. Du hingegen erzeugst du eine weitere Instanz, verbrauchst also zusätzlich Speicher und Rechenzeit, und du blähst den Code auf.
    Dabei bringt die lokale Instanz absolut keinen Vorteil, sie ist funktional identisch mit der globalen Instanz.

    Deine "gute" Lösung ist also nicht nur potentiell gefährlich sondern auch noch Ressourcenverschwendung. Von wegen "kleinere vollkomen ausreich[ende]" Funktion ...

    Und zu deinem GetKeyState wurde in dem entsprechenden Thread bereits alles gesagt.

    Niemand hält dich davon ab, deine Lösungen hier kund zu tun und sie auch selbst so zu verwenden. Erwarte aber nicht, dass wir sowas wie hier unkommentiert stehen lassen.



  • Jansen schrieb:

    Wenn du dir die Hilfe durchgelesen hättest wäre dir vielleicht aufgegangen, dass die globale Instanz von TClipboard automatisch das ganze Programm hindurch zur Verfügung steht.

    Wo? Und vor allem: Wie? Wie soll das ganze Programm über eine Instanz bestehen, wenn ich zum Erzeugen eines Objektes davon die include-Datei erst selbst einbinden musste? - Das verstehe ich nicht, Du meinst, dass also schon ein Objekt existiert, obwohl die Header-Datei nicht eingebunden wurde, die Klasse demzufolge nicht existieren kann... Das in der Hilfe hab ich übrigens auch nirgends gesehen.


  • Mod

    Hallo

    fuehrt eueren Privatkrieg doch bitte wo anderst
    (langsam nervt es furchtbar)

    MfG
    Klaus



  • Achso, ne, ich versteh schon... in der Header-Datei ist schon ein Objekt "installiert"... OK, alles klar, dann sollte man natürlich nicht nochein Objekt initialisieren... hast recht jansen (mal wieder).



  • KlausB schrieb:

    fuehrt eueren Privatkrieg doch bitte wo anderst
    (langsam nervt es furchtbar)

    Also ich finde es keinen Krieg, sondern eine "wissenschaftliche" Diskussion, wovon ich was gelernt habe.

    MfG
    xy


Anmelden zum Antworten