Einführung in Ressourcen

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

Version 2004 (Geändert)


Eine Ressource ist Datenmaterial jeder Art, das in einem bestimmten Format in einer Windows Datei mit der Endung .RSR oder im Ressourcefork einer Macintosh Datei gespeichert ist. Ressourcen enthalten im allgemeinen Strings, Bilder, Icons, usw.. Sie können natürlich Ihre eigenen Ressourcen erstellen und beliebige Daten darin speichern.

Datafork und Ressourcefork


Ursprünglich wurden auf Macintosh Daten und Ressourcen in derselben Datei gespeichert, bestehend aus Datafork und Ressourcefork. Das Datafork einer Macintosh-Datei entspricht der Datei unter Windows und UNIX. Das Ressourcefork einer Macintosh Datei enthält die auf Macintosh basierenden Ressourcen der Datei und hat keine direkte Entsprechung unter Windows und UNIX.

4th Dimension unterstützt zwar weiterhin diese Funktionalität, die Ressourcen werden jedoch jetzt unter Windows und auf MacOS in einer eigenen Datei gespeichert (auf MacOS in der Datafork). Auf diese Weise ist der direkte Austausch der Dateien zwischen den verschiedenen Plattformen ohne Konvertierung möglich. Erstellen Sie z.B. eine neue Datenbank, legt 4th Dimension eine Datei mit der Endung .rsr zum Speichern der Ressourcen der Strukturdatei, und eine Datei mit der Endung .4dr zum Speichern der Ressourcen der Datendatei.

Befehle zum Verwalten der Ressourcendatei (Create resource file und Open resource file) können direkt in der Datafork arbeiten.

Die auf Windows basierenden Ressourcen sind zusammen mit den anderen Daten der Datei gespeichert. In einer Windows Anwendung kann eine Datei mit der Endung .EXE sowohl Ressourcen als auch Code enthalten. Zur Wahrung der Plattformunabhängigkeit Ihrer 4D Anwendungen arbeitet 4th Dimension unter Windows und auf Macintosh mit auf Macintosh basierenden Ressourcen.

Ressourcendateien


Unabhängig von der eingesetzten Plattform ist die Strukturdatei einer 4D Datenbank nicht der einzige Dateityp mit Ressourcen. Die 4D Anwendung selbst verwendet auch Ressourcen, die in einer Datei 4D.RSR gespeichert werden.

4D Plug-Ins, z.B. 4D Write können ebenfalls Ressourcen enthalten.

Dasselbe gilt für die Datendatei einer 4D Datenbank. Sie können z.B. festlegen, dass eine Datendatei nur mit einer bestimmten Strukturdatei verwendet werden kann. Diese Operation führen Sie in den Einstellungen der Datenbank aus. Das Ergebnis ist, dass in der Struktur- und der Datendatei diesselbe WEDD Ressource ("WEDD" steht für "Heirat") angelegt wird.

Eigene Ressourcendateien erstellen

Mit den Funktionen Create resource file und Open resource file können Sie zusätzlich zu den von 4D erstellten Ressourcendateien eigene Ressourcendateien einrichten und einsetzen. Diese beiden Funktionen geben die Referenznummer der Ressourcendatei zurück, die die geöffnete Ressourcendatei eindeutig identifizieren. Diese Referenznummer entspricht der Referenznummer des Dokuments für reguläre Dateien, die die Funktionen für Systemdokumente zurückgeben, wie z.B. Open document. Alle Befehle/Funktionen für 4D Ressourcen erwarten optional eine Referenznummer der Ressourcendatei. Vergessen Sie nicht, die Ressourcendatei nach der Bearbeitung mit dem Befehl CLOSE RESOURCE FILE zu schließen.

Kette der Ressourcendateien


In einer 4D Datenbank können Sie entweder mit allen aktuell geöffneten Ressourcendateien arbeiten oder nur mit einer spezifischen Ressourcendatei.

Sie können mehrere Ressourcendateien zur selben Zeit öffnen. Das ist immer von einer 4D Datenbank aus der Fall. Hier sind folgende Dateien geöffnet:

Auf Macintosh, die Ressourcendatei des Systems

Unter Windows die Datei ASIPORT.RSR (sie enthält Teile der Macintosh Systemressourcen).

Die Ressourcendatei der 4D Anwendung

Die Ressourcendatei der Datenbankstruktur

Die Ressourcendatei der Dateidatei kann optional geöffnet sein.

Mit der Funktion Open resource file öffnen Sie Ihre eigene Ressourcendatei.

Die Liste der geöffneten Ressourcendateien hat den Namen Kette der Ressourcendatei. Es gibt zwei Wege, nach einer bestimmten Ressource zu suchen:

Sie übergeben einem Ressourcenbefehl von 4D die Referenznummer einer Ressourcendatei. Dann wird die Ressource nur in dieser Ressourcendatei gesucht.

Sie übergeben einem Ressourcenbefehl von 4D keine Referenznummer einer Ressourcendatei. Dann wird die Ressource in allen aktuell geöffneten Ressourcendateien gesucht, und zwar in umgekehrter Reihenfolge wie geöffnet, d.h. die Suche beginnt mit der zuletzt geöffneten Datei und endet mit der zuerst geöffneten Datei.

Hier ein Beispiel:

   $vhResFile:=Create resource file("Just_a_file")
   If (OK=1)
      ARRAY STRING(63;asSomeStrings;0)
      STRING LIST TO ARRAY(8;asSomeStrings;$vhResFile)
      ALERT("Größe des Array ist "+String(Arraygröße(asSomeStrings))+" Element(e).")
      STRING LIST TO ARRAY(8;asSomeStrings)
      ALERT("Größe des Array ist "+String(Arraygröße(asSomeStrings))+" Element(e).")
      CLOSE RESOURCE FILE($vhResFile)
   End if 

Beim Ausführen dieser Methode zeigt die erste Warnung "Größe des Array ist 0 Element(e)" an, die zweite "Größe des Array ist 634 Element(e)".

Der erste Aufruf:

      STRING LIST TO ARRAY(8;asSomeStrings;$vhResFile)

sucht nach der Ressource "STR#" ID=8 nur in der gerade erstellten Ressourcendatei, die mit der Funktion Create resource file geöffnet wurde. Die Datei ist neu und von daher leer. Es wird keine Ressource gefunden.

Der zweite Aufruf:

      STRING LIST TO ARRAY(8;asSomeStrings)

sucht nach der Ressource "STR#" ID=8 in allen aktuell geöffneten Ressourcendateien. Da die gerade erstellte Ressourcendatei, die mit der Funktion Create resource file geöffnet wurde, diese Ressource nicht enthält, sucht STRING LIST TO ARRAY in der Ressourcendatei der Datenbankstruktur nach dieser Ressource und dann in der Ressourcendatei von 4D. Hier findet er die Ressource und füllt dann ein Array damit.

Zusammenfassung: Wollen Sie beim Arbeiten mit Ressourcendateien auf eine bestimmte Ressource zugreifen, müssen Sie den Befehlen für 4D Ressourcen die Referenznummer der Ressource übergeben. Denn sonst geht der Befehl davon aus, daß es keine Rolle spielt, welche Datei den Ressourcen zugrundeliegt.

Ressourcentyp


Eine Ressourcendatei ist stark strukturiert. Sie enthält zusätzlich zu den Daten jeder Ressource eine Kopfzeile und eine Karte, die den Inhalt vollständig beschreibt.

Ressourcen sind nach Typen klassifiziert. Ein Ressourcentyp besteht aus einem String mit 4 Zeichen. Er berücksichtigt sowohl die Groß- und Kleinschreibung als auch diakritische Zeichen. Es besteht also ein Unterschied zwischen "Hi_!", "hi_!" und "HI_!".

Wichtig: Kleingeschriebene Ressourcentypen sind für das Betriebssystem reserviert. Schreiben Sie deshalb Ihre eigenen Ressourcentypen nicht in Kleinbuchstaben.

Im folgenden sehen Sie eine Liste der gängigen Ressourcentypen:

Eine Ressource vom Typ "STR#" enthält eine Liste von Pascal Strings. Sie heißt Stringlisten Ressource.

Eine Ressource vomTyp "STR " (Beachten Sie das Leerzeichen als viertes Zeichen) enthält einzelne Pascal Strings. Sie heißt String Ressource.

Eine Ressource vom Typ "TEXT" enthält Text ohne Begrenzung. Sie heißt Text Ressource.

Eine Ressource vom Typ "PICT" enthält ein auf Macintosh basierendes QuickDraw Bild, das Sie mit 4D unter Windows und auf Macintosh anzeigen können. Sie heißt Bild Ressource.

Eine Ressource vom Typ "cicn" enthält ein auf Macintosh basierendes farbiges Icon, das Sie mit 4D unter Windows und auf Macintosh anzeigen können. Sie heißt Farbicon Ressource. Sie können eine "cicn" Ressource mit dem Befehl SET LIST ITEM PROPERTIES z.B. einem Eintrag in einer hierarchischen Liste zuordnen.

Sie können darüberhinaus auch eigene Typen festlegen, wie z.B. "MTYP" (für "MeinTyp").

Um die Liste der aktuellen Ressourcentypen aller geöffneten Ressourcendateien bzw. einer bestimmten Ressourcendatei zu erhalten, wählen Sie den Befehl RESOURCE TYPE LIST. Um dann die Liste eines bestimmten Ressourcentyps aus diesen bzw. dieser Datei zu erhalten, wählen Sie den Befehl RESOURCE LIST. Er gibt die Nummern und Namen (siehe nächster Abschnitt) aller Ressourcen eines bestimmten Typs wieder.

Warnung: Viele Anwendungen nehmen den Ressourcentyp als Grundlage zum Arbeiten mit ihrem Inhalt. Beim Zugreifen auf die Ressource "STR#" erwarten Anwendungen zum Beispiel in der Ressource eine Stringliste. Speichern Sie deshalb KEINE inkonsistenten Daten in den Standardtypen der Ressourcen; das kann zu Systemfehlern in Ihrer 4D Anwendung oder in anderen Anwendungen führen.

Warnung: Eine Ressource ist eine stark strukturierte Datei—greifen Sie deshalb nur mit Ressourcen Befehlen darauf zu. Sie können zwar in einem Befehl wie SEND PACKET eine Referenznummer der Ressourcendatei übergeben. (Das ist formal gesehen ein 4D Zeitausdruck wie die Referenznummer des Dokuments.) Dadurch wird aber wahrscheinlich die Ressourcendatei beschädigt.

Warnung: Eine Ressourcendatei kann bis zu 2.700 Einzelressourcen enthalten. Sie sollten diese Begrenzung nicht überschreiten, da sonst die Ressourcendatei beschädigt und folglich unbrauchbar wird.

Name und Kennummer für Ressourcen


Eine Ressource hat einen Ressourcennamen. Er kann bis zu 255 Zeichen lang sein und berücksichtigt diakritische Zeichen, jedoch nicht Groß- und Kleinschreibung. Ressourcennamen sind hilfreich, da sie die Ressource beschreiben. Sie greifen jedoch über Typ und Kennummer auf die Ressource zu. Ressourcennamen sind nicht einmalig; mehrere Ressourcen können denselben Namen haben.

Eine Ressource hat eine Ressourcenkennummer (kurz, Ressourcennr oder NR). Diese NR ist einmalig innerhalb eines Ressourcentyps und einer Ressourcendatei. Zum Beispiel:

Eine Ressourcendatei kann eine Ressource "ABCD" NR=1 und eine Ressource "EFGH" NR=1 haben.

Zwei Ressourcendateien können eine Ressource mit demselben Typ und derselben Kennummer haben.

Greifen Sie über einen 4D Befehl auf eine Ressource zu, geben Sie seinen Typ und seine Kennumer an. Geben Sie nicht die dazugehörige Ressourcendatei an, gibt der Befehl die Ressource an, die er in der zuerst geprüften Ressourcendatei findet. Beachten Sie, dass die Ressourcendateien genau umgekehrt wie geöffnet geprüft werden.

Die Numerierung von Ressourcen reicht von -32.768 bis 32.767.

Wichtig: Verwenden Sie für Ihre eigenen Ressourcen nur den Bereich 15.000 bis 32.767. Verwenden Sie keine negativen Ressourcennummern, da diese für die Ressourcen des Betriebssystems reserviert sind. Der Bereich von 0 bis 14.999 ist für 4th Dimension reserviert.

Wählen Sie den Befehl RESOURCE LIST, um Kennummern und Namen eines bestimmten Ressourcentyps zu erhalten.

Wählen Sie die Funktion Get resource name, um den Namen einer einzelnen Ressource zu erhalten.

Wählen Sie den Befehl SET RESOURCE NAME, um den Namen einer einzelnen Ressource zu ändern.

Da jeder 4D Befehl optional eine Referenznummer der Ressourcendatei akzeptiert, können Sie leicht mit Ressourcen von demselben Typ und derselben Kennummer arbeiten, die in zwei verschiedenen Ressourcendateien liegen. Folgendes Beispiel kopiert alle "PICT" Ressourcen aus einer Ressourcendatei in eine andere:

      ` Öffne bestehende Ressourcendatei
   $vhResFileA:=Open resource file("")
   If (OK=1)
         `Erstelle eine neue Ressourcendatei
      $vhResFileB:=Create resource file("")
      If (OK=1)
            ` Erhalte Kennummenr- und Namenlisten aller Ressourcen vom Typ "PICT"
            ` aus der Ressourcendatei A
         RESOURCE LIST("PICT";$aiResID;$asResName;$vhResFileA)
            ` Für jede Ressource:
         For($vlElem;1;Size of array($aiResID))
            $viResID:=$aiResID{$vlElem}
               ` Lade die Ressource aus Datei A
            GET RESOURCE ("PICT";$viResID;vxResData;$vhResFileA)
               ` Wurde die Ressource geladen
            If (OK=1)
                  ` Füge und schreibe die Ressource in Datei B hinzu
               SET RESOURCE ("PICT";$viResID;vxResData;$vhResFileB)
                  ` Wurde die Ressource hinzugefügt und geladen
               If (OK=1)
                     ` Kopiere auch den Namen der Ressource
                  SET RESOURCE NAME("PICT;$viResID;$asResName{$vlElem};$vhResFileB)
                     ` Und ebenso ihre Eigenschaften 
                      (siehe nachfolgende Erläuterungen zu Ressourceneigenschaften)
                  $vlResAttr:=Get resource properties("PICT";$viResID;$vhResFileA)
                  SET RESOURCE PROPERTIES("PICT";$viResID;$vlResAttr;$vhResFileB)
               Else
                  ALERT("Die Ressource PICT ID="+String($viResID)+" ließ sich nicht hinzufügen.")
               End if
            Else
               ALERT("Die Ressource PICT ID="+String($viResID)+" ließ sich nicht laden.")
            End if
         End for
         CLOSE RESOURCE FILE($vhResFileB)
      End if
      CLOSE RESOURCE FILE($vhResFileA)
   End if

Ressourceneigenschaften


Eine Ressource hat neben Typ, Name und Kennummer weitere Eigenschaften (auch Attribute genannt). So kann sie zum Beispiel entfernbar oder nicht entfernbar sein. Dieses Attribut teilt dem Betriebssystem mit, ob eine geladene Ressource aus dem Speicher entfernt werden kann, wenn zum Zuweisen eines anderen Objektes freier Speicherplatz benötigt wird. Wie Sie im vorigen Beispiel gesehen haben, ist es beim Erstellen oder Kopieren einer Ressource wichtig, nicht nur die Ressource, sondern auch ihren Namen und die Eigenschaften zu kopieren. Weitere Informationen dazu finden Sie in der Beschreibung zur Funktion Get resource properties und dem Befehl SET RESOURCE PROPERTIES.

Ressourceninhalt verwalten


Wollen Sie eine Ressource beliebigen Typs in den Speicher laden, rufen Sie GET RESOURCE auf. Dieser Befehl gibt den Inhalt der Ressource in einem BLOB zurück.

Wollen Sie eine Ressource auf der Festplatte neu schreiben oder hinzufügen, rufen Sie SET RESOURCE auf. Dieser Befehl setzt den Inhalt der Ressource in den Inhalt des übergebenen BLOB.

Wollen Sie eine vorhandene Ressource löschen, rufen Sie DELETE RESOURCE auf.

4D verfügt für eine einfachere Verwaltung von Standard Ressourcentypen über zusätzliche Befehle, so dass Sie ein BLOB nicht erst durchlaufen müssen, um die Daten der Ressource zu entnehmen:

STRING LIST TO ARRAY füllt ein Array vom Typ String oder Text mit den Strings aus einer String Ressourcenliste.

ARRAY TO STRING LIST erstellt oder schreibt eine Stringlisten Ressource mit den Elementen eines Array vom Typ String oder Text neu.

Get indexed string gibt einen bestimmten String aus einer Stringlisten Ressource zurück.

Get string resource gibt den String aus einer String Ressource zurück.

SET STRING RESOURCE erstellt oder schreibt eine String Ressource neu.

Get text resource gibt den Text einer Text Ressource zurück.

SET TEXT RESOURCE erstellt oder schreibt eine Text Ressource neu.

GET PICTURE RESOURCE gibt das Bild einer Bild Ressource zurück.

SET PICTURE RESOURCE erstellt oder schreibt eine Bild Ressource neu.

GET ICON RESOURCE gibt eine Farbicon Ressource als Bild zurück.

Diese Befehle/Funktionen vereinfachen die Verwaltung der Standard Ressourcentypen; Sie müssen aber trotzdem mit BLOBs die Befehle GET RESOURCE und SET RESOURCE einsetzen. So ist zum Beispiel der Code:

   ALERT(Get text resource(20000))

die Verkürzung von:

   GET RESOURCE("TEXT";20000;vxData)
   If (OK=1)
      $vlOffset:=0
      ALERT(BLOB to text(vxData;Text without length;$vlOffset;BLOB size(vxData)))
   End if

4D Befehle und Ressourcen


Zusätzlich zu den hier beschriebenen Ressourcen gibt es weitere Befehle, die mit Ressourcen und Ressourcendateien arbeiten:

Die Befehle DOCUMENT TO BLOB und BLOB TO DOCUMENT können auf Macintosh das gesamte Ressourcefork einer Macintosh Datei schreiben.

Mit den Befehlen SET LIST ITEM PROPERTIES und SET LIST PROPERTIES können Sie Ressourcen vom Typ Bild- oder Farbicon den Einträgen einer Liste zuweisen oder als Erweiterungssymbole in einer Liste verwenden.

Der Befehl PLAY spielt die "snd " Ressourcen unter Windows und auf Macintosh.

Der Befehl SET CURSOR ändert das Erscheinungsbild der Maus über die Ressourcen "CURS".

Referenz

BLOB Befehle, Get component resource ID, Ressourcen und 4D Insider: Ein Beispiel, Ressourcenfehler.


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