Seite 1 von 1

INLINE CLASS METHOD

Verfasst: Do, 30. Mär 2017 4:44
von AUGE_OHR
hi,

ich sehe mir gerade einen Source von Pablo an und bin am überlegen "warum" er es "so" schreibt

Code: Alles auswählen

INLINE METHOD SetWordWrap(lOnOff,hDC)
       return ::mc__SetWordWrap(::hRtf,lOnOff,hDC)
       // ---------------------------------------------------------------------------------
INLINE CLASS METHOD mc__SetWordWrap(hRtf,lOnOff,hDC)
       local hDCScreen := NIL
       if Empty(hRtf) ; return NIL ; end
       if Empty(hDC)
          hDCScreen := @user32:GetDC(0)
       end
       @user32:SendMessageA(hRtf,EM_SETTARGETDEVICE,__vdef( hDC, hDCScreen ),iif( Empty(lOnOff),0x7FFFFFFF,0) )
       if hDCScreen != NIL
          @user32:ReleaseDC( 0 , hDCScreen )
       end
       return NIL
was hat eine "INLINE CLASS METHOD" für ein Vorteil ?

Re: INLINE CLASS METHOD

Verfasst: Do, 30. Mär 2017 6:57
von brandelh
KURZE Methoden können so direkt in der CLAS Definition stehen, ob das wirklich übersichtlicher ist muss jeder selbst entscheiden.

Ich z.B. markiere die Methoden im CLAS Bereich gerne und sortiere nach Namen, das ginge dann nicht mehr !

Re: INLINE CLASS METHOD

Verfasst: Di, 04. Apr 2017 3:33
von AUGE_OHR
habe von Pablo eine Antwort bekommen
I think I used those methods also without an xbp in one or more projects so put inside class methods to put all together inside something like a namespace
hm ... wie ist das jetzt zu verstehen :?:

Re: INLINE CLASS METHOD

Verfasst: Di, 04. Apr 2017 8:45
von brandelh
geht deine Frage nun auf Bezug zu "INLINE" (das hatte ich angenommen, bei meiner Antwort) oder zu "CLASS METHOD" ?

Eine CLASS METHOD ist einmalig für alle abgeleiteten Klassen, also alle nutzen die Gleiche :!: nicht eine Ableitung davon wie bei einer normalen Methode.
Wenn z.b. Eine STATIC immer genau einmal in allen verwendeten Objekten sein soll, dann legt man diese in einer CLASS METHOD oder als CLASS VAR an.

Re: INLINE CLASS METHOD

Verfasst: Mi, 05. Apr 2017 3:23
von AUGE_OHR
brandelh hat geschrieben:geht deine Frage nun auf Bezug zu "INLINE" (das hatte ich angenommen, bei meiner Antwort) oder zu "CLASS METHOD" ?
im Grunde die gesamte Syntax wie Pablo verwendet hat

Code: Alles auswählen

INLINE METHOD SetWordWrap(lOnOff,hDC)
       return ::mc__SetWordWrap(::hRtf,lOnOff,hDC)
       // ---------------------------------------------------------------------------------
INLINE CLASS METHOD mc__SetWordWrap(hRtf,lOnOff,hDC)
es wird von der (Inline) Method direkt auch die (Inline) CLASS Method "umgeleitet" ...
brandelh hat geschrieben:Eine CLASS METHOD ist einmalig für alle abgeleiteten Klassen, also alle nutzen die Gleiche :!: nicht eine Ableitung davon wie bei einer normalen Methode.
Wenn z.b. Eine STATIC immer genau einmal in allen verwendeten Objekten sein soll, dann legt man diese in einer CLASS METHOD oder als CLASS VAR an.
hm ... Ja ...
ich kannte es bislang nur als

Code: Alles auswählen

INLINE CLASS METHOD initclass()
local e,hDC
   if ot4xb() < OT4XB_MIN_VER
      e := Error():New()
      e:severity := 2
      e:description := cPrintf(,"xbp_rtf require ot4xb [%s] or higher.\r\n Current is %s", OT4XB_MIN_VER, ot4xb())
      Eval(ErrorBlock(),e)
   end
   @comctl32:InitCommonControlsEx({8,ICC_STANDARD_CLASSES})
   _fp_SendMessageA_ := nGetProcAddress("user32","SendMessageA")
return Self
was am Anfang meiner native Controls steht.