Einführung in Ressourcen

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

Version 11 (Geändert)


Angepasste Arbeitsweise


Die Ressourcen-Verwaltung hat sich in 4D ab Version 11 geändert. Gemäß den Apple-Richtlinien, die auch in den neuesten Mac OS Versionen zum Tragen kommen, ist das Konzept des Arbeitens mit Res-sourcen überholt und wird nach und nach aufgegeben. Es wurden neue Funktionalitäten eingeführt, um die bisher von Res-sourcen abgedeckten Anforderungen zu übernehmen: XLIFF Dateien zum Übersetzen von Text, Bilder im Format .png, etc. Ressource-Dateien werden bevorzugt durch standardmäßige Dateitypen ersetzt. 4D unterstützt diese Entwicklung und bietet neue Werkzeuge, um Übersetzungen der Datenbank zu verwalten, behält aber gleichzeitig die Kompatibilität zu vorhandenen Systemen bei.

Kompatibilität vorhandener Ressourcen

Zur Wahrung der Kompatibilität und um die schrittweise Anpassung vorhandener Anwendungen zu ermöglichen, bleibt die bisherige Arbeitsweise mit Ressourcen in 4D v11 bestehen. Es gibt jedoch ein paar wichtige Unterschiede:

Zum gegenwärtigen Zeitpunkt unterstützt 4D weiterhin Ressource Dateien und das Öffnen mehrerer Ressource Dateien. Die .rsr oder .4dr Dateien konvertierter Datenbanken werden weiterhin automatisch geöffnet. Eigene Ressource Dateien können über Befehle aus diesem Kapitel geöffnet werden.

Aufgrund der Weiterentwicklung der internen Architektur ist es jedoch nicht länger möglich, auf die Ressourcen der 4D Anwendung oder des Systems direkt zuzugreifen und zwar weder über Befehle aus diesem Kapitel noch über dynamische Referenzen. Manche Entwickler verwenden interne Ressourcen von 4D für ihre Oberfläche, z.B. Ressourcen mit den Monatsnamen oder Ressourcen der Programmiersprache. Diese Praxis wurde bisher schon nicht empfohlen und ist jetzt technisch nicht mehr möglich. In den meisten Fällen lassen sich anstelle interner Ressourcen andere Elemente verwenden, z.B. Konstanten, Befehle der Programmiersprache. Um die Auswirkung dieser Änderung auf vorhandene Datenbanken zu begrenzen, wurde ein Substitutionssystem eingerichtet, das die am häufigsten verwendeten Ressourcen quasi zu externen Ressourcen macht. Trotzdem raten wir dringend, konvertierte Datenbanken abzuändern und alle Aufrufe interner 4D Ressourcen daraus zu entfernen.

Mit in 4D v11 erstellte Datenbanken enthalten standardmäßig keine .RSR (Struktur Ressourcen) und .4DR (Daten Ressourcen) Dateien.

Neue Vorgehensweise bei Ressourcen

In 4D v11 ist der Begriff "Ressourcen" jetzt im weiteren Sinne zu verstehen als "Dateien, die zur Übersetzung von Oberflächen der Anwendung notwendig sind."

Die neue Architektur mit Ressourcen basiert auf einem Ordner mit Namen Resources, der neben der Strukturdatei der Datenbank liegen muss (.4db oder .4dc). Dieser Ordner wird nicht standardmäßig ange-legt; Sie müssen ihn anlegen, wenn Ihre Datenbank Ressourcen verwendet und hier alle Dateien ablegen, die zur Übersetzung oder Anpassung der Anwendungsoberfläche notwendig sind. Das sind Bilddateien, Textdateien, XLIFF-Dateien, usw.

Er kann auch "frühere Generationen" von Ressource Dateien der Datenbank enthalten (.rsr Dateien). Beachten Sie jedoch, dass diese Dateien nicht mehr automatisch geladen werden; Sie müssen diese mit Standardbefehlen zum Verwalten von 4D Ressourcen öffnen. 4D verwendet automatische Abläufe beim Arbeiten mit dem Inhalt die-ses Ordners, insbesondere zum Verwalten von XLIFF Dateien. Weitere Informationen dazu finden Sie im Handbuch 4D Designmodus. Die beiden Befehle Get indexed string und STRING LIST TO ARRAY könnendie Vorteile dieser Vorgehensweise nutzen.

Ressourcen-Verwaltung (bisheriges Vorgehen)


Hinweis zur Kompatibilität: Die traditionelle Ressourcen-Verwaltung wird in 4D schrittweise aufgegeben (siehe oben). Für eine neue Datenbank sollten Sie jetzt die XLIFF Architektur zugrundelegen oder Standarddateien verwenden.

Was ist eine Ressource?

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.

4D 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.

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 4D unter Windows und auf Macintosh mit auf Macintosh basierenden Ressourcen.

Ressourcendateien


In Datenbanken, die mit 4D vor Version 11 erstellt wurden, hat 4D automatisch eine rsr.Datei für die Ressourcen der Strukturdatei und eine .4dr Datei für die Ressourcen der Datendatei erstellt. 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.

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.

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;UTF8 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, Ressourcenfehler (-196 -> -1).


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