Seite 1 von 1

#command #translate [ERLEDIGT]

Verfasst: Di, 03. Jan 2006 10:23
von Manfred
Hi,

ich weiß, es mag sicherlich blöde klingen, aber ich habe mir vorhin die Beschreibung nochmals durchgelesen.

Ja....

Irgendwie finde ich keine Anwendung dafür. Es ist zwar schön und nett zu sehen, was Alaska damit macht, aber....

Kann mir hier vielleicht jemand einmal auf die Sprünge helfen und meine grauen Zellen ein wenig einfärben?

Was wäre damit zu machen, was einen wirklich umhaut? Ich habe es nicht wirklich kapiert, was außer den Beispielen noch damit anzustellen wäre, was hilft, oder vereinfacht. Vor allen Dingen, wo und wie man dann diese Commands oder Translations später als Ergebnis einsetzt.

Verfasst: Di, 03. Jan 2006 13:01
von Tom
Hallo, Manfred.

#command und #translate erlauben es (zum Beispiel), befehlsorientiert (alte Clipper-Syntax) zu arbeiten. Der Unterschied zwischen beiden Befehlen besteht darin, daß #command komplette Befehlszeilen übersetzt, wohingegen #translate auch innerhalb von Anweisungen arbeitet. Ein gutes Beispiel für die Mächtigkeit dieser Funktionalität ist das Tool eXPress++, über das wir gerade im 3rd-Party-Bereich reden. Es macht aus solchen Zeilen:

Code: Alles auswählen

@ x,y DCSAY 'Name' GET mydb->name PICTURE "XXXXXXXX" usw.
relativ komplexen, funktionsorientierten Code, der aber kaum so zu erstellen bzw. zu warten wäre:

Code: Alles auswählen

#command  @ <nSayRow> [,<nSayCol>] DCSAY [<cText>]                          ;
                GET <uVar>                                                  ;
                [GETPOS <nGetRow> [,<nGetCol>] ]                            ;
                [DATALINK <bLink>]                                          ;
                [SAYVAR <uSayVar>]                                          ;
                [<color:COLOR,SAYCOLOR> <ncSayFgC> [,<ncSayBgC>] ]          ;
                [GETCOLOR <ncGetFgC> [,<ncGetBgC>] ]                        ;
                [OPTION <option>]                                           ;
                [<lGraString:GRASTRING>] [_GRASTRING <_grastring>]          ;
                [SAYSIZE <nSayWidth> [,<nSayHeight>]]                       ;
                [GETSIZE <nGetWidth> [,<nGetHeight>]]                       ;
                [PARENT <oParent>]                                          ;
                [PARENTID <cPID>]                                           ;
                [MESSAGE <cMsg> [INTO <oMsg>]]                              ;
                [VALID <bValid>]                                            ;
                
( ... )

  =>                                                                        ;
   AADD( DCGUI_GETLIST, DC_GetTemplate(GETLIST_SAY, XBPSTATIC_TYPE_TEXT) )  ;
     ;DC_GetListSet(DCGUI_GETLIST,cGETLIST_CAPTION,<cText>)                 ;
    [;DC_GetListSet(DCGUI_GETLIST,bGETLIST_VAR,                             ;
              DC_GetAnchorCB(@<uSayVar>,'C'))]                              ;
    [;DC_GetListSet(DCGUI_GETLIST,nGETLIST_STARTROW,<nSayRow>)]             ;
    [;DC_GetListSet(DCGUI_GETLIST,nGETLIST_STARTCOL,<nSayCol>)]             ;
    [;DC_GetListSet(DCGUI_GETLIST,nGETLIST_WIDTH,<nSayWidth>)]              ;
    [;DC_GetListSet(DCGUI_GETLIST,nGETLIST_HEIGHT,<nSayHeight>)]            ;
    [;DC_GetListSet(DCGUI_GETLIST,cGETLIST_FONT,<cSayFont>)]                ;
    [;DC_GetListSet(DCGUI_GETLIST,cGETLIST_TOOLTIP,<cSayToolTip>)]          ;
    [;DC_GetListSet(DCGUI_GETLIST,cGETLIST_MESSAGE,{<cMsg>,nil})]           ;
    [;DC_GetListSet(DCGUI_GETLIST,cGETLIST_MESSAGE,                         ;
         DC_GetAnchorCB(@<oMsg>,'O'),2)]                                    ;
    [;DC_GetListSet(DCGUI_GETLIST,xGETLIST_CARGO,<xSayCargo>)]              ;
    [;DC_GetListSet(DCGUI_GETLIST,aGETLIST_PRESENTATION,<aSayPres>)]        ;
    [;DC_GetListSet(DCGUI_GETLIST,xGETLIST_OPTIONS,{<nSayOpt>})]            ;
    [;DC_GetListSet(DCGUI_GETLIST,aGETLIST_COLOR,{<ncSayFgC>,<ncSayBgC>})]  ;
    [;DC_GetListSet(DCGUI_GETLIST,bGETLIST_GROUP,                           ;
          DC_GetAnchorCB(@<oSayObject>,'O'))]                               ;
    [;DC_GetListSet(DCGUI_GETLIST,bGETLIST_PARENT,                          ;
          DC_GetAnchorCB(@<oParent>,'O'))]                                  ;
    [;DC_GetListSet(DCGUI_GETLIST,bGETLIST_PARENT,<cPID>)]                  ;
    [;DC_GetListSet(DCGUI_GETLIST,lGETLIST_PIXEL,<.p.>)]                    ;
    [;DC_GetListSet(DCGUI_GETLIST,nGETLIST_CURSOR,<nSayCursor>)]            ;
    [;DC_GetListSet(DCGUI_GETLIST,bGETLIST_EVAL,<bSayEval>)]                ;

( ... )

Aus der bequemen Befehlszeile wird - je nach Menge der genutzten Optionen - via Präprozessor eine Folge von Funktionsaufrufen, die etwas völlig anderes zu tun scheinen, als wir von der Zeile zunächst erwarten würden - und das ist uns völlig egal. :D

Verkürzt gesagt: Diese Präprozessor-Direktiven erlauben es, eine eigene Syntax einzuführen. Der Unterschied z.B. zu Funktionsaufrufen für eigene UDFs besteht darin, daß auch strukturelle Eigenarten möglich sind.

Verfasst: Di, 03. Jan 2006 14:19
von Tom
Ich hab den Code gekürzt; da war irgendwas drin, was die Forumsoftware beim Versuch, eine Antwort zu erstellen, in die Knie gezwungen hat. :lol:

Verfasst: Di, 03. Jan 2006 14:42
von Manfred
Hi Tom,

eigentlich alles klar........

aaaaber. was baue ich mir selbst damit? Dass ist es was ich nicht so ganz verstehe. In den Alaska Beispielen, z.B. sind etliche Konvertierungen vorhanden. Ich habe aber im Moment einfach keinen Durchblick. Der AHA Effekt fehlt, um zu sagen: AAAch, das könnte ich mir selbst damit bauen. Oder ist das gar nicht so notwendig, sondern nur nice to have it?

Bei UDF´s ist es klar. Da kann ich mir z.B. Dinge bauen, die serienmäßig nicht dabei sind.