3.25 DM_FmtDefaultProc

Diese Funktion übernimmt alle anfallenden Aufgaben bei der Bearbeitung eines editierbaren Textes wie das Setzen des Formats, die Eingabeüberprüfung, die Navigation usw., sobald einem editierbaren Text ein Format gesetzt wird.

Normalerweise wird dann vom Dialog Manager automatisch diese Default-Format-Funktion aufgerufen, ohne dass die eigentliche Anwendung involviert wird.

Hat der editierbare Text aber eine eigene Format-Funktion, ruft der Dialog Manager anstatt der Default-Format-Funktion diese anwendungsspezifische Funktion auf. Diese muss dann die vom Dialog Manager geforderten Aufgaben erfüllen.

Dazu kann sie die Funktion DM_FmtDefaultProc mit einzelnen Tasks aufrufen, falls diese nicht anwendungsspezifisch geändert werden soll.

DM_boolean DML_default DM_EXPORT DM_FmtDefaultProc
(
  DM_FmtRequest *req,
  DM_FmtFormat *fmt,
  DM_FmtFormatDef **fmtDef,
  DM_FmtContent *cont,
  DM_FmtContentDef **contDef,
  DM_FmtDisplay *dpy
)

Parameter

-> DM_FmtRequest *req

Hier wird die Anforderung an die Formatierungsroutine übergeben. Dazu wird ein Strukturelement mit der Task belegt und je nach Aufgabe eine Union mit den erforderlichen Daten gefüllt (z.B. mit dem neuen Inhalt als String beim Setzen eines neuen Inhalts).

<-> DM_FmtFormat *fmt

Diese Struktur enthält Beschreibungsdaten über den Formatstring, die unabhängig von der Format-Funktion und der gewählten Formatart benötigt werden.

<-> DM_FmtFormatDef **fmtDef

Mit diesem Parameter wird eine Struktur durchgereicht, die die formatspezifischen Daten zu einem Formatstring enthält. Soll eine fremde Formatfunktion auf die Defaultformate zurückgreifen, muss sie hierfür in ihren privaten Daten einen Eintrag vorsehen und diese hier übergeben.

<-> DM_FmtContent *cont

Diese Struktur enthält Beschreibungsdaten über den zu formatierenden Inhaltsstring, die unabhängig von der Formatfunktion und der gewählten Formatart benötigt werden.

<-> DM_FmtContentDef **contDef

Mit diesem Parameter wird eine Struktur durchgereicht, die die formatspezifischen Daten zu einem Inhaltsstring enthält. Soll eine fremde Formatfunktion auf die Defaultformate zurückgreifen, muss sie hierfür in ihren privaten Daten einen Eintrag vorsehen und diese hier übergeben.

<-> DM_FmtDisplay *dpy

Diese Struktur enthält Beschreibungsdaten über den formatierten Darstellungsstring, die unabhängig von der Formatfunktion und der gewählten Formatart benötigt werden.

Beispiel

Realisierung einer Formatfunktion, die nur wenige Aufgaben selber übernimmt. Die Funktion sorgt dafür, dass der Anwender nur ein Datum eingeben kann.

/*

** Abhängig von der Cursorpostion ist die Zahl, die eingegeben

** werden kann, damit sich ein gültiges Datum ergibt.

*/

char GetMax __1(

(DM_FmtDisplay far *, dpy))

{

  char max;

 

  switch (dpy->curpos)

  {

    case 0:

      max = '3';

    break;

    case 1:

      if (dpy->string[0] == '3')

        max = '1';

      else

        max = '9';

    break;

    case 3:

      max = '1';

    break;

    case 4:

      if (dpy->string[3] == '1')

        max = '2';

      else

        max = '9';

    break;

    default:

    max = '9';

    break;

  }

  return (max);

}

 

/*

** eigentliche Formatfunktion

**

*/

DM_Boolean DML_c DM_CALLBACK My_Formatter __6(

(DM_FmtRequest far *, req),

(DM_FmtFormat far *, fmt),

(FPTR *, fmtPriv),

(DM_FmtContent far *, cont),

(FPTR *, contPriv),

(DM_FmtDisplay far *, dpy))

{

  DM_Boolean retval;

 

  switch (req->task)

  {

    /*

    ** Nur Datum im Format dd.mm.yy soll eingebbar sein

    ** Diese Funktion ist nur rudimentär realisiert,

    ** BackSpace und DEL sollten auch abgefangen werden

    */

    case FMTK_modify:

    {

      char max = GetMax(dpy);

 

      if ((!req->targs.modify.strlength

      && (dpy->curpos == dpy->length))

      || ((req->targs.modify.strlength == 1)

        && (req->targs.modify.string[0] >= '0')

        && (req->targs.modify.string[0] <= max)))

      {

        retval = DM_FmtDefaultProc(req, fmt,

            (DM_FmtFormatDef **) (FPTR) fmtPriv, cont,

             (DM_FmtContentDef **) (FPTR) contPriv, dpy);

      }

      else

        retval = FALSE;

    }

    break;

 

    default:

    /*

    ** Aufruf der Default-Formatfunktion

    */

    retval = DM_FmtDefaultProc(req, fmt, (DM_FmtFormatDef **)

        (FPTR) fmtPriv,cont,

        (DM_FmtContentDef **) (FPTR) contPriv, dpy);

    break;

  }

  return (retval);

}

Siehe auch

Ressource format