TRichEdit und TClipboard



  • hi
    ich wundere mich gerade wegen folgendem:
    wenn ich RichEdit1->PasteFromClipboard(); mache, dann ist im RichEdit1 der text genau so wie er formatiert ist.

    wenn ich aber das hier mache RichEdit1->Text = Clipboard()->AsText;
    ist der text zwar auch in RichEdit1 aber unformatiert! wieso das? beides kommt ja aus der gleichen zwischenablage. Wie kriege ich es auch mit der zweiten sache formatiert hin?



  • Wie ist der Text denn kopiert worden? - Aus einem anderen Programm heraus oder aus deinem eigenen? -Und wie wurde er genau kopiert? Hast du es manuell gemacht oder einfach Rechte MAustaste und kopieren?

    MfG Windoof



  • Wie ist der Text denn kopiert worden?

    CTRL+C

    Aus einem anderen Programm heraus oder aus deinem eigenen?

    Anderes

    [/quote]Und wie wurde er genau kopiert?

    siehe erste antwort

    Hast du es manuell gemacht oder einfach Rechte MAustaste und kopieren?[quote]
    siehe erste antwort



  • Schade, dann liegt es doch nicht daran, was ich mir so dachte...



  • BCB-Hilfe mal wieder schrieb:

    Mit der Eigenschaft AsText können Sie Text in die Zwischenablage einfügen und daraus ermitteln.Wenn die Zwischenablage keinen Text enthält, gibt AsText einen leeren String zurück. Text wird in dem Mime-Typ 'text' oder 'text/plain' in die Zwischenablage eingefügt.

    Was hattest du denn erwartet? AsText sagt doch schon vom Namen her, dass die Formatierungen weggelassen werden.



  • Nunja... wenn er selbst aus dem TRichEdit heraus in die Zwischenablage eingefügt hat und direckt auf RichEdit1->Text zugreift, kann es durchaus passieren, dass die "Formatierung", die ja auch letztlich text/plain ist, mit kopiert wurde, aber da das nicht der Fall ist, hast du vollkommen recht.



  • das macht sinn.
    aber was genau passiert denn bei PasteFromClipboard()?
    wiegesagt, beides (PasteFromClipboard() und Clipboard()->AsText) holt den gleichen text aus der windows zwischenablage. nur scheint PasteFromClipboard() einen anderen mechanismuss zu haben 🙂

    wie krieg ich den mit Clipboard() den formatierten text in ein TRichEdit? Assign(Clipboard()) klappt ja nicht. Assign(Clipboard()->AsText) würde zwar gehen aber wie du schon sagtest, AsText enthält dann wohl keine formatierung mehr...



  • Gibt es auch nur einen einzigen sinnvollen Grund, es nicht über PasteFromClipboard machen zu wollen? Wie du bereits sagtest, hast du dort doch alle Formatierungen mit dabei.



  • Dasd schrieb:

    Gibt es auch nur einen einzigen sinnvollen Grund, es nicht über PasteFromClipboard machen zu wollen?

    Ja, wenn man keine Formatierung will 🙄



  • Windoof schrieb:

    Ja, wenn man keine Formatierung will 🙄

    Aua. Der hat echt gesessen.

    Aber Spaß beiseite. Er _will_ die Formatierung ja haben. Nur eben über TClipboard und nicht PasteFromClipboard. Das verstehe ich nicht.



  • Ich auch nicht 😮



  • das hat schon seine gründe 😉

    da ich z.B. über TClipboard einer listbox den text zuweise und wenn man auf ein item klickt, soll der gleiche text (aus dem item) in einem TRichEdit dargestellt werden und eben so formatiert wie der text ist. verstanden? deswegen kann ich schlecht einmal von TClipboard gebrauch machen und einmal von PasteFrom.... das würde icht gehen. jedenfalls nicht direkt und nicht sauber (habe shcon versuche hinter mir)... der einfachste weg wäre also eine einzige quelle (hier TClipbaord) zu wählen und eben.... 🙄



  • Seit wann kann man einer ListBox formatierten Text zuweisen? Seit wann kann man ihr überhaupt Text zuweisen? Ich verstehe nicht, worauf du hinaus willst...



  • Achso... und die ListBox befindet sich wo?
    - in einem anderen Programm,
    - im gleichen Programm, aber in einem anderen Fenster oder
    - der gleichen Form?



  • @Dasd: die zuweisung (zuweisungs operator 🙂 geht locker über Strings[index]... oder aber über Add()... was die formatierung angeht: von formatierter darstellung in einer listbox war ja nie die rede, nur die zuweisung..

    @Windoof:
    - "im gleichen Programm, aber in einem anderen Fenster"

    worauf willst du hinaus? das ich über FormName->ListBoxName... zugreifen kann?



  • Beantworte bitte einfach nur meine Frage, dann kann ich dir vielleicht helfen. Und wie sieht die ListBox denn nun aus? -Wird beim Anklicken gleich ein Eintrag in die Zwischenablage geschoben?

    Vielleicht könntest du auch, damit wir dein Problem besser nachvollziehen können, erklären, um was es sich bei deinen Programmen handelt und was genau du machen möchtest, dann müssen wir hier nämlich kein Ratespielchen spielen.



  • ich habe dir eigentlich eine antwort gegeben. zugegeben, nicht eindeutig aber hier: ""im gleichen Programm, aber in einem anderen Fenster"" das ist es. was ich vorhabe, habe ich ja bereits erwähnt. wenn anhand dieser informationen mir keinenr helfen kann/will, dann lassen wir das hald.

    deine fragen sind ehrlichgesagt nicht wirklich relevant. was spielt es für eine rolle ob die listbox in einer anderen form sitzt, etc.? was ich möchte habe ich ja ausdrücklich gesagt. hier als kurz form:

    TClipboard als original formatierten text in eine TListBox (als item)

    that's it... 🙄 🙄



  • Borlandy schrieb:

    deine fragen sind ehrlichgesagt nicht wirklich relevant.

    Hmm... eigentlich...

    worauf willst du hinaus? das ich über FormName->ListBoxName... zugreifen kann?

    ...Ja, genau... darauf wollte ich hinaus. Warum fügst du die Texte nicht einfach so ein und so...? - TClipboard ist hier doch dann nicht notwendig, stell dir mal vor du kopierst einen wichtigen Text, der lang ist und nach dem du ewig gesucht hast... und bevor du ihn in Word einfügst, willst du nur mal schnell dein kleines Tool ausführen, was auchimmer das macht... und das ersetzt dienen Text, den du so mühseelig kopiert hast, einfach so... und das ohne einen wirklichen Sinn. Wenn du mich fragst: TClipboard ist dazu da, um Daten nach außen durch den User exportieren zu lassen. Das macht z.B. sinn bei KeyGenerators... aber bei deinem Programm kann ich den Sinn nicht nachvollziehen. Das ist das Problem dabei, dir hier zu helfen. Wenn ich wenigstens den Sinn verstehen würde... aber das tut hier scheinbar niemand, deshalb habe ich ja gefragt, was dein Programm eigentlich macht. OK, ich habe michevtl. blöd ausgedrückt... ich wollte nur fragen: Wozu dient die ListBox und wozu dein RichEdit? - Was haben die miteinander zu tun? Machst du ein Wörterbuch oder wie?



  • Wozu dient die ListBox und wozu dein RichEdit?

    gute frage! 😃
    antwort: die listbox ist eine art miniatur (vorschau) des textes (50 zeichen werden dargestellt..) aus der zwischenablage. wenn man auf das listbox item klickt, soll der text aus dem listbox item, vollständig und eben korrekt formatiert im richedit dargestellt werden.

    wieso wende ich TClipboard an?
    leider verfügt TListBox nicht auch wie TRichEdit über die PasteFrom... funktion.

    Wieso wennde ich nicht TClipboard bei der listbox an und bei TRichEdit gleich PasteFrom?
    Der grund ist, ich reagiere auf die zwischenablage. wenn ich dann (falls format CF_TEXT) reagiere und dann der listbox per TClipboard den text übergebe und dann TRichEdit über die eigene funktion PasteFrom, den text übergebe, kommt es zu einer zugriffsverletzung, da anscheinend nicht beide funktionen zur gleichen zeit, oder wie auch immer, auf die windows zwischenablage zugreiffen können.

    Hoffe nun ist es klar! 🙄 :p 😉



  • Hmm...

    // Deklarationen
    TForm* Form1;
    vector<TRichEdit*>reTmp(0);
    
    // Eigene Funktionen
    void __fastcall TForm1::PasteFromClipboard()
    {
        // Neues RichEdit für ListBoxEintrag erstellen
        reTmp.resize(reTmp.size()+1);
        reTmp[reTmp.size()-1]=new TRichEdit;
        reTmp[reTmp.size()-1]->Parent=Form1;
        reTmp[reTmp.size()-1]->Visible=false;
        reTmp[reTmp.size()-1]->PasteFromClipboard();
    
        // ListBox-Eintrag vornehmen
        ListBox1->Items->Add(reTmp[reTmp.size()-1]->Text.SubString(1,50));
    }
    void __fastcall TForm1::InsertItem()
    {
        RichEdit1->SelText=reTmp[ListBox1->ItemIndex]->Text;
    }
    

    Und hier die Header:

    class TForm1 : public TForm
    {
      //...
      public:
        void __fastcall PasteFromClipboard();
        void __fastcall InsertItem();
    };
    

    Hab's allerdings nicht getestet, aber so sollte zumindest auch die Formatierung übernommen werden und du musst kein TClipboard verwenden und schon garnicht den Text darin ersetzen.


Anmelden zum Antworten