Seite 1 von 1

Aeval über Childlist()

Verfasst: Do, 27. Dez 2007 8:58
von Manfred
Moin,

das hier klappt:

Code: Alles auswählen

AEval(::childlist(), {|x,i| ::childlist()[i]:setInputFocus := {|y,nI| oSleHilfe:setcaption(::aKonfigButton[nI,1])}})
warum klappt sowas nicht:

Code: Alles auswählen

AEval(::childlist(), {|x,i| ::childlist()[i]:caption := "Test"})
Childlist ist aus einem Pushbutton Objekt. Die Buttons bleiben leer.

das hier klappt auch nicht:

Code: Alles auswählen

AEval(::childlist(), {|x,i| ::childlist()[i]:tabStop := .T.})

Verfasst: Do, 27. Dez 2007 9:52
von Sören
Hallo Manfred,

wenn ich Dich richtig verstanden habe, gibt der Aufruf von ::childList() innherhalb der AEval()-Funktion Pushbutton-Objekte zurück?!

Und für die Pushbutton wurde bereits ::create() ausgeführt?!

Wenn dem so ist, kannst Du die Caption nur noch mit der Methode ::setCaption( "Test" ) ändern.

So sollte es funktionieren:

Code: Alles auswählen

AEval( ::childList(), { |o| iif( IsMethod( o, "setCaption" ), o:setCaption( "Test" ), NIL ) } )

Verfasst: Do, 27. Dez 2007 10:03
von Manfred
Hi Sören,

das hier klappt ja,

Code: Alles auswählen

  ::oPbNeu:caption       := ::aKonfigButton[ 1,2]
  ::oPbFinden:caption    := ::aKonfigButton[ 2,2]
  ::oPbEdit:caption      := ::aKonfigButton[ 3,2]
  ::oPbSkipminus:caption := ::aKonfigButton[ 4,2]
  ::oPbSkipPlus:caption  := ::aKonfigButton[ 5,2]
  ::oPbAnfang:caption    := ::aKonfigButton[ 6,2]
  ::oPbEnde:caption      := ::aKonfigButton[ 7,2]
  ::oPbSichern:caption   := ::aKonfigButton[ 8,2]
  ::oPbLoeschen:caption  := ::aKonfigButton[ 9,2]
  ::oPBBeenden:caption   := ::aKonfigButton[10,2]
deshalb bin ich ja so verwirrt. Ich habe zunächst den normalen Weg gewählt um zu sehen, ob alles so klappt, wie ich es mir vorstelle. Dann wollte ich "vereinfachen".
Es ist alles noch vor dem :create().

Verfasst: Do, 27. Dez 2007 10:06
von Martin Altmann
Hallo Manfred,
vor dem :Create() können die Objekte ja noch nicht in der ::childlist stehen, da sie ja noch nicht existieren!

Viele Grüße,
Martin

Verfasst: Do, 27. Dez 2007 10:09
von Manfred
Hi Martin,

sollte so sein, aber in meinem 1.Beitrag war eine Zeile, die klappte und die ist genau vor der anderen, die nicht klappt. Beides mit Aeval und ::childlist() und vor dem :create() (Setinputfocus). Ich dachte das auch, aber im Debugger sah ich dann, dass es einen Eintrag gab.

Watt sachse nu?

Ich bin genauso verwirrt, wie damals, als ich erfuhr, dass es kein Christkind gibt.....

PS: Ok, das mit der Caption habe ich jetzt hinter Create als setcaption() gepackt, das ist jetzt kein Problem mehr, aber das andere verwirrt mich jetzt immer noch.

Verfasst: Do, 27. Dez 2007 10:18
von Manfred
Hi,

also das Dingen sieht genau so aus:

Code: Alles auswählen

CLASS rahmenButton FROM XbpStatic
      EXPORTED:

      VAR aKonfigButton,;
          nBreite,;
          nHoehe,;
          nLinks,;
          nPbBreite,;
          nPbHoehe,;
          oPbNeu,;
          oPbFinden,;
          oPbEdit,;
          oPbSkipMinus,;
          oPbSkipPlus,;
          oPbAnfang,;
          oPbEnde,;
          oPbSichern,;
          oPbLoeschen,;
          oPBBeenden

      METHOD init
      METHOD create
      METHOD destroy
      METHOD erzeugeButton
      METHOD konfigButton
ENDCLASS
********************************************************************************
METHOD rahmenButton:init(oParent, oOwner, aPos, aSize, aPresParam, lVisible)
       ::xbpStatic:init(oParent, oOwner, aPos, aSize, aPresParam, lVisible)
       ::type          := XBPSTATIC_TYPE_GROUPBOX
       ::aKonfigButton := {;
                           {"Neuerfassung von Datensätzen (aktivieren mit Leertaste, oder Mausklick)"         ,"~Neu"},;
                           {"Suchen von Datensätzen (aktivieren mit Leertaste, oder Mausklick)"               ,"~Finden"},;
                           {"Editieren des angezeigten Datensatzes (aktivieren mit Leertaste, oder Mausklick)","~Ändern"},;
                           {"vorherigen Datensatz anspringen (aktivieren mit Leertaste, oder Mausklick)"      ,"~<"},;
                           {"nächster Datensatz anspringen (aktivieren mit Leertaste, oder Mausklick)"        ,"~>"},;
                           {"Anfang der Datenbank anspringen (aktivieren mit Leertaste, oder Mausklick)"      ,"~Anfang"},;
                           {"Ende der Datenbank anspringen (aktivieren mit Leertaste, oder Mausklick)"        ,"~Ende"},;
                           {"Speichern von Datensätzen (aktivieren mit Leertaste, oder Mausklick)"            ,"~Speichern"},;
                           {"Löschen des angezeigten Datensatzes (aktivieren mit Leertaste, oder Mausklick)"  ,"~Löschen"},;
                           {"Beenden der Maske (aktivieren mit Leertaste, oder Mausklick)"                    ,"~Beenden"};
                          }
       ::nLinks        := 5
       ::nPbBreite     := (::currentSize()[1]-5-5)/10                           // steht hier schon zur Verfügung.
       ::nPbHoehe      := ::currentSize()[2]-5-15                               // merkwürdig
RETURN self
********************************************************************************
METHOD rahmenButton:create(oSleHilfe, aPbActivate )
       ::xbpStatic:create()
       ::erzeugeButton()
       ::konfigButton(oSleHilfe)
       AEval(::childList(),{|x,i| ::childlist()[i]:activate := aPbActivate[i,1]})
RETURN self
********************************************************************************
METHOD rahmenButton:destroy()
       ::XbpStatic:destroy()
RETURN self
********************************************************************************
METHOD rahmenButton:erzeugeButton()
       ::oPbNeu       := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
       ::nLinks += ::nPbBreite

       ::oPbFinden    := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
       ::nLinks += ::nPbBreite

       ::oPbEdit      := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
       ::nLinks += ::nPbBreite

       ::oPbSkipMinus := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
       ::nLinks += ::nPbBreite

       ::oPbSkipPlus  := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
       ::nLinks += ::nPbBreite

       ::oPbAnfang    := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
       ::nLinks += ::nPbBreite

       ::oPbEnde      := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
       ::nLinks += ::nPbBreite

       ::oPbSichern   := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
       ::nLinks += ::nPbBreite

       ::oPbLoeschen  := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
       ::nLinks += ::nPbBreite

       ::oPbBeenden   := XbpPushButton():new(self,,{::nLinks,5},{::nPbBreite,::nPbHoehe})
RETURN self
********************************************************************************
METHOD rahmenButton:konfigButton(oSleHilfe)
       AEval(::childlist(), {|x,i| ::childlist()[i]:setInputFocus := {|y,nI| oSleHilfe:setcaption(::aKonfigButton[nI,1])}})

       ::oPbNeu:tabStop       := .T.
       ::oPbFinden:tabStop    := .T.
       ::oPbEdit:tabStop      := .T.
       ::oPbSkipMinus:tabStop := .T.
       ::oPbSkipPlus:tabStop  := .T.
       ::oPbAnfang:tabStop    := .T.
       ::oPbEnde:tabStop      := .T.
       ::oPbSichern:tabStop   := .T.
       ::oPbLoeschen:tabStop  := .T.
       ::oPbBeenden:tabStop   := .T.

       ::oPbNeu:create():setName(1)
       ::oPbFinden:create():setName(2)
       ::oPbEdit:create():setName(3)
       ::oPbSkipMinus:create():setName(4)
       ::oPbSkipPlus:create():setName(5)
       ::oPbAnfang:create():setName(6)
       ::oPbEnde:create():setName(7)
       ::oPbSichern:create():setName(8)
       ::oPbLoeschen:create():setName(9)
       ::oPbBeenden:create():setName(10)

       AEval(::childlist(), {|x,i| ::childlist()[i]:setcaption(::aKonfigButton[i,2])})
RETURN self

Verfasst: Do, 27. Dez 2007 10:48
von Sören
Hallo Manfred,

Deine Methode ::konfigButton() könntest Du folgendermaßen vereinfachen:

Code: Alles auswählen

METHOD rahmenButton:konfigButton( oSleHilfe )

  AEval( ::childlist(), { |o,i| o:setInputFocus := { |y,nI| oSleHilfe:setcaption( ::aKonfigButton[nI,1] ) }, ;
                                o:tabStop := .T., ;
                                o:caption := ::aKonfigButton[i,2], ;
                                o:create(), ;
                                o:setName( i ) } ) 
RETURN self 

Verfasst: Do, 27. Dez 2007 11:05
von Manfred
Hi Sören,

das habe ich ja vor, aber alles one after the other. Im Moment quält mich der Gedanke, warum es so nicht klappt.

PS: Mir fällt gerade noch ein: Wie Du siehst, klappt es so ja nicht.....

Re: Aeval über Childlist()

Verfasst: Mo, 07. Jan 2008 9:09
von brandelh
Manfred hat geschrieben: warum klappt sowas nicht:

Code: Alles auswählen

AEval(::childlist(), {|x,i| ::childlist()[i]:caption := "Test"})
Childlist ist aus einem Pushbutton Objekt.
2 Ideen hätte ich :

1. Dein Aufruf ist nach :create(), somit nützt es nichts :caption zu ändern, man muss :SetCaption() aufrufen:

Code: Alles auswählen

AEval(::childlist(), {|x,i| ::childlist()[i]:setCaption("Test")})
2. Wenn du die childlist() eines Buttons aufrufst, hat dieser denn überhaupt Childs ?

Normalerweise liegen Buttons auf der :drawingArea oder einem XbPart der Static Klasse ...