DCGET EDITPROTECT

Moderator: Moderatoren

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

DCGET EDITPROTECT

Beitrag 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?
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:

Re: DCGET EDITPROTECT

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

Re: DCGET EDITPROTECT

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

Re: DCGET EDITPROTECT

Beitrag 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
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:

Re: DCGET EDITPROTECT

Beitrag 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.
Herzlich,
Tom
Antworten