Die Komponenten TextArea und TextEdit als Editoren sowie die TextBox verfügen über ein Kontextmenü (Rückgängig, Wiederherstellen, Ausschneiden, Kopieren, Einfügen, Löschen, 'Alles Auswählen') mit dem der Austausch von Text über das Clipboard sicher gelingt – ohne die Klasse Clipboard einsetzen zu müssen.
Das vorgestellte Projekt demonstriert die Verwendung der Klasse Clipboard (gb.qt4) für Texte. Das eingefügte Kontextmenü für die TextArea1 verfügt über drei Einträge:
Bitte beachten Sie:
Sie können Text in der Textarea1 oder in der TextBox markieren und dann über deren Kontextmenüs den markierten Text kopieren oder ausschneiden oder Text – auch aus anderen Anwendungen – in die Textarea2 einfügen:
Abbildung 20.4.1.1: Demonstrationsprogramm 'Clipboard Text'
Wenn Sie beispielsweise Text aus Webseiten oder aus OpenLibreWriter oder aus dem EMail-Client Thunderbird kopieren und einfügen, dann offenbart die Anzeige der Textformate eine überraschende Vielzahl von MIME-Typen.
Der Quelltext für das Demonstrationsprogramm wird vollständig angegeben:
Private sText As String Public Sub Form_Open() FMain.Center FMain.Resizable = False If Clipboard.Type <> Clipboard.None Then ' Clipboard nicht leer? FMain.Caption = "ClipBoard MIME-Type: " & Clipboard.Formats[0] Endif ' Clipboard.Type <> Clipboard.None ? ' Mustertext: sText = "Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming " sText &= "id quod mazim placeratfacer possim assum. Lorem ipsum dolor sit amet, consectetuer " sText &= "adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna " sText &= "aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation " sText &= "ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat." txaArea1.Text = sText txaArea1.Wrap = True txaArea2.Wrap = True End ' Form_Open Public Sub btnShowFormats_Click() Dim sElement As String txaArea2.Clear For Each sElement In Clipboard.Formats txaArea2.Insert(sElement & gb.NewLine) Next ' sElement End ' btnFormats_Click Public Sub btnReset_Click() Clipboard.Clear txaArea2.Clear txaArea1.Text = sText txaArea1.SetFocus FMain.Caption = "ClipBoard" End ' btnReset_Click() Public Sub btnTextArea2Clear_Click() txaArea2.Clear End ' btnTextArea2Clear_Click() Public Sub btnClose_Click() FMain.Close End ' btnClose_Click() ' Menüdeklaration --------------------------------------------------------------------------------------- Public Sub txaArea1_Menu() Dim mnuContextTextArea1 As Menu Dim mnuMenuItem As Menu ' Es wird ein neues PopUp-Menü-Objekt für die Textarea1 erzeugt mnuContextTextArea1 = New Menu(FMain, False) ' 1. Eintrag im PopUp-Menü der Komponente TextArea1 mnuMenuItem = New Menu(mnuContextTextArea1) As "mnuSelectAll" mnuMenuItem.Text = "Gesamten Text markieren." mnuMenuItem.Picture = Stock["select"] ' 2. Eintrag im PopUp-Menü mnuMenuItem = New Menu(mnuContextTextArea1) As "mnuSelectedCopy" mnuMenuItem.Text = "Selektierten Text in das Clipboard kopieren." mnuMenuItem.Picture = Stock["copy"] ' 3. Eintrag im PopUp-Menü mnuMenuItem = New Menu(mnuContextTextArea1) As "mnuSelectedCut" mnuMenuItem.Text = "Selektierten Text ausschneiden " & String.Chr(187) & " Clipboard." mnuMenuItem.Picture = Stock["cut"] mnuContextTextArea1.Popup ' PopUp-Menü für TextArea_1 zuweisen End ' TextArea1_Menu ' Hier werden jetzt die 3 Aktionen programmiert, die ausgelöst werden, ' wenn der entsprechende PopUp-Menü-Punkt der TextArea1 ausgewählt wurde. ' PopUp-Menü-Punkt 1 - Komponente TextArea1 Public Sub mnuSelectAll_Click() txaArea1.SelectAll() txaArea2.Clear End ' mnuSelectAll_Click ' PopUp-Menü-Punkt 2 - Komponente TextArea1 Public Sub mnuSelectedCopy_Click() If txaArea1.Selection.Text <> Null Then txaArea2.Clear Clipboard.Copy(txaArea1.Selection.Text) ' Alternative: TextArea1.Copy() FMain.Caption = "ClipBoard MIME-Type: " & Clipboard.Formats[0] Endif ' TextArea1.Selection.Text <> Null ? End ' mnuSelectedCopy_Click ' PopUp-Menü-Punkt 3 - Komponente TextArea1 Public Sub mnuSelectedCut_Click() If txaArea1.Selection.Text <> Null Then txaArea2.Clear Clipboard.Copy(txaArea1.Selection.Text) FMain.Caption = "ClipBoard MIME-Type: " & Clipboard.Formats[0] txaArea1.Cut() Endif ' TextArea1.Selection.Text <> Null ? End ' mnuSelectedCopy_Click Public Sub txaArea2_Menu() Dim mnuContextTextArea2 As Menu Dim mnuP2T As Menu mnuContextTextArea2 = New Menu(FMain, False) mnuP2T = New Menu(mnuContextTextArea2) As "mnuPasteToTextArea2" mnuP2T.Text = "Text vom ClipBoard einfügen..." mnuP2T.Picture = Stock["paste"] If Clipboard.Type = Clipboard.Text Then mnuContextTextArea2.Popup ' PopUp-Menü für TextArea_2 zuweisen FMain.Caption = "ClipBoard MIME-Type: " & Clipboard.Formats[0] Else mnuP2T.Enabled = False mnuContextTextArea2.Popup ' PopUp-Menü für TextArea_2 zuweisen Endif ' Clipboard.Type = Clipboard.Text End ' TextArea2_Menu Public Sub mnuPasteToTextArea2_Click() txaArea2.Clear ' Kann auch entfallen... txaArea2.Insert(Clipboard.Paste("text/plain")) txaArea2.SetFocus End ' mnuPasteToTextArea2_Click