CLASS ... FROM XbpDialog, XbpBrowse

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

CLASS ... FROM XbpDialog, XbpBrowse

Beitrag von georg »

Guten Morgen,


aktuell habe ich Probleme mit der o.a. Konstellation.

Code: Alles auswählen

CLASS LogWin FROM XbpDialog, XbpBrowse
   EXPORTED:
   ...
   METHOD init
   METHOD create
   METHOD destroy
   METHOD hide
   METHOD show

ENDCLASS

METHOD LogWin:init(oParent, oOwner, aPos, aSize, aPP, lShow)
   self:lRatioActive := .F.
   self:cFileName := ""

   self:oParent  := oParent
   self:oOwner   := oOwner

   self:aPosDia  := aPos
   self:aSizeDia := aSize
   self:aPP      := aPP
   self:lShow    := lShow

RETURN (Self)

METHOD LogWin:create(oParent, oOwner, aPos, aSize, aPP, lShow)
   ...

   self:XbpDialog:new(self:oParent, self:oOwner, self:aPosDia, self:aSizeDia, self:aPP, self:lShow)
   self:XbpDialog:create(self:oParent, self:oOwner, self:aPosDia, self:aSizeDia, self:aPP, self:lShow)
Die self:XbpDialog:new() Anweisung wird ohne Fehler ausgeführt, die self:XbpDialog:create() Anweisung erzeugt diesen Fehler:

Code: Alles auswählen

oError:args         :
          -> VALTYPE: O CLASS: LogWin
          -> VALTYPE: O CLASS: XbpIWindow
          -> VALTYPE: O CLASS: XbpIWindow
          -> VALTYPE: A VALUE: {2304, 1296}
          -> VALTYPE: A VALUE: {768, 432}
          -> VALTYPE: U VALUE: NIL
          -> VALTYPE: L VALUE: .T.
oError:canDefault   : N
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : NIL
oError:description  : Falscher Datentyp fr Member-Variable
oError:filename     : 
oError:genCode      :         29
oError:operation    : Status
Leite ich die Klasse (testweise) nur von XbpDialog ab, ändert sich der Fehler:

Code: Alles auswählen

oError:args         :
          -> VALTYPE: O CLASS: LogWin
          -> VALTYPE: O CLASS: XbpIWindow
          -> VALTYPE: O CLASS: XbpIWindow
          -> VALTYPE: A VALUE: {2304, 1296}
          -> VALTYPE: A VALUE: {768, 432}
          -> VALTYPE: U VALUE: NIL
          -> VALTYPE: L VALUE: .T.
oError:canDefault   : N
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : NIL
oError:description  : Falscher Datentyp fr Member-Variable
oError:filename     : 
oError:genCode      :         29
oError:operation    : Status
Was mache ich falsch?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: CLASS ... FROM XbpDialog, XbpBrowse

Beitrag von Tom »

Musst Du in der Init-Methode nicht auch die Objekte der Basisklassen initialisieren?
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: CLASS ... FROM XbpDialog, XbpBrowse

Beitrag von georg »

Hallo, Tom -

m.E. nicht.

Wenn ich das

Code: Alles auswählen

self:XbpDialog:new(self:oParent, self:oOwner, self:aPosDia, self:aSizeDia, self:aPP, self:lShow)
in den :init der Klasse verlagere, gibt es einen XppFatal.log:

Code: Alles auswählen

FATAL ERROR LOG
Stack Overflow
SYS Thread-ID: 1412
Module: EH
Error Codes: EH: 12 Sub: 0(0) OS: 0 XPP: 16
Call Stack of Thread 1 (920):
SHOWLOG(9)
(B)GENERATEMENU@0001(37)
MAIN(21)
Call Stack of GUI Thread (1124):
Call Stack of Thread 3 (1412):
@LOGWIN@I@INIT(27)    <=== self:XbpDialog:new(self:oParent, self:oOwner, self:aPosDia, self:aSizeDia, self:aPP, self:lShow)
@LOGWIN@I@INIT(38)
@LOGWIN@I@INIT(38)
@LOGWIN@I@INIT(38)
@LOGWIN@I@INIT(38)
etc. pp.
Der new() auf self:XbpDialog ruft den :init der Klasse LogWin auf.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: CLASS ... FROM XbpDialog, XbpBrowse

Beitrag von Marcus Herz »

Code: Alles auswählen

oelf:XbpDialog:init(self:oParent, self:oOwner, self:aPosDia, self:aSizeDia, self:aPP, self:lShow)
es muss das INIT nicht NEW der Superklassen aufgerufen werden
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: CLASS ... FROM XbpDialog, XbpBrowse

Beitrag von Tom »

Kein :New(), sondern ein Init(). Wenn ich eine Klasse von einem oder mehren XbParts ableite, führe ich im Init() der abgeleiteten Klasse ein Init() der Superklassen durch, sonst bekommen die Objekte ja nur das, was ich dort veranstalte. Aber möglicherweise verstehe ich Dein Modell auch falsch.

Code: Alles auswählen

CLASS MeineBox FROM XbpComboBox
...

INLINE Method Init(oParent, oOwner, aPos ...)
::XbpComboBox:Init(oParent, oOwner, aPos ...) 
usw.
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: CLASS ... FROM XbpDialog, XbpBrowse

Beitrag von Marcus Herz »

Mir ist das Konstrukt auch nicht klar. Der Browser ist normalerweise ein Child des Dialoges. Hier werden ja keyboard und handleevent (und andere Methoden) nur an xbpDialog (weil als erste Superklasse gelistet) weitergeleitet. Wie soll denn der Browser sein Handleevent bekommen?
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: CLASS ... FROM XbpDialog, XbpBrowse

Beitrag von georg »

Guten Abend,


vielen Dank Euch beiden - ja, :init() muss anstelle von :new() verwendet werden.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: CLASS ... FROM XbpDialog, XbpBrowse

Beitrag von Tom »

Mein Reden von Anfang an. In aus XbParts abgeleiteten Klassen muss es ein implizites Init() auf die Superklassenobjekte geben.
Herzlich,
Tom
Antworten