| Private Sub mnuKopie_Click() Clipboard.SetText Text1.SelText, vbCFText End SubPrivate Sub mnuAusschneid_Click() Clipboard.SetText Text1.SelText, vbCFText End SubText1.SelText = "" Private Sub mnuEinfueg_Click() Dim Pos As Integer End SubPos = Text1.SelStart Text1.Text = Left(Text1.Text, Pos) & Clipboard.GetText(vbCFText) & Right(Text1.Text, Len(Text1.Text) - Pos) Private Sub mnuLoesch_Click() Text1.SelText = "" End Sub |
Eine Erweiterung ist noch vorzuschlagen: Die Zwischenablage wird von Windows immer nur dann angeboten, wenn es Sinn hat, Kopieren nur, wenn etwas markiert ist, Einfügen nur, wenn die Zwischenablage etwas enthält und ein möglicher Einfügeort mit der Maus gewählt ist. Hier in Visual Basic muß man das extra programmieren.
Dazu wird man die Menüeinträge in Abhängigkeit von diesen Bedingungen aktivieren oder deaktivieren (mnuTuWas.Enabled=True/False) bzw. die Einträge sichtbar oder unsichtbar (mnuTuWas.Visible=True/False) machen.
Nehmen wir wieder das obige Beispiel: Wie erfragt man, wann es so weit ist?
| Kopieren und Ausschneiden If Text1.SelText<>"" then ... Einfügen If Clipboard.GetFormat(vbCFText) ... bleibt aber zu fragen, steht der Cursor an zugelassener Stelle? Das erledigt besser der Aufruf, deshalb nun die Komplettlösung Voreinstellung aller Menüpunkte im Menüeditor muß sein: mnuTuWas.Enabled = False Private Sub Text1_Click() If Clipboard.GetFormat(vbCFText) Then mnuEinfueg.Enabled = True If Text1.SelText<>"" Then mnuKopie.Enabled = True mnuAusschneid.Enabled = True Else mnuKopie.Enabled = False mnuAusschneid.Enabled = False End If End SubPrivate Sub Text1_LostFocus() mnuKopie.Enabled = False End SubmnuAusschneid.Enabled = False mnuEinfueg.Enabled = False |
Interessant ist für den programmierenden Datenauswerter, daß er sein Ergebnisdiagramme auch ordentlich vermarkten kann. Wie man eigene Diagramme druckt, ist klar, wie man sie etwa in einen Text einbaut, noch nicht.
Ginge etwa die Zwischenablage? Schaun mer mal.
Zunächst der weniger wichtige aber einfache Fall: Mit Clipboard.setData kann man ein Bild, das in ein Image oder eine PictureBox geladen ist, in die Zwischenablage laden und weiterverwenden. Allerdings, anders als beim Text, muß zuerst die Zwischenablage mit Clear gelöscht werden. Da man das Bild nicht ohne weiteres aktivieren kann, kann man entweder das Bild durch einfachen Klick in die Zwischenablage übernehmen, was einen entsprechenden Hinweis im Programm erfordert, oder man nutzt einen Menüeintrag, der etwa "Bild kopieren" heißt.
| Private Sub Picture1_Click() Clipboard.Clear End SubClipboard.SetData Picture1.Picture, 0 |
Die SetData-Methode verlangt die Angabe einer Konstanten, die den Bildtyp kennzeichnet. Die Null bedeutet so etwas wie "ich suchs mir aus". Das Einfügen sollte analog mit GetData funktionieren. Unser Pech, wenn es um ein selbstgemaltes Bild geht, funtioniert das nicht, es wird aber nicht viel komplizierter: 2 Schritte sind nötig.
Schritt 1: Man muß für diePictureBox, die man zum Malen benutzt, die Eigenschaft "AutoRedraw" auf True setzen. Das geht im Eigenschaften-Fenster oder auch im Code.
Schritt 2: Der Aufruf ändert sich geringfügig. Gespeichert wird die Image-Eigenschaft, der Bildtyp ist in diesem Falle 2 (Bitmap-Grafik).
| Private Sub mnuKopier_Click() Clipboard.Clear End SubClipboard.SetData Picture1.Image, 2 |
Gespeichert wird in diesem Falle fast alles, was die PictureBox enthält.
Wieso fast?
Gespeichert werden Hintergrundfarbe, ggf. geladenes Hintergrundbild, alles, was mit Graphikmethoden gezeichnet wurde aber nicht aufsitzende Shapes und Lines (Gemeint ist das Line-Steuerelement, nicht zu verwechseln mit der gleichnamigen Graphikmethode!). Das hat zwar eine gewisse Logik, aber was logisch ist, muß man ja nicht gut finden. Ich gestehe, ich weiß nicht, wie man sie in das Bild integrieren kann. Hilft erst mal nur, sie bei zu kopierenden Bildern zu vermeiden.