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:
integer = 1 |
|
integer = 1 |
|
index.first = 1, index.second = 1 |
|
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:
integer = Object.itemcount |
|
integer = Object.itemcount |
|
index.first = object.rowcount, index.second = object.colcount |
|
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:
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“