APPEND DATA TO PASTEBOARD

4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 11 (Geändert)


APPEND DATA TO PASTEBOARD (DatenTyp; Daten)

ParameterTypBeschreibung
DatenTypStringTyp der hinzuzufügenden Daten
DatenBLOBDaten, die im Pasteboard angefügt
werden sollen

Beschreibung

Der Befehl APPEND DATA TO PASTEBOARD fügt in der Zwischenablage die im BLOB Daten enthaltenen Daten mit dem in Datentyp angegebenem Typ an.

Warnung: Der in DatenTyp übergebene Wert berücksichtigt die Schreibweise, so ist z.B. "abcd" nicht gleich "ABCD."

Wurde das BLOB Daten korrekt in der Zwischenablage angefügt, hat die OK Variable den Wert 1. Andernfalls hat OK den Wert 0 und es wird u.U. eine Fehlermeldung erzeugt.

Mit dem Befehl APPEND DATA TO PASTEBOARD hängen Sie normalerweise die verschiedenen Instanzen derselben Daten in der Zwischenablage an oder Daten, die weder vom Typ TEXT noch PICT sind. Wollen Sie neue Daten in der Zwischenablage anhängen, müssen Sie den Inhalt der Zwischenablage zuerst mit dem Befehl CLEAR PASTEBOARD löschen.

Wollen Sie:

Text in der Zwischenablage löschen und anfügen, verwenden Sie den Befehl SET TEXT TO PASTEBOARD,

Ein Bild in der Zwischenablage löschen und anfügen, verwenden Sie den Befehl SET PICTURE TO PASTEBOARD.

Den Pfadnamen (Drag and Drop) löschen oder anfügen, verwenden Sie den Befehl SET FILE TO PASTEBOARD

Enthält ein BLOB jedoch derzeit Text oder ein Bild, können Sie mit dem Befehl APPEND DATA TO PASTEBOARD Text oder Bilder in der Zwischenablage anfügen.

Beispiel

Mit den Befehlen für Zwischenablage und BLOBs können Sie ausgeklügelte Schemata für Ausschneiden/Kopieren/Einsetzen erstellen, die auch mit strukturierten Daten und nicht nur mit einem einzigen Datenteil arbeiten können. Im nachfolgenden Beispiel können Sie mit Hilfe der Projektmethoden SET RECORD TO PASTEBOARD und GET RECORD FROM PASTEBOARD einen ganzen Datensatz als ein Teil behandeln, das in bzw. aus der Zwischenablage kopiert wird.

      ` Projektmethode SET RECORD TO PASTEBOARD
      ` SET RECORD TO PASTEBOARD ( Nummer )
      ` SET RECORD TO PASTEBOARD ( Tabellennummer )

   C_LONGINT($1;$vlField;$vlFieldType)
   C_POINTER($vpTable;$vpField)
   C_STRING(255;$vsDocName)
   C_TEXT($vtRecordData;$vtFieldData)
   C_BLOB($vxRecordData)

      ` Inhalt der Zwischenablage löschen (Gibt es keinen aktuellen Datensatz, bleibt sie leer)
   CLEAR PASTEBOARD
      ` Hole Zeiger auf die Tabelle mit der als Parameter übergebenen Nummer
   $vpTable:=Table($1)   
      ` Gibt es einen aktuellen Datensatz für diese Tabelle
   If ((Record number($vpTable->)>=0) | (Is new record ($vpTable->)))
         ` Initialisiere die Textvariable mit dem Textbild des Datensatzes
      $vtRecordData:=""
         ` Hole für jedes Feld des Datensatzes:   
      For ($vlField;1;Count fields($1))
            ` Feldtyp
         GET FIELD PROPERTIES($1;$vlField;$vlFieldType)
            ` Hole Zeiger auf das Feld
         $vpField:=Field($1;$vlField)   
            ` Kopiere bzw. kopiere nicht je nach Feldtyp die Daten in geeigneter Weise
         Case of 
            : (($vlFieldType=Is Alpha field ) | ($vlFieldType=Is Text ))
                  $vtFieldData:=$vpField->
            : (($vlFieldType=Is Real ) | ($vlFieldType=Is Integer ) | ($vlFieldType=Is LongInt )
                                  | ($vlFieldType=Is Date ) | ($vlFieldType=Is Time ))
               $vtFieldData:=String($vpField->)
            : ($vlFieldType=Is Boolean )
               $vtFieldData:=String(Num($vpField->);"Yes;;No")
         Else
               ` Überspringe und ignoriere andere Felddatentypen
            $vtFieldData:=""  
         End case
            ` Sammle die Felddaten in der Textvariablen mit dem Textbild des Datensatzes
         $vtRecordData:=$vtRecordData+Field name($1;$vlField)+":"+Char(9)+$vtFieldData+CR
            ` Beachte: Die Methode CR gibt unter Windows Char(13)+Char(10), 
                     auf Macintosh Char(13) zurück.
      End for 
         ` Setze Textbild des Datensatzes in die Zwischenablage
      SET TEXT TO PASTEBOARD($vtRecordData)  
         ` Name für Übertragungsdatei in temporärem Ordner
      $vsDocName:=Temporary folder+"Scrap"+String(1+(Random%99))
         ` Lösche Übertragungsdatei, falls vorhanden  (hier sollte Fehler getestet werden)
      DELETE DOCUMENT($vsDocName)
         ` Erstelle Teildatei
      SET CHANNEL(10;$vsDocName)
         ` Sende den ganzen Datensatz in die Übertragungsdatei
      SEND RECORD($vpTable->)
         ` Schließe die Übertragungsdatei
      SET CHANNEL(11)
         ` Lade Übertragungsdatei in ein BLOB
      DOCUMENT TO BLOB($vsDocName;$vxRecordData)
         ` Übertragungsdatei wird nicht länger benötigt
      DELETE DOCUMENT($vsDocName)
         ` Füge Gesamtbild des Datensatzes in die Zwischenablage ein
         ` Hinweis: Wir verwenden wilkürlich "4Drc" als Datentyp
      APPEND DATA TO PASTEBOARD("4Drc";$vxRecordData)
         ` Die Zwischenablage enthält nun:
         ` (1) Ein Textbild des Datensatzes (wie in u.a. Screenshots)
         ` (2) Ein Gesamtbild des Datensatzes (Bild, Unterdatei und darin enthaltene BLOB Felder)
   End if

Geben Sie folgenden Datensatz ein:


und wenden die Methode SET RECORD TO PASTEBOARD auf die Tabelle [Angestellte] an, enthält die Zwischenablage das Textbild sowie das Gesamtbild des Datensatzes:




Über die Methode GET RECORD FROM PASTEBOARD können Sie dieses Bild des Datensatzes in einen anderen Datensatz kopieren:

      ` Methode GET RECORD FROM PASTEBOARD
      ` GET RECORD FROM PASTEBOARD ( Nummer )
      ` GET RECORD FROM PASTEBOARD ( Tabellennummer )
   C_LONGINT($1;$vlField;$vlFieldType;$vlPosCR;$vlPosColon)
   C_POINTER($vpTable;$vpField)
   C_STRING(255;$vsDocName)
   C_BLOB($vxPasteboardData)
   C_TEXT($vtPasteboardData;$vtFieldData)

      ` Hole Zeiger auf die Tabelle mit der in Parameter übergebenen Nummer
   $vpTable:=Table($1)
      `Gibt es einen aktuellen Datensatz
   If ((Record number($vpTable->)>=0) | (Is new record ($vpTable->)))
      Case of
            `Enthält das Pasteboard einen Datensatz als Gesamtbild?
         : (Pasteboard data size("4Drc")>0)
               ` Wenn ja, entnimm Inhalt dem Pasteboard
            GET PASTEBOARD DATA("4Drc";$vxPasteboardData)
               ` Name für Übertragungsdatei in temporärem Ordner
            $vsDocName:=Temporary folder+"Scrap"+String(1+(Random%99))
               ` Lösche Übertragungsdatei, falls vorhanden  (hier sollte Fehler getestet werden)
            DELETE DOCUMENT($vsDocName)
               ` Sichere BLOB in der Übertragungsdatei
            BLOB TO DOCUMENT($vsDocName;$vxPasteboardData)
               ` Öffne Übertragungsdatei
            SET CHANNEL(10;$vsDocName)
               ` Erhalte den gesamten Datensatz aus der Übertragungsdatei
            RECEIVE RECORD($vpTable->)
               ` Schließe Übertragungsdatei
            SET CHANNEL(11)
               ` Übertragungsdatei wird nicht länger benötigt
            DELETE DOCUMENT($vsDocName)
               ` Enthält das Pasteboard TEXT?
         : (Pasteboard data size("TEXT")>0)
               ` Entnimm Text aus dem Pasteboard     
            $vtPasteboardData:=Get text from pasteboard
               ` Initialisiere Feldnummer für die Erhöhung   
            $vlField:=0         
            Repeat 
                  ` Suche nach der nächsten Feldzeile im Text
               $vlPosCR:=Position(CR ;$vtPasteboardData)
               If ($vlPosCR>0)
                     ` Entnimm die Feldzeile
                  $vtFieldData:=Substring($vtPasteboardData;1;$vlPosCR-1)
                     ` Bei einem Doppelpunkt ":"
                  $vlPosColon:=Position(":";$vtFieldData)
                  If ($vlPosColon>0)
                     ` Nimm nur die Felddaten (lösche den Feldnamen)
                     $vtFieldData:=Substring($vtFieldData;$vlPosColon+2)
                  End if
                     ` Erhöhe die Feldnummer
                  $vlField:=$vlField+1
                     ` Zwischenablage enthält evtl. mehr Daten als benötigt
                  If ($vlField<=Count fields($vpTable))
                        ` Hole Typ des Feldes
                     GET FIELD PROPERTIES($1;$vlField;$vlFieldType)
                        ` Hole Zeiger auf das Feld
                     $vpField:=Field($1;$vlField)
                        ` Je nach Feldtyp kopiere bzw. kopiere nicht Text in geeigneter Art
                     Case of 
                        : (($vlFieldType=Is Alpha field ) | ($vlFieldType=Is Text ))
                           $vpField->:=$vtFieldData
                        : (($vlFieldType=Is Real ) | ($vlFieldType=Is Integer ) | ($vlFieldType=Is LongInt ))
                           $vpField->:=Num($vtFieldData)
                        : ($vlFieldType=Is Date )
                           $vpField->:=Date($vtFieldData)
                        : ($vlFieldType=Is Time )
                           $vpField->:=Time($vtFieldData)
                        : ($vlFieldType=Is Boolean )
                           $vpField->:=($vtFieldData="Yes")
                     Else 
                           ` Überspringe und ignoriere andere Felddatentypen
                  Else
                        ` Alle Felder wurden zugewiesen, verlasse die Schleife
                     $vtPasteboardData:=""
                  End if
                     ` Entferne den soeben entnommenen Text
                  $vtPasteboardData:=Substring($vtPasteboardData;$vlPosCR+Length(CR ))
               Else 
                     ` Kein Begrenzer gefunden, verlasse die Schleife
                  $vtPasteboardData:=""
               End if 
                  ` Wiederhole, solange Daten vorhanden
            Until (Length($vtPasteboardData)=0)
         Else 
            ALERT("Pasteboard enthält keine Daten für die Übertragung als Datensatz.")
      End case 
   End if 

Referenz

CLEAR PASTEBOARD, SET PICTURE TO PASTEBOARD, SET TEXT TO PASTEBOARD.

Systemvariablen

Wird BLOB Daten korrekt in der Zwischenablage angefügt, hat die Systemvariable OK den Wert 1; andernfalls hat OK den Wert 0 und es wird u.U. eine Fehlermeldung erzeugt.

Fehler verwalten

Reicht der Speicher zum Einfügen des BLOB in die Zwischenablage nicht aus, erhalten Sie den Fehler -108.


4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next