Eingabefelder in Schleife erzeugen

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

Eingabefelder in Schleife erzeugen

Beitrag von Manfred »

Hi,

ich habe eine Eingabemaske, die 12 Zeilen umfasst. 12x Bezeichnung, 12x SLE, 12X Button, und dann wieder 12x SLE. das habe ich jetzt im Moment alles einzeln geschrieben. Ergibt ne Menge Code. Jetzt dachte ich mir, dass könnte ich auch in eine For Next Schleife packen. Das scheint aber nicht zu klappen.

Code: Alles auswählen

FOR nI := 1 TO nBilderMenge
             cNI := Alltrim(Str(nI))
             @ oDialogZusatz:nOben,oDialogZusatz:nLinks DCSAY "Bild " + Right(" " + cNI,2) + ":";
                                                       OBJECT oDialogZusatz:oText;
                                                       PARENT oDialogZusatz:oRahmenBilder;
                                                         SIZE oDialogZusatz:nSayBreite,oDialogZusatz:nSayHoehe
             @ DCGUI_ROW,DCGUI_COL DCGET oSR:bild_&cNI;
                                    EVAL {|o| o:usevisualstyle := oSysPara:oWsPara:VisualStyl,;
                                              oSR:addEditControl(o,.F.);
                                         };
                         GETPRESENTATION {{ XBP_PP_DISABLED_FGCLR, GRA_CLR_BLACK }};
                                 MESSAGE "Name des Bildes" INTO oDialogZusatz:oMessageBox;
                                  OBJECT oSR:oBild_&CNI;
                                  PARENT oDialogZusatz:oRahmenBilder;
                                    SIZE nBildTextLaenge,oDialogZusatz:nSayHoehe;
                                 TABSTOP
             @ DCGUI_ROW,DCGUI_COL + 5 DCPUSHBUTTON;
                                             ACTION {|| oSR:bild_&cNI := bildersuchen(oDialog),;
                                                        oSR:oBild_&cNI:setData();
                                                    };
                                            CAPTION BITMAP_FIND_M;
                                               EVAL {|o| AAdd(oDialogZusatz:aPbBilderSuchen,{o,.T.}) };
                                             OBJECT oDialogZusatz:oPbSuchen;
                                             PARENT oDialogZusatz:oRahmenBilder;
                                               SIZE 20,oDialogZusatz:nSayHoehe;
                                            TOOLTIP "Öffnet ein Browsefenster für die Suche nach Bildern"
             oDialogZusatz:nOben += oDialogZusatz:nAbstand
         NEXT
Über den Button rufe ich Ein FileDialogfenster auf und gebe den Namen der Datei zurück. Leider wird dieser Name aber jedesmal in das letzte Feld übernommen, anstatt im Feld, neben dem der Button ist. Wo ist denn hier mein Denkfehler?
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Eingabefelder in Schleife erzeugen

Beitrag von Martin Altmann »

Manfred,
immer wieder die gleiche Ursache (auch schon mehrmals hier im Forum angesprochen!):
Du musst das anders zusammen bauen, sonst steht in nI immer nur der Wert des letzten Durchlaufes drin - also einfach mal im Forum suchen (damit Georg wieder schreiben kann, dass meine Antwort wenig hilfreich sei 8) )
Es geht um den Zusammenbau von oBild_&cNI bzw. Bild_&cNI...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
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: Eingabefelder in Schleife erzeugen

Beitrag von Tom »

Genau wie's Martin sagt: Der Action-Codeblock wird zur Laufzeit evaluiert, und da steht der Zähler auf nBilderMenge+1. Hier:

Code: Alles auswählen

ACTION {|| oSR:bild_&cNI := bildersuchen(oDialog),oSR:oBild_&cNI:setData()}
Besser so:

Code: Alles auswählen

bMyCodeBlock := &("{|| oSR:bild_"+AllTrim(Str(nBI))+" := bildersuchen(oDialog),oSR:oBild_"+AllTrim(Str(nBI))+":setData()}")

... ACTION bMyCodeBlock
"bMyCodeBlock" kann mehrfach verwendet werden, da sein Inhalt an dieser Stelle zugewiesen wird.

Ach so: "oSR" darf dafür nicht LOCAL sein.
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

Re: Eingabefelder in Schleife erzeugen

Beitrag von Manfred »

Jaja,

ich Doof. Stimmt. Als ich das erste Wort gelesen hatte von Dir, wußte ich schon was ich falsch gemacht hatte. Ich dachte zuerst darüber nach es so zu machen, aber irgendwie ergab sich nicht das MUSS dabei. Aber hätte ich mal auf meine erste Eingabe, (die rein zufällig richtig war) gehört. :doubt: :roll:

@Tom,

Mist, oSR ist aber local
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Eingabefelder in Schleife erzeugen

Beitrag von Martin Altmann »

Dann mach es doch als private ;-)

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
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

Re: Eingabefelder in Schleife erzeugen

Beitrag von Manfred »

Sicher,

ich weiß aber jetzt noch nicht, ob es dann noch in mein Konzept paßt. Das muß ich erstmal prüfen.
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: Eingabefelder in Schleife erzeugen

Beitrag von Tom »

Es ginge auch mit echten "detached locals", aber ich weiß nicht, wie sich das verhält, wenn man irgendwie am Objekt rumpopelt. Müsste man mal ausprobieren (in der Doku nach "detached locals" suchen/Volltextsuche).

Im Code ist auch noch ein Typo:

oSR:bild_&cNI := bildersuchen(oDialog),;
oSR:oBild_&cNI:setData()
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:

Re: Eingabefelder in Schleife erzeugen

Beitrag von Tom »

PRIVATEs sind unproblematisch, solange nicht auch in Funktionen, die von der fraglichen Funktion aufgerufen werden, PRIVATEs mit dem gleichen Namen benutzt werden. Selbst eine LOCAL mit dem gleichen Namen kollidiert nicht!
Herzlich,
Tom
Antworten