Announcement

Collapse
No announcement yet.

Resourcenerstellung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Resourcenerstellung

    Hallo ich habe da ein Problem,
    mit dem Builder5.0 habe ich Programme geschrieben, die alle Forms und Strings in eine Datei auslagern, und auf die auch Tadellos zugegriffen werden kann.
    Bei einem größeren Projekt allerdings greift das Programm ausschliesslich auf die Standard Stringresourcen zu, nicht aber auf die in den Dateien die zb. .DEU oder .ENU heißen. Die Forms werden korrekt genommen.
    Was mache ich falsch???
    Bitte um Hilfe

  • #2
    Guten Tag Sascha,

    leider habe ich dein Problem nicht so ganz begriffen. Ich vermute, daß Du mit "Standard String Resourcen" die in BCB "eingebauten" String Resourcen meinst.

    Grundsätzlich ist es gleichgültig, wo Du Deine Strings unsterbringst, ob in separaten, also eigenen Dateien, oder in compilierten Resorce Dateien (*.RES). Leichter sind String Resourcen zu handhaben und auch die Erstellung "von Hand" und die Einbindung in Dein Projekt ist sehr einfach! Ich sende Dir hier einen kleinen Artikel von mir über dieses Thema.

    Gruß
    KHR.

    ################################################## ###############

    Resource String Dateien (*.RES) in einem C++ Builder Projekt verwenden.
    ================================================== ==========

    Es gibt einen recht einfachen Weg, Resource String Dateien in ein Borland C++ Builder Projekt einzubinden und zu verwenden. Hierzu legt man sich zunächst eine String-Tabelle in einer Text Datei an, indem man im IDE Editor mittels Objektgalerie ein Text-Objekt als neue leere Seite öffnet.
    In diesem Text-Objekt legt man nun die eigentliche String-Tabelle wie hier gezeigt an:

    STRINGTABLE
    BEGIN
    5100 "Die Datei\n %s\n wurde nicht gefunden!";
    5110 "Die Datei\n %s\nexistiert bereits!";
    5120 "Die Datei\n %s\nenthält keine Datensätze.";
    5130 "Die Datei\n %s\n ist bereits geöffnet!";
    5132 "Soll diese Datei geschlossen werden?";
    5140 "Soll die geöffnete Datei\n %s\ngeschlossen und hierfür die Datei\n %s\ngeöffnet werden?";
    ...
    ...
    ...
    END

    Die Einleitung einer String Tabelle bildet immer das Schlüsselwort STRINGTABLE gefolgt von den Schlüsselworten BEGIN und END zwischen denen die eigentlichen Tabellenzeilen stehen. Jede Tabellenzeile beginnt mit einer im Projekt einmaligen Integerzahl , gefolgt von dem eigentlichen in doppelten Anführungszeichen stehenden String in einer Zeile. Der String kann beliebige gültige Formatierungszeichen enthalten. Jede Zeile muß mit einem Simikolon ( abgeschlossen sein. Die führende Integerzahl ist die Identifikation (ID) des auf sie folgenden Strings und darf zwischen 0 und max. 65535 liegen. Die Integer sollten aufsteigend sortiert sein.

    Diese Textdatei wird unter einem zum Projekt passenden Namen mit der Dateierweiterung RC (*.RC) gespeichert.

    Einbinden der *.RC Datei in das Projekt
    Dies geschieht - wie wohl bekannt - auf sehr einfache Weise mit Hilfe der Projektverwaltung. Man fügt einfach die Datei *.RC zu seinem Projekt hinzu. Bei der nächsten Kompilierung wird nun automatisch der Borland Resourcen-Compiler im Hintergrund aufgerufen, welcher mit Hilfe der Datei *.RC eine Resourcen-Datei *.RES erstellt. Diese wird - das sie ja zum Projekt gehört - vom Linker automatisch zum Projekt hinzugebunden. Nun kann aus dem Code heraus auf die einzelnen Strings über deren jeweilige ID zugegriffen werden.

    AnsiString MsgBuff;

    if (AFilespec == FFilespec)
    {
    // Datei bereits geöffnet
    MsgBuff = AnsiString::FmtLoadStr(5130, ARRAYOFCONST((AFilespec)));
    ShowMessage(MsgBuff);
    }
    else
    { // geöffnete Datei schließen und neue Datei öffnen?
    MsgBuff = AnsiString::FmtLoadStr(5140, ARRAYOFCONST((FFilespec, AFilespec)));
    if (ShowRdsMsg(rdsConfirm, MsgBuff.c_str(), rdbYesNo) == rdrYes)
    {
    CloseFile();
    OpenFile(AFilespec);
    }
    }

    Sie sollten die freien Routinen LoadStr() oder - wenn Formatierungszeichen im String enthalten sind - FmtLoadStr() der Unit AnsiString verwenden, da die entsprechenden AnsiString-Methoden nicht zuverlässig arbeiten.
    Achtung: Beachten Sie bitte bei der Verwendung des Macros ARRAYOFCONST, daß - im Gegensatz zu den Erläuterungen in der Borland Hilfe die innerhalb der Klammern stehenden Parameter noch zusätzlich geklammert werden müssen (siehe die Anzahl der Klammern im vorstehenden Codefragment).

    Die Verwendung von Defines
    Die String-ID sind leider nicht sehr aussagekräftig. Aus diesem Grunde ist e

    Comment


    • #3
      Hallo Sascha,

      die Übertragung meines Artikels ist gründlich schief gegangen. Ich versuche es nun einmal in HTML:

      ################################################## ###################

      <HTML>

      <HEAD>
      <TITLE>Resource String Dateien</TITLE>
      </HEAD>

      <BODY>

      <P><B><FONT FACE="Times New Roman" SIZE="5">Resource String Dateien (*.RES) in
      einem C++ Builder Projekt verwenden.</FONT></B></P>
      <P><FONT FACE="Times New Roman" SIZE="3">Es gibt einen recht einfachen Weg,
      Resource String Dateien in ein Borland C++ Builder Projekt einzubinden und zu
      verwenden. Hierzu legt man sich zunächst eine String-Tabelle in einer Text
      Datei an, indem man im IDE Editor mittels Objektgalerie ein Text-Objekt als neue
      leere Seite öffnet.</FONT></P>
      <P><FONT FACE="Times New Roman" SIZE="3">In diesem Text-Objekt legt man nun die
      eigentliche String-Tabelle wie hier gezeigt an:</FONT></P>
      <P><FONT FACE="Courier New" SIZE="2">STRINGTABLE<BR>
      BEGIN<BR>
      &nbsp; <SPAN STYLE="color:0000FF">5100</SPAN> &nbsp; <SPAN STYLE="color:0000FF">&quot;Die
      Datei\n %s\n wurde nicht gefunden!&quot;</SPAN>;<BR>
      &nbsp; <SPAN STYLE="color:0000FF">5110</SPAN> &nbsp; <SPAN STYLE="color:0000FF">&quot;Die
      Datei\n %s\nexistiert bereits!&quot;</SPAN>;<BR>
      &nbsp; <SPAN STYLE="color:0000FF">5120</SPAN> &nbsp; <SPAN STYLE="color:0000FF">&quot;Die
      Datei\n %s\nenthält keine Datensätze.&quot;</SPAN>;<BR>
      &nbsp; <SPAN STYLE="color:0000FF">5130</SPAN> &nbsp; <SPAN STYLE="color:0000FF">&quot;Die
      Datei\n %s\n ist bereits geöffnet!&quot;</SPAN>;<BR>
      &nbsp; <SPAN STYLE="color:0000FF">5132</SPAN> &nbsp; <SPAN STYLE="color:0000FF">&quot;Soll
      diese Datei geschlossen werden?&quot;</SPAN>;<BR>
      &nbsp; <SPAN STYLE="color:0000FF">5140</SPAN> &nbsp; <SPAN STYLE="color:0000FF">&quot;Soll
      die geöffnete Datei\n %s\ngeschlossen und hierfür die Datei\n %s\ngeöffnet
      werden?&quot;</SPAN>;<BR>
      &nbsp; ...<BR>
      &nbsp; ...<BR>
      &nbsp; ...<BR>
      END<BR>
      <BR>
      </FONT>Die Einleitung einer String Tabelle bildet immer das Schlüsselwort
      STRINGTABLE<FONT FACE="Times New Roman" SIZE="3"> gefolgt von den
      Schlüsselworten BEGIN und END zwischen denen die eigentlichen Tabellenzeilen
      stehen. Jede Tabellenzeile beginnt mit einer im Projekt einmaligen Integerzahl ,
      gefolgt von dem eigentlichen in doppelten Anführungszeichen stehenden String <U>in
      einer Zeile</U>. Der String kann beliebige gültige Formatierungszeichen
      enthalten. Jede Zeile muß mit einem Simikolon ( abgeschlossen sein. Die
      führende Integerzahl ist die Identifikation (ID) des auf sie folgenden Strings
      und darf zwischen 0 und max. 65535 liegen. Die Integer sollten aufsteigend
      sortiert sein.<BR>
      <BR>
      Diese Textdatei wird unter einem zum Projekt passenden Namen mit der
      Dateierweiterung RC (*.RC) gespeichert.</FONT></P>
      <P>&nbsp;</P>
      <P><B><FONT FACE="Times New Roman" SIZE="3">Einbinden der *.RC Datei in das
      Projekt</FONT></B></P>
      <P><FONT FACE="Times New Roman" SIZE="3">Dies geschieht - wie wohl bekannt - auf
      sehr einfache Weise mit Hilfe der Projektverwaltung. Man fügt einfach die Datei
      *.RC zu seinem Projekt hinzu. Bei der nächsten Kompilierung wird nun
      automatisch der Borland Resourcen-Compiler im Hintergrund aufgerufen, welcher
      mit Hilfe der Datei *.RC eine Resourcen-Datei *.RES erstellt. Diese wird - das
      sie ja zum Projekt gehört - vom Linker automatisch zum Projekt hinzugebunden.
      Nun kann aus dem Code heraus auf die einzelnen Strings über deren jeweilige ID
      zugegriffen werden.</FONT></P>
      <P><FONT FACE="Courier New" SIZE="2">&nbsp;&nbsp;&nbsp; AnsiString MsgBuff;<BR>
      <BR>
      &nbsp;&nbsp;&nbsp; <SPAN STYLE="color:FF0000"><B>if</B></SPAN> (AFilespec ==
      FFilespec)<BR>
      &nbsp;&nbsp;&nbsp; {<BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN STYLE="color:0000FF"><I>// Datei bereits geöffnet</I></SPAN><BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBuff = AnsiString::FmtLoadStr(<SPAN STYLE="color:0000FF">5130</SPAN>,
      ARRAYOFCONST((AFilespec)));<BR>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowMessage(MsgBuff);<BR>
      &nbsp;&nbsp;&nbsp; }&lt

      Comment

      Working...
      X