Class1 call Class2:resize

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Class1 call Class2:resize

Beitrag von AUGE_OHR »

hi,

Probleme :

Code: Alles auswählen

PROCEDURE MAIN 
...
oEdit := Cutter():New():Create()
...
oPlayer := XbPlayer():New( AppDesktop(), oEdit,;
              { oEdit:CurrentPos()[1]+220,oEdit:CurrentPos()[2]+200 },;
              {360+4,322+4})
oPlayer:Create()
oPlayer:oWMP:setPosandSize({0,0},oPlayer:drawingArea:currentSize())
...
oEdit:oWMP := oPlayer:oWMP
soweit funktioniert das Resize ...

Code: Alles auswählen

METHOD XbPlayer:create( oParent, oOwner, aPos, aSize, aPP, lVisible )

   ::XbpDialog:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
   ::XbpDialog:drawingArea:Resize   := {|x,y,o| ::Resize(x,y) }

   ::oWMP := XbpActiveXControl():new( ::drawingArea, , {0,0}, {352,288} )
   ::oWMP:CLSID := "{6BF52A52-394A-11d3-B153-00C04F79FAA6}"
   ::oWMP:TabStop := .T.
   ::oWMP:create()

RETURN self

METHOD XbPlayer:Resize( aOldSize, aNewSize )
LOCAL aSize

   IF aOldSize[1] == 0 .AND. aOldSize[2] == 0   // New line
      aOldSize := aNewSize                      // New line
   ELSEIF aNewSize[1] == 0 .OR. aNewSize[2] == 0 // New line
      RETURN                                    // New line
   // NEED resize same Size
*   ELSEIF aNewSize[1] == aOldSize[1] .AND. aNewSize[2] == aOldSize[2]
*      RETURN
   ENDIF                                        // New line

   ::oWMP:setPosAndSize( {0,0}, ::drawingArea:currentsize() )
   aSize := ::oWMP:CurrentSize()
   ::setTitle("WMPlayer "+LTRIM(STR(aSize[1]))+" x "+;
                          LTRIM(STR(aSize[2]))+" "+LTRIM(STR(RECNO())) )

RETURN NIL
, aber wie mache ich es nun aus der oEdit Class ?

Code: Alles auswählen

METHOD oEdit:SnapShot2DBF()
...
// geht NICHT
PostAppEvent(xbeP_Resize,{1,2},{360,322}, ::oWMP:setparent() )

// bringt es auch nicht
aSize  := ::oWMP:currentsize()
aPSize := ::oWMP:setparent():currentsize()
::oWMP:setparent():setSize({aPSize[1]+1,aPSize[2]+1})
::oWMP:setPosandSize({0,0},::drawingArea:currentSize())

// auch das NICHT
aPosi := ::oWMP:setparent():currentpos()
aSize := ::oWMP:setparent():currentsize()
::oWMP:setparent():setPosAndSize( aPosi  ,{aSize[1]+1,aSize[2]+1} )
Frage : Kann ich aus eine Class in eine andere Class einen Event schicken ?

gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Jimmy,

verstehe ich es richtig, dass du in oEdit:SnapShot2DBF() die Grösse des XbpPlayer-Objekts ändern willst ?

Die verschiedenen (nicht funktionierenden) Codevarianten in oEdit:SnapShot2DBF() versuchen jedoch stattdessen alle die Größe von XbpPlayer:drawingArea zu ändern, denn :

::oWMP:setparent() -> XbpPlayer:drawingArea

Versuch mal

oPlayer := ::oWMP:setparent():setParent()
oPlayer:setSize( ... )

Viele Grüße
Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Günter Beyes hat geschrieben: verstehe ich es richtig, dass du in oEdit:SnapShot2DBF() die Grösse des XbpPlayer-Objekts ändern willst ?
Ja darum ging es.
Günter Beyes hat geschrieben: Die verschiedenen (nicht funktionierenden) Codevarianten in oEdit:SnapShot2DBF() versuchen jedoch stattdessen alle die Größe von XbpPlayer:drawingArea zu ändern, denn :

::oWMP:setparent() -> XbpPlayer:drawingArea

Versuch mal

oPlayer := ::oWMP:setparent():setParent()
oPlayer:setSize( ... )
hm ... ja richtig ... werde ich probieren, danke.

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

:setParent():setparent()

Beitrag von AUGE_OHR »

hi,

ab und zu hab ich immer noch Probleme den richtigen :setparent()
zu finden.

Nun kann man ja vom Parent per o:Childlist() nach einem Child suchen
wenn man per o:setName(nID) dem XbPart eine "nID" verpasst hat und
mit o:childFromName(nID) den XbPart "sucht".

Frage : Wie komme ich von einem Child an einen Parent wenn ich dem
Parent per o:setName(nID) eine "nID" verpasst habe ?

ein o:ParentList() oder o:ParentFromName() gibt es ja wohl nicht ... ?

gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
warum gehst Du nicht von oben los und suchst Dein Child?
Wenn Du ihn hast, weißt Du, dass das davor angesprochene Objekt der Parent ist....

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: warum gehst Du nicht von oben los und suchst Dein Child?
Wenn Du ihn hast, weißt Du, dass das davor angesprochene Objekt der Parent ist....
ich hab in der neuen Class, wo der Player eine eigene (Sub)Class ist,
des öfter solche Construktionen :
::oWMP:setparent():setparent():show()
::oWMP:setparent():setparent():hide()
::oWMP:setparent():setparent():drawingArea:currentsize()
::oWMP:setparent():setparent():oBAR:setData( 0.0 )
::oWMP:setparent():setparent():oBAR:setRange({0.00, ...

PostAppEvent(xbeP_Keyboard,xbeK_TAB,,oObj:setparent():setparent())
siehst du was ich meine ... also denke ich an sowas :

Code: Alles auswählen

FUNCTION GetTopParent( o )
LOCAL oRet    := o
LOCAL oParent := NIL
LOCAL nFaktor := 1
LOCAL i, iMax

   oParent := o:setParent()
   DO WHILE .T.
      IF oParent = AppDesktop()
         EXIT
      ELSE
         oParent := oParent:setParent()
         nFaktor++
      ENDIF
   ENDDO
   FOR i = 1 TO nFaktor-1
      //
      // und wie baue ich sowas zusammen ?
      //
      oRet := oRet+":setParent()"
   NEXT

RETURN( oRet )
wenn ich das nun zusammenbauen könnte hätte ich sowas wie

Code: Alles auswählen

GetTopParent(::oWMP):show()
gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Jimmy,
Jimmy hat geschrieben:

Code: Alles auswählen

FUNCTION GetTopParent( o )
LOCAL oRet    := o
LOCAL oParent := NIL
LOCAL nFaktor := 1
LOCAL i, iMax

   oParent := o:setParent()
   DO WHILE .T.
      IF oParent = AppDesktop()
         EXIT
      ELSE
         oParent := oParent:setParent()
         nFaktor++
      ENDIF
   ENDDO
   FOR i = 1 TO nFaktor-1
      //
      // und wie baue ich sowas zusammen ?
      //
      oRet := oRet+":setParent()"
   NEXT

RETURN( oRet )
da musst du nichts zusammenbauen. Merke dir einfach den jeweils letzten Parent. Sobald :setParent() den Desktop liefert, weisst du, dass der vorherige Parent dein top parent ist.

Code: Alles auswählen

FUNCTION GetTopParent( o )
LOCAL oRet    := o
LOCAL oParent := NIL
LOCAL oDesktop := AppDesktop()

   oParent := o:setParent()
   DO WHILE .T.
      IF oParent = oDesktop
         EXIT
      ENDIF
      oRet    := oParent                      // <<<<<<<<<<<<<<<
      oParent := oParent:setParent()
   ENDDO

RETURN oRet 
Andererseits... du könntest den top parent natürlich auch in einer eigenen Instanzvariablen deiner Klasse ablegen, dann sparst du die ewigen DO WHILE-Schleifen.

::TopParent:show()


Viele Grüße,
Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Günter Beyes hat geschrieben:

Code: Alles auswählen

::TopParent:show() 
danke, genau auf sowas wollte ich raus.

gruss by OHR
Jimmy
Antworten