Seite 1 von 2
Polyline von der GDi32 funktioniert nicht so...
Verfasst: 21.07.2014 19:51
von funker
Hallo, guten Tag.
Es wird im CanvasGadget nur eine waagerechte Linie gezeichnet von 0,0 - 200,0.
Es sollen aber 3 Linienzüge werden. Wo liegt bitte der Fehler.
Danke.
Gruss
Code: Alles auswählen
Global hdc.l,poly.l
*poly=AllocateMemory(24)
PokeL(*poly,10)
PokeL(*poly+4,10)
PokeL(*poly+8,100)
PokeL(*poly+12,150)
PokeL(*poly+16,190)
PokeL(*poly+20,100)
Declare asm_polyline()
If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, 200, 200)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = 0
If EventType() = #PB_EventType_LeftButtonDown
hdc = StartDrawing(CanvasOutput(0))
asm_polyline()
StopDrawing()
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Procedure asm_polyline()
Polyline_(hdc,@poly,3)
EndProcedure
Re: Polyline von der GDi32 funktioniert nicht so...
Verfasst: 21.07.2014 20:29
von STARGÅTE
Ganz Einfach, Du verwendest oben *poly, aber unten nur poly.
Außerdem ist hdc eine Integer und keine Long !
Ein EnableExplicit hätte geholfen.
Code: Alles auswählen
EnableExplicit
Global hdc.i, *poly
*poly=AllocateMemory(24)
PokeL(*poly,10)
PokeL(*poly+4,10)
PokeL(*poly+8,100)
PokeL(*poly+12,150)
PokeL(*poly+16,190)
PokeL(*poly+20,100)
Declare asm_polyline()
Define Event.i
If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, 200, 200)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = 0
If EventType() = #PB_EventType_LeftButtonDown
hdc = StartDrawing(CanvasOutput(0))
asm_polyline()
StopDrawing()
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Procedure asm_polyline()
Polyline_(hdc,*poly,3)
EndProcedure
Re: Polyline von der GDi32 funktioniert nicht so...
Verfasst: 21.07.2014 20:31
von Danilo
Oder Du nimmst ein Array dafür und sparst Dir die umständlichen PokeL's.
Re: Polyline von der GDi32 funktioniert nicht so...
Verfasst: 21.07.2014 21:56
von funker
Jup, danke.
Es funktioniert jetzt nachdem ich : Global hdc.l,*poly
gesetzt habe und *poly im Aufruf verwendet habe.
Integer und Long ist bei mir egal weil ich nur mit 32Bit-System spiele.
Danke.
Gruss
Re: Polyline von der GDi32 funktioniert nicht so...
Verfasst: 21.07.2014 22:05
von NicTheQuick
funker hat geschrieben:Integer und Long ist bei mir egal weil ich nur mit 32Bit-System spiele.
Aber wäre es nicht ein schöner Lerneffekt, wenn du trotzdem Integer nutzt? Dann macht man das irgendwann auch automatisch richtig. Und wenn man schließlich mal ein Programm für ein 64-Bit-System erstellen will, dann muss man auch nichts mehr ändern.

Re: Polyline von der GDi32 funktioniert nicht so...
Verfasst: 21.07.2014 22:14
von STARGÅTE
funker hat geschrieben:Integer und Long ist bei mir egal weil ich nur mit 32Bit-System spiele.
Das mag bei dir zutreffen, aber du stellt deine Fragen/Codes ja hier im Forum, und sehr viele nutzen 64Bit als standardkompiler. Somit haben "wir" nur mehr Arbeit.
Du kannst in solchen Fällen auch ein Vermerk im Code machen: "32-Bit only" oder so
Re: Polyline von der GDi32 funktioniert nicht so...
Verfasst: 21.07.2014 22:15
von funker
Jup, da hast du recht mit Long und Integer.
Mit einem Array erscheint keine Polygon.
Und mit diesem Aufruf kommt eine Fehlermeldung: Polyline_(hdc,poly(0),3)
Gruss
Code: Alles auswählen
Global hdc.l,poly.l
Dim poly(5)
Declare asm_polyline()
poly(0)=10
poly(1)=10
poly(2)=100
poly(3)=150
poly(4)=190
poly(5)=150
If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu)
CanvasGadget(0, 10, 10, 200, 200)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = 0
If EventType() = #PB_EventType_LeftButtonDown
hdc = StartDrawing(CanvasOutput(0))
asm_polyline()
StopDrawing()
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Procedure asm_polyline()
Polyline_(hdc,poly,3)
EndProcedure
Re: Polyline von der GDi32 funktioniert nicht so...
Verfasst: 21.07.2014 22:21
von edel
Das Array muss ebenfalls "Global" sein, sonst kannst du innerhalb einer Procedure nicht darauf zugreifen.
Wenn du ein Array übergeben willst, musst du auch die Klammern angeben. Poly und Poly() sind zwei verschiedene Variablen.
Re: Polyline von der GDi32 funktioniert nicht so...
Verfasst: 21.07.2014 22:26
von funker
Jup, ich dachte es geht so in 2 Zeilen :
Global hdc.l,poly.l
Dim poly(5)
Danke.
Gruss
Re: Polyline von der GDi32 funktioniert nicht so...
Verfasst: 22.07.2014 06:36
von Danilo
Der Zeiger *poly, die long-Variable poly.l und ein long-Array poly() sind 3 verschiedene Objekte,
die nichts miteinander zu tun haben.