#command #translate [ERLEDIGT]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

#command #translate [ERLEDIGT]

Beitrag 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.
Zuletzt geändert von Manfred am Mi, 14. Apr 2010 20:27, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag 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:
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag 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.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten