Direct2D Beispiel & Problem [D2D1RenderTarget\DrawLine]

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Direct2D Beispiel & Problem [D2D1RenderTarget\DrawLine]

Beitrag von Mijikai »

Minimaler Testcode für Direct2D in PureBasic.

Leider funktioniert das Zeichnen von Linien noch nicht :(
Ich hab noch nicht herausgefunden woran es liegt. :cry:

Wäre um jede Hilfe dankbar :)

Testcode (d2d1.lib von VS wird benötigt!) :

Code: Alles auswählen

;Ugly Direct2D example!
;by Mijikai
;PB 5.62 x64 Win 10

Import "d2d1.lib"
  D2D1CreateFactory(FactoryType.i,IID.i,*FactoryOptions,*IFactory)
EndImport

Structure D2D1_PIXEL_FORMAT
  Format.l
  AlphaMode.l
EndStructure

Structure D2D1_RENDER_TARGET_PROPERTIES
  Type.l
  PixelFormat.D2D1_PIXEL_FORMAT
  DpiX.f
  DpiY.f
  Usage.l
  MinLevel.l
EndStructure

Structure D2D1_POINT_F
  X.f
  Y.f
EndStructure

Structure D2D1_SIZE_U
  X.l
  Y.l
EndStructure

Structure D2D1_HWND_RENDER_TARGET_PROPERTIES
  Hwnd.i
  PixelSize.D2D1_SIZE_U
  PresentOptions.i
EndStructure

Structure D2D1_COLOR_F
  R.f
  G.f
  B.f
  A.f
EndStructure

Structure D2D1_MATRIX_3X2_F
  _11.f
  _12.f
  _21.f
  _22.f
  _31.f
  _32.f
EndStructure

Structure D2D1_BRUSH_PROPERTIES
  Opacity.f
  Transform.D2D1_MATRIX_3X2_F
EndStructure  

Structure D2D1_RECT_F
  Left.f
  Top.f
  Right.f
  Bottom.f
EndStructure

Enumeration D2D1_FACTORY_TYPE
  #D2D1_FACTORY_TYPE_SINGLE_THREADED
  #D2D1_FACTORY_TYPE_MULTI_THREADED
EndEnumeration

Interface ID2D1Factory Extends IUnknown
  ReloadSystemMetrics()
  GetDesktopDpi(*dpiX,*dpiY)
  CreateRectangleGeometry(*Rectangle,*RectangleGeometry)
  CreateRoundedRectangleGeometry(*RoundedRectangle,*RoundedRectangleGeometry)
  CreateEllipseGeometry(*Ellipse,*EllipseGeometry)
  CreateGeometryGroup(FillMode.i,*Geometries,GeometriesCount.i,*GeometrieGroup)
  CreateTransformedGeometry(*SourceGeometry,Transform.i,*TransformedGeometry)    
  CreatePathGeometry(*PathGeometry)
  CreateStrokeStyle(*StrokeStyleProperties,*Dashes,DashesCount.i,*StrokeStyle)
  CreateDrawingStateBlock(*DrawingStateDescription,*TextRenderingParams,*DrawingStateBlock)
  CreateWicBitmapRenderTarget(*Target,*RenderTargetProperties,*RenderTarget)
  CreateHwndRenderTarget(*RenderTargetProperties,*HwndRenderTargetProperties,*HwndRenderTarget)
  CreateDxgiSurfaceRenderTarget(*DxgiSurface,*RenderTargetProperties,*RenderTarget)
  CreateDCRenderTarget(*RenderTargetProperties,*DCRenderTarget)
EndInterface

Interface ID2D1Resource Extends IUnknown
  GetFactory(*Factory)
EndInterface

Interface ID2D1RenderTarget Extends ID2D1Resource
   CreateBitmap(*Size,*ScrData,Pitch.i,*BitmapProperties,*Bitmap)
	CreateBitmapFromWicBitmap(*BitmapSource,*Desc,*Bitmap)
	CreateSharedBitmap(IID.i,*Data,*Desc,*Bitmap)
	CreateBitmapBrush(*Bitmap,*BitmapBrush,*BitmapBrushDesc,*Brush)
	CreateSolidColorBrush(*Color,*Desc,*Brush)
	CreateGradientStopCollection(*Stops,StopCount.i,Gamma.i,ExtendMode.i,*Gradient)
	CreateLinearGradientBrush(*GradientBrushDesc,*BrushDesc,*Gradient,*Brush)
	CreateRadialGradientBrush(*GradientBrushDesc,*BrushDesc,*Gradient,*Brush)
	CreateCompatibleRenderTarget(*Size,*PixelSize,*Format,Options.i,*RenderTarget)
   CreateLayer(*Size,*Layer)
	CreateMesh(*Mesh)
	DrawLine(*P1,*P2,*Brush,Width.f,*StrokeStyle)
	DrawRectangle(*Rect,*Brush,Width.f,*StrokeStyle)
	FillRectangle(*Rect,*Brush)
	DrawRoundedRectangle(*Rect,*Brush,Width.f,*StrokeStyle)
	FillRoundedRectangle(*Rect,*Brush)
   DrawEllipse(*Ellipse,*Brush,Width.f,*StrokeStyle)
	FillEllipse(*Ellipse,*Brush)
	DrawGeometry(*Geometry,*Brush,Width.f,*StrokeStyle)
	FillGeometry(*Geometry,*Brush,*OpacityBrush)
	FillMesh(*Mesh,*Brush)
	FillOpacityMask(*Mask,*Brush,Content.i,*DestRect,*SrcRect)
	DrawBitmap(*Bitmap,*DstRect,Opacity.f,InterpolationMode.i,*SrcRect)
	DrawText(String.s,StringSize.i,*TextFormat,*LayoutRect,*Brush,Options.i,MeasuringMode.i)
	DrawTextLayout(*Origin,*Layout,*Brush,Options.i)
	DrawGlyphRun(*Origin,*GlyphRun,*Brush,MeasuringMode.i)
	SetTransform(*Transform)
	GetTransform(*Transform)
	SetAntialiasMode(AntiAliasMode.i)
	GetAntialiasMode()
	SetTextAntialiasMode(AntiAliasMode.i)
	GetTextAntialiasMode()
	SetTextRenderingParams(*TextRenderingParams)
	GetTextRenderingParams(*TextRenderingParams)
	SetTags(Tag1.i,Tag2.i)
	GetTags(*Tag1,*Tag2)
	PushLayer(*LayerParameters,*Layer)
	PopLayer()
	Flush(*Tag1,*Tag2)
	SaveDrawingState(*StateBlock)
	RestoreDrawingState(*StateBlock)
	PushAxisAlignedClip(*ClipRect,AntiAliasMode.i)
	PopAxisAlignedClip()
	Clear(*Color)
	BeginDraw()
	EndDraw(*Tag1,*Tag2)
	GetPixelFormat()
	SetDpi(DpiX.f,DpiY.f)
	GetDpi(*DpiX,*DpiY)
	GetSize()
	GetPixelSize()
	GetMaximumBitmapSize()
	IsSupported(*Desc)
EndInterface

Procedure.i CreateFactory()
  Protected *Factory
  If D2D1CreateFactory(#D2D1_FACTORY_TYPE_SINGLE_THREADED,?IID_ID2D1Factory,#Null,@*Factory) = #S_OK 
    ProcedureReturn *Factory  
  EndIf
  ProcedureReturn #Null
  IID_ID2D1Factory:;{06152247-6f50-465a-9245-118bfd3b6007}
  !dd 006152247h
  !dw 06f50h,0465ah
  !db 092h,045h,011h,08bh,0fdh,03bh,060h,007h
EndProcedure

Procedure.i Window();UGLY EXAMPLE
  Protected Windown.i
  Protected Event.i
  Protected DX.f
  Protected DY.f
  Protected D2D1Factory.ID2D1Factory
  Protected D2D1RenderTarget.ID2D1RenderTarget
  Protected RenderTarget.D2D1_RENDER_TARGET_PROPERTIES
  Protected HwndTargetProperties.D2D1_HWND_RENDER_TARGET_PROPERTIES
  Protected BrushRed.i
  Protected Color.D2D1_COLOR_F
  Protected ColorBackground.D2D1_COLOR_F
  Protected BrushProperties.D2D1_BRUSH_PROPERTIES
  Protected Box.D2D1_RECT_F
  Protected P0.D2D1_POINT_F
  Protected P1.D2D1_POINT_F
  D2D1Factory = CreateFactory()
  If D2D1Factory
    Window = OpenWindow(#PB_Any,#Null,#Null,400,400,"Direct 2D - Test!",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    If Window
      D2D1Factory\GetDesktopDpi(@DX,@DY)
      RenderTarget\DpiX = DX
      RenderTarget\DpiY = DY
      HwndTargetProperties\Hwnd = WindowID(Window)
      HwndTargetProperties\PixelSize\X = 400
      HwndTargetProperties\PixelSize\Y = 400
      If D2D1Factory\CreateHwndRenderTarget(@RenderTarget,@HwndTargetProperties,@D2D1RenderTarget) = #S_OK
        If D2D1RenderTarget
          Color\a = 1
          Color\b = 0
          Color\g = 0
          Color\r = 1
          ColorBackground\A = 1
          BrushProperties\Opacity = 0.5
          If D2D1RenderTarget\CreateSolidColorBrush(@Color,@BrushProperties,@BrushRed) = #S_OK  
            Repeat
              Event = WindowEvent()
              Select Event
                Case #PB_Event_CloseWindow
                  Break
              EndSelect
              Box\Left = 10
              Box\Top = 10
              Box\Right = 40 + Box\Left 
              Box\Bottom = 40 + Box\Top
              D2D1RenderTarget\BeginDraw()
              D2D1RenderTarget\Clear(@ColorBackground)
              D2D1RenderTarget\FillRectangle(@Box,BrushRed)
              Box\Left = 20
              Box\Top = 20
              Box\Right = 40 + Box\Left
              Box\Bottom = 40 + Box\Top; this is the correct way to calculate it!
              D2D1RenderTarget\DrawRectangle(@Box,BrushRed,2,#Null)
              P0\X = 10
              P0\Y = 10
              P1\X = 100
              P1\Y = 100
             D2D1RenderTarget\DrawLine(@P0,@P1,BrushRed,1,#Null);DOES NOT WORK?!
                                                                 ;void DrawLine(
                                                                 ;[in] D2D1_POINT_2F p0,
                                                                 ;[in] D2D1_POINT_2F p1,
                                                                 ;[in] ID2D1Brush *brush,
                                                                 ;[in] float stroke_width,
                                                                 ;[in] ID2D1StrokeStyle *stroke_style
                                                                 ;);
              D2D1RenderTarget\EndDraw(#Null,#Null)
            ForEver
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
EndProcedure;better release all resources & interfaces!!!

Window()
(Eigentlich wollte ich alles in nützliche & einfache Funktionen verpacken
und dann erst Veröffentlichen - wegen DrawLine komm ich leider nicht voran... :bluescreen: )
Zuletzt geändert von Mijikai am 22.03.2018 21:53, insgesamt 2-mal geändert.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Direct2D Beispiel & Problem [D2D1RenderTarget\DrawLine]

Beitrag von _JON_ »

Wenn Ich es als x86 Ausführe, gibt es eine IMA bei der Drawline Zeile.

Kann leider nicht viel probieren bei mir friert die PB IDE, bei fast jedem Klick auf diese Zeile komplett ein. :shock:
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Direct2D Beispiel & Problem [D2D1RenderTarget\DrawLine]

Beitrag von Mijikai »

Ich denke c++ macht irgendwas anders mit der Übergabe von D2D1_POINT_F...
Leider sind meine c++ Kenntnisse zu bescheiden :(

In den c++ Beispielen wird das Ergebnis der Hilfsfunktion übergeben (d2d1helper.h):

Code: Alles auswählen

D2D1FORCEINLINE
D2D1_POINT_2F
    Point2F(
        FLOAT x = 0.f,
        FLOAT y = 0.f
        )
    {
        return Point2<FLOAT>(x, y);
    }

Edit: hab grad gesehen das die Paramater im geposteten Beispiel bei DrawLine falsch übergeben werden...
Habs geändert allerdings funktioniert es trotzdem nicht!

:(
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Direct2D Beispiel & Problem [D2D1RenderTarget\DrawLine]

Beitrag von _JON_ »

Hab's mal in c++ angeschaut D2D1_POINT_F ist keine Strutur sondern ein Pair.

Code: Alles auswählen

;Ugly Direct2D example!
;by Mijikai
;PB 5.62 x64 Win 10

Import "d2d1.lib"
  D2D1CreateFactory(FactoryType.i,IID.i,*FactoryOptions,*IFactory)
EndImport

Structure D2D1_PIXEL_FORMAT
  Format.l
  AlphaMode.l
EndStructure

Structure D2D1_RENDER_TARGET_PROPERTIES
  Type.l
  PixelFormat.D2D1_PIXEL_FORMAT
  DpiX.f
  DpiY.f
  Usage.l
  MinLevel.l
EndStructure

Structure D2D1_POINT_F
  X.f
  Y.f
EndStructure

Structure D2D1_SIZE_U
  X.l
  Y.l
EndStructure

Structure D2D1_HWND_RENDER_TARGET_PROPERTIES
  Hwnd.i
  PixelSize.D2D1_SIZE_U
  PresentOptions.i
EndStructure

Structure D2D1_COLOR_F
  R.f
  G.f
  B.f
  A.f
EndStructure

Structure D2D1_MATRIX_3X2_F
  _11.f
  _12.f
  _21.f
  _22.f
  _31.f
  _32.f
EndStructure

Structure D2D1_BRUSH_PROPERTIES
  Opacity.f
  Transform.D2D1_MATRIX_3X2_F
EndStructure  

Structure D2D1_RECT_F
  Left.f
  Top.f
  Right.f
  Bottom.f
EndStructure

Enumeration D2D1_FACTORY_TYPE
  #D2D1_FACTORY_TYPE_SINGLE_THREADED
  #D2D1_FACTORY_TYPE_MULTI_THREADED
EndEnumeration

Interface ID2D1Factory Extends IUnknown
  ReloadSystemMetrics()
  GetDesktopDpi(*dpiX,*dpiY)
  CreateRectangleGeometry(*Rectangle,*RectangleGeometry)
  CreateRoundedRectangleGeometry(*RoundedRectangle,*RoundedRectangleGeometry)
  CreateEllipseGeometry(*Ellipse,*EllipseGeometry)
  CreateGeometryGroup(FillMode.i,*Geometries,GeometriesCount.i,*GeometrieGroup)
  CreateTransformedGeometry(*SourceGeometry,Transform.i,*TransformedGeometry)    
  CreatePathGeometry(*PathGeometry)
  CreateStrokeStyle(*StrokeStyleProperties,*Dashes,DashesCount.i,*StrokeStyle)
  CreateDrawingStateBlock(*DrawingStateDescription,*TextRenderingParams,*DrawingStateBlock)
  CreateWicBitmapRenderTarget(*Target,*RenderTargetProperties,*RenderTarget)
  CreateHwndRenderTarget(*RenderTargetProperties,*HwndRenderTargetProperties,*HwndRenderTarget)
  CreateDxgiSurfaceRenderTarget(*DxgiSurface,*RenderTargetProperties,*RenderTarget)
  CreateDCRenderTarget(*RenderTargetProperties,*DCRenderTarget)
EndInterface

Interface ID2D1Resource Extends IUnknown
  GetFactory(*Factory)
EndInterface

Interface ID2D1RenderTarget Extends ID2D1Resource
   CreateBitmap(*Size,*ScrData,Pitch.i,*BitmapProperties,*Bitmap)
   CreateBitmapFromWicBitmap(*BitmapSource,*Desc,*Bitmap)
   CreateSharedBitmap(IID.i,*Data,*Desc,*Bitmap)
   CreateBitmapBrush(*Bitmap,*BitmapBrush,*BitmapBrushDesc,*Brush)
   CreateSolidColorBrush(*Color,*Desc,*Brush)
   CreateGradientStopCollection(*Stops,StopCount.i,Gamma.i,ExtendMode.i,*Gradient)
   CreateLinearGradientBrush(*GradientBrushDesc,*BrushDesc,*Gradient,*Brush)
   CreateRadialGradientBrush(*GradientBrushDesc,*BrushDesc,*Gradient,*Brush)
   CreateCompatibleRenderTarget(*Size,*PixelSize,*Format,Options.i,*RenderTarget)
   CreateLayer(*Size,*Layer)
   CreateMesh(*Mesh)
   DrawLine(*P1,*P2,*Brush,Width.f,*StrokeStyle)
   DrawRectangle(*Rect,*Brush,Width.f,*StrokeStyle)
   FillRectangle(*Rect,*Brush)
   DrawRoundedRectangle(*Rect,*Brush,Width.f,*StrokeStyle)
   FillRoundedRectangle(*Rect,*Brush)
   DrawEllipse(*Ellipse,*Brush,Width.f,*StrokeStyle)
   FillEllipse(*Ellipse,*Brush)
   DrawGeometry(*Geometry,*Brush,Width.f,*StrokeStyle)
   FillGeometry(*Geometry,*Brush,*OpacityBrush)
   FillMesh(*Mesh,*Brush)
   FillOpacityMask(*Mask,*Brush,Content.i,*DestRect,*SrcRect)
   DrawBitmap(*Bitmap,*DstRect,Opacity.f,InterpolationMode.i,*SrcRect)
   DrawText(String.s,StringSize.i,*TextFormat,*LayoutRect,*Brush,Options.i,MeasuringMode.i)
   DrawTextLayout(*Origin,*Layout,*Brush,Options.i)
   DrawGlyphRun(*Origin,*GlyphRun,*Brush,MeasuringMode.i)
   SetTransform(*Transform)
   GetTransform(*Transform)
   SetAntialiasMode(AntiAliasMode.i)
   GetAntialiasMode()
   SetTextAntialiasMode(AntiAliasMode.i)
   GetTextAntialiasMode()
   SetTextRenderingParams(*TextRenderingParams)
   GetTextRenderingParams(*TextRenderingParams)
   SetTags(Tag1.i,Tag2.i)
   GetTags(*Tag1,*Tag2)
   PushLayer(*LayerParameters,*Layer)
   PopLayer()
   Flush(*Tag1,*Tag2)
   SaveDrawingState(*StateBlock)
   RestoreDrawingState(*StateBlock)
   PushAxisAlignedClip(*ClipRect,AntiAliasMode.i)
   PopAxisAlignedClip()
   Clear(*Color)
   BeginDraw()
   EndDraw(*Tag1,*Tag2)
   GetPixelFormat()
   SetDpi(DpiX.f,DpiY.f)
   GetDpi(*DpiX,*DpiY)
   GetSize()
   GetPixelSize()
   GetMaximumBitmapSize()
   IsSupported(*Desc)
EndInterface

Procedure.i CreateFactory()
  Protected *Factory
  If D2D1CreateFactory(#D2D1_FACTORY_TYPE_SINGLE_THREADED,?IID_ID2D1Factory,#Null,@*Factory) = #S_OK 
    ProcedureReturn *Factory  
  EndIf
  ProcedureReturn #Null
  IID_ID2D1Factory:;{06152247-6f50-465a-9245-118bfd3b6007}
  !dd 006152247h
  !dw 06f50h,0465ah
  !db 092h,045h,011h,08bh,0fdh,03bh,060h,007h
EndProcedure

Procedure.i Window();UGLY EXAMPLE
  Protected Windown.i
  Protected Event.i
  Protected DX.f
  Protected DY.f
  Protected D2D1Factory.ID2D1Factory
  Protected D2D1RenderTarget.ID2D1RenderTarget
  Protected RenderTarget.D2D1_RENDER_TARGET_PROPERTIES
  Protected HwndTargetProperties.D2D1_HWND_RENDER_TARGET_PROPERTIES
  Protected BrushRed.i
  Protected Color.D2D1_COLOR_F
  Protected ColorBackground.D2D1_COLOR_F
  Protected BrushProperties.D2D1_BRUSH_PROPERTIES
  Protected Box.D2D1_RECT_F
  Protected P0.D2D1_POINT_F
  Protected P1.D2D1_POINT_F
  D2D1Factory = CreateFactory()
  If D2D1Factory
    Window = OpenWindow(#PB_Any,#Null,#Null,400,400,"Direct 2D - Test!",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    If Window
      D2D1Factory\GetDesktopDpi(@DX,@DY)
      RenderTarget\DpiX = DX
      RenderTarget\DpiY = DY
      HwndTargetProperties\Hwnd = WindowID(Window)
      HwndTargetProperties\PixelSize\X = 400
      HwndTargetProperties\PixelSize\Y = 400
      If D2D1Factory\CreateHwndRenderTarget(@RenderTarget,@HwndTargetProperties,@D2D1RenderTarget) = #S_OK
        If D2D1RenderTarget
          Color\a = 1
          Color\b = 0
          Color\g = 0
          Color\r = 1
          ColorBackground\A = 1
          BrushProperties\Opacity = 0.5
          If D2D1RenderTarget\CreateSolidColorBrush(@Color,@BrushProperties,@BrushRed) = #S_OK  
            Repeat
              Event = WindowEvent()
              Select Event
                Case #PB_Event_CloseWindow
                  Break
              EndSelect
              Box\Left = 10
              Box\Top = 10
              Box\Right = 40 + Box\Left 
              Box\Bottom = 40 + Box\Top
              D2D1RenderTarget\BeginDraw()
              D2D1RenderTarget\Clear(@ColorBackground)
              D2D1RenderTarget\FillRectangle(@Box,BrushRed)
              Box\Left = 20
              Box\Top = 20
              Box\Right = 40 + Box\Left
              Box\Bottom = 40 + Box\Top; this is the correct way to calculate it!
              D2D1RenderTarget\DrawRectangle(@Box,BrushRed,2,#Null)
;               P0\X = 10
;               P0\Y = 10
;               P1\X = 100
;               P1\Y = 100
;               
              Protected qPoint0.q, qPoint1.q
              
              *f.float = @qPoint0
              *f\f = 10
              *f + SizeOf(Float)
              *f\f = 10
              
              *f.float = @qPoint1
              *f\f = 100
              *f + SizeOf(Float)
              *f\f = 100
              
             D2D1RenderTarget\DrawLine(qPoint0,qPoint1,BrushRed,1,#Null);DOES NOT WORK?!
                                                                 ;void DrawLine(
                                                                 ;[in] D2D1_POINT_2F p0,
                                                                 ;[in] D2D1_POINT_2F p1,
                                                                 ;[in] ID2D1Brush *brush,
                                                                 ;[in] float stroke_width,
                                                                 ;[in] ID2D1StrokeStyle *stroke_style
                                                                 ;);
              D2D1RenderTarget\EndDraw(#Null,#Null)
            ForEver
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
EndProcedure;better release all resources & interfaces!!!

Window()
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Direct2D Beispiel & Problem [D2D1RenderTarget\DrawLine]

Beitrag von Mijikai »

_JON_ hat geschrieben:Hab's mal in c++ angeschaut D2D1_POINT_F ist keine Strutur sondern ein Pair.

...
Vielen Dank :praise: :D
Jetzt kann ich weiter machen.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Direct2D Beispiel & Problem [D2D1RenderTarget\DrawLine]

Beitrag von mk-soft »

Wer die D2D1.Lib nicht haben sollte. Wie ich :cry:

Hier der Ersatzcode

Code: Alles auswählen

; Import "d2d1.lib"
;   D2D1CreateFactory(FactoryType.i,IID.i,*FactoryOptions,*IFactory)
; EndImport

Prototype.i ProtoD2D1CreateFactory(FactoryType.i,IID.i,*FactoryOptions,*IFactory)
If OpenLibrary(0, "D2D1.dll")
  Global D2D1Createfactory.ProtoD2D1CreateFactory = GetFunction(0, "D2D1CreateFactory")
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten