<HTML>
<HEAD>
  <!-- Created by AOLpress/1.2 -->
  <TITLE>Fu&szlig;form Schnittstelle zu DANCE - der Tanzfigurendatenbank</TITLE>
</HEAD>
<BODY>
<H2 ALIGN=Center>
  Schnittstelle der Fu&szlig;form-DLL f&uuml;r <BR>
  <BIG><BIG><A HREF="http://home.t-online.de/home/Bader.Markus/dance.htm">DANCE
  - die Tanzfigurendatenbank</A></BIG></BIG>
</H2>
<P>
Seit DANCE 1.5a ist es m&ouml;glich, statt der vorgegebenen Fu&szlig;formen
eigene zu definieren, indem eine neue Fu&szlig;-Darstellungs-Prozedur &uuml;ber
eine DLL eingebunden wird. Damit verbunden ist eine Umdefinition der
verf&uuml;gbaren Schrittarten m&ouml;glich.
<UL>
  <LI>
    <A HREF="#rohbau">Rohbau f&uuml;r eine Fu&szlig;form-DLL in Delphi</A>
  <LI>
    <A HREF="#einbindung">Einbindung der Fu&szlig;form-DLL in eine DNC-Datei</A>
</UL>
<P>
DANCE - die Tanzfigurendatenbank l&auml;uft relativ stabil. Dies mu&szlig;
mit fremdem Code nicht mehr unbedingt der Fall sein, auch wenn ich Fehleingaben
so weit wie m&ouml;glich ausfiltere.
<P>
  <HR>
<P>
<A NAME="rohbau"><!-- --></A><BIG><BIG>Der Aufbau einer Fu&szlig;form-DLL
(in Delphi) ist folgenderma&szlig;en:</BIG></BIG>
<P>
<CODE><SMALL>library Dncfform;<BR>
uses wintypes,winprocs;</SMALL></CODE> <FONT COLOR="Lime"><I>{Notwendige
Units werden eingebunden}</I></FONT>
<P>
<CODE><SMALL>type<BR>
&nbsp; bildschirm_koordinaten_funktion = function (r : real) :
longint;</SMALL></CODE>
<P>
<CODE><SMALL>var<BR>
&nbsp; xb,yb : bildschirm_koordinaten_funktion;</SMALL></CODE>
<P>
<CODE><SMALL>function dummy_xb(r : real) : longint; begin dummy_xb := trunc(r);
end;<BR>
function dummy_yb(r : real) : longint; begin dummy_yb := trunc(r);
end;</SMALL></CODE>
<P>
<FONT COLOR="Lime"><I>{Funktion um den Inhalt der Schrittartenscrollboxen
zu &auml;nder}</I></FONT><BR>
<A NAME="proc_modify1"><!-- --></A><CODE><SMALL><A HREF="#proc_modify2">function
DANCE_ModidyString : string;</A> export; <BR>
begin<BR>
&nbsp; DANCE_ModidyString := 'Normaler Schritt/H&uuml;pfen/';<BR>
end;</SMALL></CODE>
<P>
<FONT COLOR="Lime"><I>{Prozedure, die die &nbsp;Adressen der
Koordinaten-Funktionen von DANCE ausliest}</I></FONT><BR>
<A NAME="proc_remote1"><!-- --></A><CODE><SMALL><A HREF="#proc_remote2">procedure
DANCE_RemoteProcedure(x,y : tfarproc);</A> export;<BR>
begin try @xb := x; @yb := y; except xb := dummy_xb; yb := dummy_yb; end;
end;</SMALL></CODE>
<P>
<FONT COLOR="Lime"><I>{Kernst&uuml;ck der DLL - die
Zeichenroutine}</I></FONT><BR>
<A NAME="proc_show1"><!-- --></A><CODE><SMALL><A HREF="#proc_show2">procedure
DANCE_MyShowFuss(flaeche : hdc; paar,taenzer,fuss : byte; x,y,w : word;
schrittart : byte);</A> export;<BR>
begin<BR>
&nbsp; try<BR>
<BR>
&nbsp; &nbsp;</SMALL></CODE><FONT COLOR="Lime"><I>{Hier stehen dann die
eigentlichen Zeichenfunktionen}</I></FONT>
<P>
<CODE><SMALL><BR>
&nbsp; except<BR>
&nbsp; end;<BR>
end;</SMALL></CODE>
<P>
<CODE><SMALL>exports<BR>
&nbsp; DANCE_MyShowFuss &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;index 1,<BR>
&nbsp; DANCE_RemoteProcedure &nbsp; &nbsp; index 2,<BR>
&nbsp; DANCE_ModidyString &nbsp; &nbsp; &nbsp; &nbsp;index 3;</SMALL></CODE>
<P>
<CODE><SMALL>begin<BR>
&nbsp; xb := dummy_xb; yb := dummy_yb;<BR>
end.</SMALL></CODE>
<P>
<P>
Da in dieser Funktion keine Delphi spezifischen Befehle verwendet werden,
k&ouml;nnen auch andere Programmiersprachen f&uuml;r die Erstellung der DLL
verwendet werden. Ich habe es jedoch nur mit Hilfe dieses Ger&uuml;stes unter
Delphi 1.0 getestet. Da DANCE ein 16bit Programm ist, sollte dies auch f&uuml;r
die Fu&szlig;form-DLLs zutreffen.
<P>
  <HR>
<P>
<A NAME="proc_koord2"><!-- --></A><CODE><SMALL>type<BR>
&nbsp; bildschirm_koordinaten_funktion = function (r : real) :
longint;</SMALL></CODE>
<P>
x<CODE><SMALL>b,yb : bildschirm_koordinaten_funktion;</SMALL></CODE>
<P>
xb ( ) und yb ( ) sind zwei Funktionen, die aus Tanzfl&auml;chenkoordinaten
die Koordinaten auf der Zeichenfl&auml;che berechnen. Dazu m&uuml;ssen sie
&uuml;ber die Funktoin <A HREF="#proc_remote2">DANCE_RemoteProcedure </A>an
DANCE angebunden werden. Dies geschieht beim Laden der DLL automatisch.&nbsp;
<P>
<A NAME="proc_modify2"><!-- --></A><CODE><SMALL><A HREF="#proc_modify1">function
DANCE_ModidyString : string;</A> export;</SMALL></CODE>
<P>
Mit Hilfe dieser Funktion k&ouml;nnen die Eintr&auml;ge in den
Schrittarten-Comboboxen ver&auml;ndert und damit den Darstellungen in der
DLL angepa&szlig;t werden. Diese Funktion wird ebenfalls beim Einbinden der
DLL aufgerufen und mu&szlig; einen String zur&uuml;ckgeben, der die verschiedenen
Schrittarten - getrennt durch "/" &nbsp;- enth&auml;lt.
<P>
<A HREF="#proc_remote1" NAME="proc_remote2"><!-- --><CODE><SMALL>procedure
DANCE_RemoteProcedure(x,y : tfarproc);</SMALL></CODE></A><CODE><SMALL>
export;</SMALL></CODE>
<P>
Diese Prozedur wird beim Einbinden der DLL einmal aufgerufen, um den Funktionen
<A HREF="#proc_koord2">xb und xb </A>der DLL die Adressen im DANCE Hauptmodul
zu &uuml;bergeben.
<P>
<A HREF="#proc_show1" NAME="proc_show2"><!-- --><CODE><SMALL>procedure
DANCE_MyShowFuss(flaeche : hdc; paar,taenzer,fuss : byte; x,y,w : word;
schrittart : byte);</SMALL></CODE></A><CODE><SMALL> export;<BR>
<BR>
</SMALL></CODE>Die Funktion <CODE><SMALL>DANCE_MyShowFuss</SMALL></CODE>
ist das Kernst&uuml;ck der Fu&szlig;form-DLL. Sie hat folgende
&Uuml;bergabeparameter:<BR>
<TABLE BORDER CELLPADDING="2">
  <TR>
    <TD>
      flaeche
    </TD>
    <TD>
      Der Parameter, der als Zeichenfl&auml;che &uuml;bergeben wird ist ein windows
      &uuml;bliches HDC-Handle, auf das mit GDI Funktionen gezeichnet werden kann.
    </TD>
  </TR>
  <TR>
    <TD>
      paar
    </TD>
    <TD>
      Dieser &Uuml;bergabeparamter ist im Moment immer gleich 1
    </TD>
  </TR>
  <TR>
    <TD>
      taenzer
    </TD>
    <TD>
      Der Parameter taenzer kann die Werte 1 (= Herr) oder 2 (= Dame) annehmen
    </TD>
  </TR>
  <TR>
    <TD>
      fuss
    </TD>
    <TD>
      Der Parameter fuss kann die Werte 1(= linker Fu&szlig;) oder 2 (= rechter
      Fu&szlig;) annehmen
    </TD>
  </TR>
  <TR>
    <TD>
      x
    </TD>
    <TD>
      x ist die x-Koordinate des &uuml;bergebenen Fu&szlig;es auf der Tanzfl&auml;che
      in Millimeter und kann zwischen 0 und 1200 variieren. Die Umrechnung auf
      Koordinaten auf der Zeichenfl&auml;che geschieht mit Hilfe der Funktion xb(
      )
    </TD>
  </TR>
  <TR>
    <TD>
      y
    </TD>
    <TD>
      y ist die y-Koordinate des &uuml;bergebenen Fu&szlig;es auf der Tanzfl&auml;che
      in Millimeter und kann zwischen 0 und 1200 variieren. Die Umrechnung auf
      Koordinaten auf der Zeichenfl&auml;che geschieht mit Hilfe der Funktion yb(
      )
    </TD>
  </TR>
  <TR>
    <TD>
      w
    </TD>
    <TD>
      w ist er Drehwinkel des &Uuml;bergebenen Fu&szlig;es im Gradma&szlig; (!).
      0 Grad entspricht der Ausrichtung des Fu&szlig;es nach oben.
    </TD>
  </TR>
  <TR>
    <TD>
      schrittart
    </TD>
    <TD>
      <TABLE CELLPADDING="2">
	<TR>
	  <TD>
	    &lt; 100 &nbsp; &nbsp;
	  </TD>
	  <TD>
	    Ist Schrittart kleiner 100, so entspricht dieser Index der Stelle der
	    gew&auml;hlten in der Schrittarten-Combobox. ( 0 = "Keine Angabe",....)
	  </TD>
	</TR>
	<TR>
	  <TD>
	    = 100
	  </TD>
	  <TD>
	    Position des Fu&szlig;es in der Animierungsphase wurde &uuml;bergeben
	  </TD>
	</TR>
	<TR>
	  <TD>
	    = 101
	  </TD>
	  <TD>
	    vorhergehende Position des Fu&szlig;es wurde &uuml;bergeben
	  </TD>
	</TR>
	<TR>
	  <TD>
	    = 102
	  </TD>
	  <TD>
	    nachfolgende Postione des Fu&szlig;es wurde &uuml;bergeben
	  </TD>
	</TR>
      </TABLE>
    </TD>
  </TR>
</TABLE>
<P>
  <HR>
<P>
<A NAME="einbindung"><!-- --></A><BIG><BIG>Einbindung der
Fu&szlig;form-DLL</BIG></BIG>
<P>
Die Einbindung der Fu&szlig;form-DLL in eine DNC-Datei ist denkbar einfach.
Die Anweisung
<P ALIGN=Center>
<CODE>\fussform_dll{&lt;Name der DLL&gt;}</CODE>
<P>
mu&szlig; in der DNC Datei vor "<CODE>\schritt{0}</CODE>" einf&uuml;gt werden.
Der Name der DLL wird in den Klammern ohne Anf&uuml;hrungszeichen o.&auml;.
angegeben z.B. <CODE>\fussform_dll{ffdemo.dll}</CODE>
<P>
  <HR>
<P>
Die Fu&szlig;form-DLL ist noch in der Testphase. Daher ist diese
Schnittstellenbeschreibung auf etwas kurz gehalten. Ein kleine Demotanzfigur
wird es demn&auml;chst geben.
<P>
  <HR>
<P>
<CITE><A HREF="http://home.t-online.de/home/Bader.Markus">Markus Bader</A>
&nbsp; *** &nbsp; Bader.Markus@t-online.de</CITE>
</BODY></HTML>
