Seite 1 von 1

Array mit Objecten -> Collection() ?

Verfasst: Mo, 27. Aug 2012 0:01
von AUGE_OHR
hi,

ich bin bei der "native" Toolbar. Die hat ja Buttons welche man mit o:AddItem() hinzufügen kann

Code: Alles auswählen

METHOD DXE_Toolbar:Additem(cCaption, xImage, xDisabledImage, xHotImage, cDLL, nStyle, cKey)
   AADD(::aTBitems,{ cCaption,xImage, xDisabledImage, xHotImage, cDLL, nStyle, cKey })
ich nehme nun alle Parameter in ein Array auf.

wenn ich mir nun den oToobar:buttonClick Callbackslot ansehe finde ich oButton "im Codeblock"

Code: Alles auswählen

:buttonClick := {| oButton,uNil,self | ... }
ich muss also ein Object haben was ich als oButton zurückgeben kann.

Code: Alles auswählen

CLASS DXE_ToolBarButton 
EXPORTED:

   VAR bottom
   VAR caption
   VAR description
   VAR disabledImage
   VAR enabled
   VAR height
   VAR hotImage
   VAR image
   VAR index
   VAR key
   VAR left
   VAR mixedState
   VAR pressed
   VAR style
   VAR tooltipText
   VAR top
   VAR visible
   VAR width

   METHOD init()
   METHOD addItem()
   METHOD clear()
   METHOD delItem()
   METHOD getItem()
   METHOD numItems()
ENDCLASS

METHOD DXE_ToolBarButton:init(p1,p2,p3,p4,p5,p6)
METHOD DXE_ToolBarButton:addItem( cCaption, cKey )
METHOD DXE_ToolBarButton:clear()
METHOD DXE_ToolBarButton:delItem( xItem )
METHOD DXE_ToolBarButton:getItem( xItem )
METHOD DXE_ToolBarButton:numItems()
nun hab ich also mein Object ... und mein Array ::aTBitems

wie bekomme ich nun beides zusammen ?

Re: Array mit Objecten -> Collection() ?

Verfasst: Mo, 27. Aug 2012 19:35
von andreas
In dem du evtl. Array nach der Caption des Objektes durchsuchst?

Re: Array mit Objecten -> Collection() ?

Verfasst: Mo, 27. Aug 2012 21:25
von Tom
Hallo, Jimmy.

Ich muss zugeben, ich verstehe Deine Frage nicht ganz. Die Toolbar hat eine AddItem-Methode, die Buttons hinzufügt (!). Der Toolbar-Callback "buttonClick" verfügt als Referenz über einen Verweis auf das Button-Objekt, das mit AddItem hinzugefügt wurde, so dass das Objekt im Slot greifbar ist. Du sammelst die Parameter, die Du der AddItem-Methode übergibst, in einem Array. Wozu? Und warum willst Du im Callback auf dieses Array zugreifen? Du hast doch das ganze Objekt zur Verfügung.

Oder willst Du folgendes tun? Alle möglichen Buttons bzw. deren Eigenschaften werden in einem Array gesammelt, und dieses Array soll dann von AddItems abgearbeitet werden (wofür die Methode nur leicht adaptiert werden müsste). In "buttonClick" möchtest Du wiederum wissen, welcher Arrayindex sich auf den geklickten Button bezöge, welches Item Deines Arrays also relevant ist. Meinst Du das?

Re: Array mit Objecten -> Collection() ?

Verfasst: Fr, 31. Aug 2012 1:10
von AUGE_OHR
hi,

@Tom : ich habe meine eigene "native" Toolbar geschrieben siehe http://www.xbwin.com
AUGE_OHR
30. August 2012
ot4xb.public
"native" Toolbar v0.12
In dem du evtl. Array nach der Caption des Objektes durchsuchst?
YUP so was in der Art mache ich ja noch mit Array ... aber ich möchte Objecte ;)

mir ging es um die "allgemeine" Frage wie ich aus einem Array ein Object mache.
bei XbpToolBar():AddItem() erhält man als Rückgabe ein Object.

wenn ich

Code: Alles auswählen

CLASS DXE_ToolBarButton
schreibe ohne ein FROM dann hat das Object praktische nur die IVar und keine weiteren geerbten Eigenschaften.

aber irgendwo muss ich die "Rückgabe" Objecte doch "verwalten", also nehme ich die im Array auf.
um eine Button aus einer Toolbar zu bekommen gibt es oToolbar:getItem() was ich so umgesetzt habe

Code: Alles auswählen

METHOD DXE_Toolbar:getItem( xItem )
LOCAL nNo
LOCAL oBtn  := NIL
LOCAL cCaption := ""
LOCAL pBtnArray

   IF VALTYPE(xItem) = "N" // suche nach INDEX No.
      nNo := ASCAN(::aItems,{|x| x[_nItemCount] = xItem })
      IF nNo > 0
         oBtn := ::aItems[nNo][_oAddBtn]
      ENDIF

   ELSEIF VALTYPE(xItem) = "C" // suche nach KEY
      nNo := ASCAN(::aItems,{|x| x[_cKey] = xItem })
      IF nNo > 0
         oBtn := ::aItems[nNo][_oAddBtn]

      ELSE                              // suche nach Caption
         nNo := ASCAN(::aItems,{|x| x[_cCaption] = xItem })
         IF nNo > 0
            oBtn := ::aItems[nNo][_oAddBtn]
         ENDIF
      ENDIF
   ENDIF

RETURN oBtn
Ein Array kann das zwar aber für ActiveX gibt es ja für solche Zwecke "Collation".

Frage : wie macht macht eine "Collation" als Object statt eines Array für Objecte ?

... ich suche so was wie "FROM XbpCollation"

Re: Array mit Objecten -> Collection() ?

Verfasst: Fr, 31. Aug 2012 6:47
von AUGE_OHR
angenommen :

Code: Alles auswählen

FOR 1 := 1 TO 10
   oXbp := XbpStatic():New():Create()
   oXbp :Property := xxx
   AADD(aButton,oXbp)
NEXT
ich verwende hier extra "kein o:Cargo" !
wenn ich nun eine Button ansprechen will müsste ich es mit

Code: Alles auswählen

oXbp := aButton[nNummer]
dann holt er mir aus dem Array wieder das Object.

und so stelle ich mir den Code vor

Code: Alles auswählen

oButton := DXE_ArrayObject():New()

FOR 1 := 1 TO 10
   oButton:Property := xxx
   oButton:Next()
NEXT

oXbp := oButton:Index(nNummer)
wie bekommt man so etwas hin ?