Seite 1 von 1

DCGET EDITPROTECT

Verfasst: Mi, 11. Aug 2021 17:11
von Manfred
Hi Leute,
irgendwie verstehe ich das folgende nicht:

Code: Alles auswählen

FOR nI := 1 TO Len(ar_get)
             lEditProtect := .F.
             IF ar_get[nI]:nLaenge = 500
                lEditProtect := .T.
             ENDIF
             @ ar_get[nI]:nOben,ar_get[nI]:nLinks DCSAY ar_get[nI]:text;
                                                 OBJECT oDialogZUsatz:oText;
                                                 PARENT oDialogZUsatz:oRahmenKopf;
                                                   SIZE 0
             IF ValType(ar_get[nI]:eingabe) <> "U"                              // es muß was drin stehen, sonst macht es wenig Sinn
                @ DCGUI_ROW,DCGUI_COL + IF(! Empty(ar_get[nI]:text),5,0) DCGET ar_get[nI]:eingabe;
                                                                   EDITPROTECT {|| lEditProtect};  <----- Hier...
                                         PARENT oDialogZUsatz:oRahmenKopf;
                                        PICTURE ar_get[nI]:picture;
                                        TABSTOP;
                                        TOOLTIP ar_get[nI]:cTooltip
             ENDIF
         NEXT
Kann darüber nicht geschaltet werden, welches Feld geschützt ist und welches nicht?

Re: DCGET EDITPROTECT

Verfasst: Mi, 11. Aug 2021 17:20
von Tom
Kann schon, aber da der EDITPROTECT-Codeblock zur Laufzeit evaluiert wird, reagiert er für alle GETs auf den letzten Wert, den lEditProtect am Ende der Schleife hatte.

EDITPROTECT hat als ersten Parameter das Objekt selbst. Du könntest es also lösen, indem Du dem Objekt eine iVar gibst, aber Du packst alle GETs in die gleiche Objektvariable. Oder Du arbeitest mit detached locals. Das ist hier im Forum schon einige Male erklärt worden.

Re: DCGET EDITPROTECT

Verfasst: Mi, 11. Aug 2021 17:26
von Manfred
verdammt, Du hast recht. Der letzte Wert zählt.
Aber wie löse ich das jetzt ? Ich habe Deine Erklärung am Ende nicht so ganz verstanden.

Re: DCGET EDITPROTECT

Verfasst: Mi, 11. Aug 2021 17:33
von Manfred
ok, ich habe einen Weg gefunden. Nicht sehr revolutionär, aber klappt.

Code: Alles auswählen

FOR nI := 1 TO Len(ar_get)
             lEditProtect := .F.
             IF ar_get[nI]:nLaenge = 500
                lEditProtect := .T.
             ENDIF
             @ ar_get[nI]:nOben,ar_get[nI]:nLinks DCSAY ar_get[nI]:text;
                                                 OBJECT oDialogZUsatz:oText;
                                                 PARENT oDialogZUsatz:oRahmenKopf;
                                                   SIZE 0
             IF ValType(ar_get[nI]:eingabe) <> "U"                              // es muß was drin stehen, sonst macht es wenig Sinn
                IF lEditProtect
                   @ DCGUI_ROW,DCGUI_COL + IF(! Empty(ar_get[nI]:text),5,0) DCGET ar_get[nI]:eingabe;
                                                                      EDITPROTECT {|| .T.};
                                            PARENT oDialogZUsatz:oRahmenKopf;
                                           PICTURE ar_get[nI]:picture;
                                           TABSTOP;
                                           TOOLTIP ar_get[nI]:cTooltip
                ELSE
                   @ DCGUI_ROW,DCGUI_COL + IF(! Empty(ar_get[nI]:text),5,0) DCGET ar_get[nI]:eingabe;
                                            PARENT oDialogZUsatz:oRahmenKopf;
                                           PICTURE ar_get[nI]:picture;
                                           TABSTOP;
                                           TOOLTIP ar_get[nI]:cTooltip
                ENDIF
             ENDIF
         NEXT

Re: DCGET EDITPROTECT

Verfasst: Mi, 11. Aug 2021 18:50
von Tom
Wenn Du das nicht im Dialog toggeln musst, ist es okay. Ansonsten könntest Du auch in der Abfrage eine Variable für den Codeblock bestücken und diese dann EDITPROTECT zuweisen.

Code: Alles auswählen

bBlock := IF(irgendetwas,{||.T.},{||.F.})

… EDITPROTECT bBlock
Und mit detached locals wäre es cool.