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

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

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

Beitrag 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?
Zuletzt geändert von Werner_Bayern am Di, 30. Aug 2011 16:43, insgesamt 1-mal geändert.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SUPER:init() - Anfängerfrage

Beitrag 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.
Gruß
Hubert
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: SUPER:init() - Anfängerfrage

Beitrag von Werner_Bayern »

Astrein, das war´s!

Danke! :salute:
es grüßt

Werner

<when the music is over, turn off the lights!>
Antworten