[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/privacyprotection/cron/task/anonymize_ip.php on line 83: A non-numeric value encountered
Inoffizielles deutsches Xbase-Forum • SUPER:init() - Anfängerfrage [ERLEDIGT]
Seite 1 von 1

SUPER:init() - Anfängerfrage [ERLEDIGT]

Verfasst: Di, 30. Aug 2011 14:50
von Werner_Bayern
Servus,

Code: Alles auswählen

CLASS MyDialog FROM XbpDialog
EXPORTED:

INLINE METHOD init()
SUPER:init()
RETURN SELF

INLINE METHOD scrollTop()

SendMessageA(::drawingArea:getHWND(), WM_VSCROLL, SB_TOP, 0 )

RETURN


INLINE METHOD scrollBottom()

SendMessageA( ::drawingArea:getHWND(), WM_VSCROLL, SB_BOTTOM, 0 )

RETURN
das super:init verändert die Fenstergröße und das Verhalten!!! Keine Größenänderung möglich, Größe wird anders dargestellt...
Lasse ich es weg, ist das Verhalten wie erwartet.
Ohne der Methode sollte doch automatisch das super:init aufgerufen werden, mit der Methode auch? Oder wird sie dann 2x gerufen? Warum dann aber das geänderte Verhalten?

Mein Aufruf:

Code: Alles auswählen

aFensterbedarf := {1300, 1250}
oFenster := MyDialog():new(SetAppWindow():drawingArea,,,,{{XBP_PP_FGCLR, val(aSystem[INIFARBEFENSTERFG])}}) 
oFenster:title := "Projekt..."
oFenster:icon := 1
oFenster:resize := {||oFenster:scrollBottom(), sleep(5), oFenster:scrollTop()}
oFenster:drawingarea:scrollbars := XBP_SCROLLBAR_HORIZ + XBP_SCROLLBAR_VERT
oFenster:border := XBPDLG_NO_BORDER
oFenster:create(,,, aFensterbedarf,, .f.)
oFenster:close := {||speicher_projekt(aEditControls), projekte->(dbunlock()), oFenster:destroy()}
oFenster:clipChildren := .f.  // Neuzeichen
centerControl(oFenster)
Was sagen die Experten dazu?

Re: SUPER:init() - Anfängerfrage

Verfasst: Di, 30. Aug 2011 16:19
von brandelh
Hallo,

wenn du eine Classe ableitest und eine vorhandene Methode erweitern willst, so wie hier die INIT(),
dann musst du in der INIT auch die SUPER Klasse aufrufen. ABER MIT ALLEN PARAMETERN !

Am besten holt man sich die aus der Hilfe ;-) ... allerdings muss man bei INIT() nach NEW() suchen ;-)

Code: Alles auswählen

XbpDialog():new( [<oParent>], ; 
                 [<oOwner>], ; 
                 [<aPos>], ; 
                 [<aSize>], ; 
                 [<aPresParam>], ; 
                 [<lVisible>] ) --> oXbpDialog 
somit müsste dein code so aussehen:

Code: Alles auswählen

INLINE METHOD init(oParent, oOwner, aPos, aSize, aPresParam, lVisible )
   SUPER:init(oParent, oOwner, aPos, aSize, aPresParam, lVisible )
RETURN SELF
wenn man aber wie du im Beispiel gar nichts ändern willst, dann kannst du das auch komplett weglassen.
Nicht vorhandene Methoden werden unverändert von der Basisklasse übernommen.

PS: der Befehl SUPER ohne :... hätte selbst keine Parameter benötigt, aber dieser verschiebt aktuell beim Debuggen die angezeigten Zeilen.

Re: SUPER:init() - Anfängerfrage

Verfasst: Di, 30. Aug 2011 16:42
von Werner_Bayern
Astrein, das war´s!

Danke! :salute: