3.36 DM_GetVectorValue

Mit Hilfe dieser Funktion können Attribute erfragt werden, die bei einem Objekt mehrfach vorkommen, sog. "vektorielle Attribute". Zusätzlich können über diese Funktion benutzerdefinierte Attribute erfragt werden.

Im Gegensatz zum normalen DM_GetValue werden bei diesem Aufruf Strukturen vom Dialog Manager aufbereitet und Speicherplatz allokiert. Dieser muss dann anschließend unbedingt mit Hilfe der Funktion DM_FreeVectorValue wieder freigegeben werden.

Hinweis

Bei Verwendung in Funktionen, welche Records als Parameter enthalten, beachten Sie bitte die Hinweise im Kapitel „Behandlung von String-Parametern“ und das Kapitel „Hinweis bei Verwendung von DM-Funktionen“ im Handbuch „C-Schnittstelle - Grundlagen“.

DM_Boolean DML_default DM_EXPORT DM_GetVectorValue
(
  DM_ID objectID,
  DM_Attribute attr,
  DM_Value *firstindex,
  DM_Value *lastindex,
  DM_VectorValue **values,
  DM_Options options
)

Parameter

-> DM_ID objectID

Dieser Parameter beschreibt das Objekt, dessen Attribut Sie erfragen möchten.

-> DM_Attribute attr

Dieser Parameter bezeichnet das Attribut, das erfragt werden soll.

-> DM_Value *firstindex

Mit Hilfe dieses Parameters wird gesteuert, welcher Bereich des Inhalts durch diese Funktion erfragt werden soll. Dabei wird in diesem Parameter der Startpunkt des Bereichs definiert. Das bedeutet bei einem eindimensionalen Attribut, dass der Typ in der DM_Value-Struktur auf DT_integer gesetzt und der Integer-Wert in der Union mit dem Startwert belegt wird. Bei einem zweidimensionalen Attribut bedeutet das, dass der Typ in der DM_Value-Struktur auf DT_index gesetzt und der Index-Wert in der Union mit dem Startwert belegt wird. Hierbei wird in index.first die Zeile, in index.second die Spalte eingetragen.

Anmerkung

Wenn dieser Parameter ein NULL-Pointer ist, hat der Startpunkt folgende Defaultwerte:

listbox

integer = 1

poptext

integer = 1

tablefield

index.first = 1, index.second = 1

treeview

Integer = 1

-> DM_Value *lastindex

Mit Hilfe dieses Parameters wird gesteuert, welcher Bereich des Inhalts durch diese Funktion erfragt werden soll. Dabei wird in diesem Parameter der Endpunkt des Bereichs definiert. Das bedeutet für ein eindimensionales Attribut, dass der Typ in der DM_Value-Struktur auf DT_integer gesetzt und der Integer-Wert in der Union mit dem Endwert belegt wird. Für ein zweidimensionales Attribut bedeutet das, dass der Typ in der DM_Value-Struktur auf DT_index gesetzt und der Index-Wert in der Union mit dem Endwert belegt wird. Hierbei wird in index.first die Zeile, in index.second die Spalte eingetragen.

Anmerkung

Wenn dieser Parameter ein NULL-Pointer ist, hat der Endpunkt folgende Defaultwerte:

listbox

integer = Object.itemcount

poptext

integer = Object.itemcount

tablefield

index.first = object.rowcount, index.second = object.colcount

treeview

Integer = Object.itemcount

<- DM_VectorValue **values

Dieser Parameter ist ein Zeiger auf die Werte, die erfragt werden sollen. Über das Feld type in der DM_VectorValue-Struktur wird gesteuert, welchen Datentyp die einzelnen Werte haben. Über das Feld count in der DM_VectorValue-Struktur wird gesteuert, wie viele Werte in dem Vektor enthalten sind. Die Felder type und count werden durch den Funktionsaufruf ausgeführt.

-> DM_Options options

Mit Hilfe dieses Parameters wird gesteuert, in welcher Form Texte vom Dialog Manager aus zurückgeliefert werden, falls das entsprechende Attribut vom Typ Text ist:

Option

Bedeutung

DMF_GetMasterString

Diese Option bedeutet, dass bei textuellen Attributen der String in der Entwicklungssprache zurückgegeben werden soll, unabhängig davon, mit welcher Sprache der Benutzer gerade arbeitet.

DMF_GetLocalString

Diese Option bedeutet, dass bei textuellen Attributen der String in der aktuell eingestellten Sprache zurückgegeben werden soll.

DMF_GetTextID

Diese Option bedeutet, dass bei textuellen Attributen der String als TextID zurückgegeben werden soll. Diese ist dann sinnvoll, wenn der Text einem anderen Objekt zugewiesen werden soll.

DMF_DontFreeLastStrings

Normalerweise werden Strings in einem temporären Puffer an die Anwendung übergeben, der bis zum nächsten Aufruf an den Dialog Manager erhalten bleibt. Sollen Strings länger in der Anwendung gültig sein, muss diese Option DMF_DontFreeLastStrings gesetzt werden. Der Speicher wird erst dann wieder freigegeben, wenn ein Aufruf an eine DM-Funktion ohne diese Option erfolgt und dabei ein String vom DM an die Anwendung zurückgegeben wird.

DMF_UseStringBuffer

Der temporäre Puffer für Strings wird genutzt.

Die Freigabe von Strings erfolgt frühestens bei Aufruf einer DM-Funktion ohne gesetzte DMF_DontFreeLastStrings-Option.

Rückgabewert

TRUE

Das Attribut konnte erfolgreich erfragt werden.

FALSE

Das Attribut ist für das Objekt nicht zulässig.

Hinweis zur Abfrage des Attributs .format mit DM_GetVectorValue()

Es ist zu beachten, dass DM_GetVectorValue() bei der Abfrage von .format die Formatdefinition nur bei Verwendung von Formatressourcen zurückliefern kann. Bei Formatdefinitionen per Formatstring oder Formatfunktion wird Null zurückgeliefert. Daher wird die Nutzung von Formatressourcen empfohlen.

Mit den Optionen DMF_GetMasterString und DMF_GetLocalString erhält man einen Formatstring wie bei einer Formatdefinition per Formatstring.

Damit entsprechen die zurück gelieferten Werte der Funktion DM_GetVectorValue() denen der Funktion DM_GetValueIndex() bzw. eines getvalue() in der Regelsprache.

Beispiel

Abfrage des Inhalts eines Tablefields mit 5 Spalten zeilenweise:

/*

*write the content of a tablefield to a file

*the file format is described above

*/

DM_Boolean DML_default DM_ENTRY SaveTable_ _2(

(DM_ID, Table),

(char *, filename))

{

    DM_boolean retval = FALSE;

    DM_VectorValue *vector;

 

    if (DM_GetVectorValue (table, AT_field, (DM_Value *) 0,

        (DM_Value *) 0, &vector, 0))

    {

        FILE *f;

 

        if ((f = fopen(filename, "w")))

        {

          int vpos = 0;

          int i;

          retval = TRUE;

          while ((vpos + 5) < vector->count)

          {

              DM_boolean ok = TRUE;

              for (i=0; i<5, i++)

                  if (!vector->vector.stringPtr[vpos+i]

                && !*vector->vector.stringPtr[vposi])

                    ok = FALSE;

            if (ok)

                for (1=0, i<5; i++)

                {

                fputs(vector->vector.stringPtr[vpos+i], f);

                    putc((i<4) ? ´ ´ : ´\n´, f);

                vpos += 5;

                }

          }

          fclose(f);

 

          DM_FreeVectorValue(vector,0);

    }

    return retval;

}

Siehe auch

Objekte listbox, poptext, tablefield, treeview

Kapitel „Benutzerdefinierte Attribute“ im Handbuch „Benutzerdefinierte Attribute und Methoden“