wie man eine "String" für einen Codeblock zusammen baut ist ja wohl bekannt.
Code: Alles auswählen
cString := "{|| "+cBedingung+"}"
bBlock := &(cString)
Code: Alles auswählen
bBlock := {|| Machwas(oObject) }
Moderator: Moderatoren
Code: Alles auswählen
cString := "{|| "+cBedingung+"}"
bBlock := &(cString)
Code: Alles auswählen
bBlock := {|| Machwas(oObject) }
Code: Alles auswählen
bBlock := {|oObject| Machwas(oObject) }
Eval(bBloc, xIrgendwas)
Code: Alles auswählen
cString := "{|"+cParameter+"|"+cBedingung+"}"
bBlock := &(cString)
...
Eval( bBlock,oObject )
Code: Alles auswählen
oBtn := TBBUTTON():New()
pBtnArray := _xgrab( oBtn:_sizeof_() * button_count )
oBtn:_link_( pBtnArray , .F. ) // link to the first item
nNo := 1
for nNo := 1 to button_count
// .....assign member values
GwstArrayNext( oBtn) // go to the next item
next
Wo hast Du denn vorher von einer FOR /NEXT Schleife gesprochen ?AUGE_OHR hat geschrieben:es geht ja um eine FOR / NEXT Schleife wo ich den Codeblock zusammen bauen möchte.
...
btw. bei den Codeblöcken spreche ich von der xbpToolbar:additem()
Code: Alles auswählen
{|oBtn|...}
ok, das hatte ich mit "dynamisch" gemeintUliTs hat geschrieben:Wo hast Du denn vorher von einer FOR /NEXT Schleife gesprochen ?
es geht nicht um xbpToolbar:additem() sondern um XbpToolBarButton:additem() was wiederum über den DropButton zu einem Menu kommt.UliTs hat geschrieben:Laut Beschreibung von xBase++ liefert xbpToolbar:additem() ein XbpToolBarButton-Object zurück.
Ich sehe nicht, wie da ein Codeblock zugewiesen/benutzt wird. Ich vermute, Dein Codeblock wird ausgeführt, wenn auf den Button geklickt wird, richtig?
Code: Alles auswählen
XbpMenuBar():addItem(<aItem>)
<aItem> := { xCaption [, bAction, nStyle, nAttribute] }
Code: Alles auswählen
METHOD DXE_ToolBarButton:getItem( xItem )
LOCAL nNo
LOCAL oMenuItem := NIL
IF VALTYPE(xItem) = "N"
nNo := ASCAN(::aButtonMenuItem,{|x| x[1] = xItem })
IF nNo > 0
oMenuItem := ::aButtonMenuItem[nNo]
ENDIF
ELSEIF VALTYPE(xItem) = "C"
nNo := ASCAN(::aButtonMenuItem,{|x| x[2] = xItem })
IF nNo > 0
oMenuItem := ::aButtonMenuItem[nNo]
ENDIF
ENDIF
RETURN oMenuItem
Code: Alles auswählen
{|nMenuPos,uNil,oMenuBar|...}
ja, aber nur wenn "ich" die Parameter bereitstelle "im || " des Codeblock "bereitstelle" da wir ja über ein "native" Control reden.UliTs hat geschrieben:Das heißt, mit Hilfe von oMenuBar und der angegebenen nMenuPos kannst Du auf den entsprechenden Eintrag zugreifen.Code: Alles auswählen
{|nMenuPos,uNil,oMenuBar|...}
ich habe ja nichts gegen Array aber es betrifft ja nicht nur eine Class sondern mehrere.UliTs hat geschrieben:Zu Deinen Überlegungen zu Objekten:
Speichert man Objekte in einem Array werden nur die Verweise = Pointer auf die Objekte im Array gespeichert. Wird das Objekt später freigeben, bleibt jedoch der Verweis innerhalb des Objekt's bestehen, sofern man diesen nicht selbst z.B. auf NIL setzt. Deine Frage dazu verstehe ich nicht, da meiner Meinung Verweis = Pointer ist und man damit darauf zugreifen kann, wenn man auf das Array ebenfalls zugreifen kann .
Code: Alles auswählen
oBtn := TBBUTTON():New()
pBtnArray := _xgrab( oBtn:_sizeof_() * button_count )
oBtn:_link_( pBtnArray , .F. ) // link to the first item
for n := 1 to button_count
// .....assign member values
GwstArrayNext( oBtn) // go to the next item
next
Code: Alles auswählen
// statt Array
::aArray[nNo][_Caption]
::aArray[nNo][_Key]
::aArray[nNo][_Index]
// eine ot4xb Structure
BEGIN STRUCTURE MyArray
MEMBER LPSTR Caption DYNSZ cText
MEMBER LPSTR Key DYNSZ cText
MEMBER INT Index
END STRUCTURE
Code: Alles auswählen
CLASS BigArray FROM MyArray
Method BigArray:Next()
Method BigArray:Prev()
Method BigArray:Goto()
...
Die Parameter werden beim Aufruf des Codeblocks übergeben, da kannst Du nichts gegen unternehmen .AUGE_OHR hat geschrieben:ja, aber nur wenn "ich" die Parameter bereitstelle "im || " des Codeblock "bereitstelle" da wir ja über ein "native" Control reden.UliTs hat geschrieben:Das heißt, mit Hilfe von oMenuBar und der angegebenen nMenuPos kannst Du auf den entsprechenden Eintrag zugreifen.Code: Alles auswählen
{|nMenuPos,uNil,oMenuBar|...}
uuuuuupps ... ich hab es in diesem Thread wohl noch nicht erwähnt das sich das ganze auf mein "native" Toolbar Control bezieht.UliTs hat geschrieben:Die Parameter werden beim Aufruf des Codeblocks übergeben, da kannst Du nichts gegen unternehmen .
Was Du mit native Control meinst, verstehe ich nicht.
Code: Alles auswählen
::oToolbar:buttonClick := {|oButton| MsgBox("Knopf [" + ;
LTRIM(STR(oButton:index ))+" "+ ;
Var2Char(oButton:caption)+ ;
"] angeklickt!")}
::SetLvNotifyCB( NM_CLICK,;
{|xbp,code,lp,st| st := NMMOUSE():New(), st:_write_(lp,0,-1),;
PostAppEvent(xbeMyTB_DBLCLK ,lp ,st,Self) , NIL } )
INLINE METHOD HandleEvent(nEvent,mp1,mp2)
DO CASE
CASE nEvent == xbeMyTB_DBLCLK
RETURN ::OnbuttonClick(mp1, mp2)
...
ENDCASE
RETURN NIL
INLINE METHOD OnbuttonClick(mp1, mp2)
LOCAL oClickBtn
LOCAL nIndex := 0
IF VALTYPE( ::buttonClick ) == "B"
//
// works fine ;)
//
EVAL( {|| nIndex := ::GetTbInfo(mp1,mp2,Self),;
oClickBtn := ::getItem(nIndex) } )
IF VALTYPE(oClickBtn) = "O"
ELSE
oClickBtn := DXE_ToolBarButton():New():create()
ENDIF
//
// return DXE_ToolBarButton()
//
EVAL( ::buttonClick, oClickBtn , NIL , Self)
ENDIF
RETURN NIL
Code: Alles auswählen
:saveToolbar()
:restoreToolbar()
:customize()
Code: Alles auswählen
#include "ot4xb.ch"
//----------------------------------------------------------------------------------
proc main
local st := MyStruct():New()
? 'st:val := "Patata Frita" -> ' , st:val := "Patata Frita"
? 'st:con -> ' , st:con
? "---"
? 'st:val := 123456 -> ' , st:val := 123456
? 'st:con -> ' , st:con
? "---"
? 'st:val := SetAppWindow() -> ' , st:val := SetAppWindow()
? 'st:con -> ' , st:con
? "---"
? 'st:val := NIL -> ' , st:val := NIL
? 'st:con -> ' , st:con
? "---"
? 'st:val := NIL -> ' , st:val := NIL
? 'st:con := _var2con("Patata Frita" ) -> ' , st:con := _var2con("Patata Frita" )
? '_con2var( st:con ) -> ' , _con2var( st:con )
? 'st:val -> ' , st:val
? "---"
inkey(0)
return
//----------------------------------------------------------------------------------
BEGIN STRUCTURE MyStruct
MEMBER LPXBASE val ; GWSTBACK ; MEMBER POINTER32 con
END STRUCTURE
//----------------------------------------------------------------------------------