Array mit Objecten -> Collection() ?

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Array mit Objecten -> Collection() ?

Beitragvon AUGE_OHR » So, 26. Aug 2012 23:01

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 ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10141
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Array mit Objecten -> Collection() ?

Beitragvon andreas » Mo, 27. Aug 2012 18:35

In dem du evtl. Array nach der Caption des Objektes durchsuchst?
Benutzeravatar
andreas
Foren-Moderator
Foren-Moderator
 
Beiträge: 1569
Registriert: Mi, 28. Sep 2005 9:53
Wohnort: Osnabrück

Re: Array mit Objecten -> Collection() ?

Beitragvon Tom » Mo, 27. Aug 2012 20:25

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?
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6678
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: Array mit Objecten -> Collection() ?

Beitragvon AUGE_OHR » Fr, 31. Aug 2012 0:10

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"
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10141
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Array mit Objecten -> Collection() ?

Beitragvon AUGE_OHR » Fr, 31. Aug 2012 5:47

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 ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10141
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg


Zurück zu OOP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast