Seite 2 von 2
Verfasst: 25.03.2007 20:34
von Kaeru Gaman
na ist doch ein guter anfang.
was mir auffällt: du hast zeichnen und registrieren nicht getrennt.
also, wenn du nach links scrollst zum ansehen, und dann ein zeichenvorgang stattfindet, bist du wieder am rechten ende.
du solltest das trennen, also nur ins array schreiben und die darstellung in einer anderen procedure durchführen,
besonders im hinblick darauf dass du letztendlich ja alle 0.5sec einen wert schreiben willst,
und das wohl sowieso in einem timer-thread machen solltest.
für die sache mit dem finescrollen über trackbar, da gibt es bestimmt auch eine lösung.
trenne mal testweise die darstellung von der event-schleife, und packe die auch in einen eigenen thread wo du die momentane stellung des trackbars ausliest...
wie das genau funktionieren kann, weiß ich nicht, ich bin nicht so der win/gadget-crack...
Verfasst: 25.03.2007 20:43
von Kiffi
legion hat geschrieben:Das Gadget schickt nach bewegen des Balkens die Position nur in einem Stück.
dafür benötigst Du meines Erachtens einen Callback:
http://www.purebasic.fr/german/viewtopic.php?t=11865
Grüße ... Kiffi
Verfasst: 25.03.2007 20:54
von Kaeru Gaman
yo klingt gut...
trotzdem: die erfassung von der darstellung trennen...

Verfasst: 25.03.2007 22:16
von Kiffi
Kaeru Gaman hat geschrieben:trotzdem: die erfassung von der darstellung trennen...

... wogegen ich ja auch nix gesagt habe
Grüße ... Kiffi
Verfasst: 26.03.2007 01:42
von Kaeru Gaman
Kiffi hat geschrieben:Kaeru Gaman hat geschrieben:trotzdem: die erfassung von der darstellung trennen...

... wogegen ich ja auch nix gesagt habe
Grüße ... Kiffi
... was ich auch garnicht behautet habe
mir ging es drum, das nochmal zu unterstreichen, weil es meiner ansicht nach essenziell ist.
und da ich bezüglich des scrollbars in meinem posting auch von einem thread sprach,
der von dir vorgeschlagene callback aber sicher effektiver ist,
wollte ich nochmal unterstreichen, dass die negierung meines
einen teilgedankens nicht die negierung des anderen nach sich zieht.
HUGH
Verfasst: 26.03.2007 10:52
von legion
Hallo !
Habe ein Callback für das ScrollBarGadget eingebaut und versucht die Procedure "ScrollPicture" in einem eigenen Thread zu starten. Aber leider
funzt das nicht so wie ich mir das vorgestellt habe.
Der Thread meldet im Debugger "1" aber läuft nicht ! Warum ?
Danke Legion !
Code: Alles auswählen
Enumeration
#Window_0
EndEnumeration
Enumeration
#TrackBar_0
#ScrollBar_0
#Text_0
EndEnumeration
Global X = 0
Global Y = 218
Global Dim XYArray.l(999999)
Global Startpos.l = 0
Global ScrollPos.l
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 664, 537, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
OpenWindowedScreen(WindowID(#Window_0),20,20,620,435,0,0,0)
TrackBarGadget(#TrackBar_0, 20, 500, 620, 30, 0, 435)
SetGadgetState(#TrackBar_0,218)
ScrollBarGadget(#ScrollBar_0, 20, 460, 620, 20, 0, 620, 620)
TextGadget(#Text_0, 290, 485, 200, 15, "Bewege mich ! ! ! ! ")
EndIf
EndIf
EndProcedure
Procedure Schreibe()
Protected i
ClearScreen($402010)
StartDrawing(ScreenOutput())
FrontColor($80C020)
DrawingMode(1)
XYArray(X)= GetGadgetState(#TrackBar_0)
If X > 620
Startpos = Startpos -1
SetGadgetAttribute(#ScrollBar_0, #PB_ScrollBar_Maximum, GetGadgetAttribute(#ScrollBar_0, #PB_ScrollBar_Maximum)+1)
SetGadgetState(#ScrollBar_0, 620 + X)
EndIf
For i = 1 To X
LineXY(Startpos+i,XYArray(i-1),Startpos+i+1,XYArray(i),$67FDB0)
Next i
StopDrawing()
X = X + 1
EndProcedure
Procedure ScrollPicture(Parameter)
Protected i
If GetGadgetAttribute(#ScrollBar_0, #PB_ScrollBar_Maximum) > 640
ClearScreen($402010)
StartDrawing(ScreenOutput())
FrontColor($80C020)
DrawingMode(1)
For i = 0 To 640
LineXY(i,XYArray(i+ScrollPos),i+1,XYArray(ScrollPos+i+1),$67FDB0)
Next i
StopDrawing()
EndIf
EndProcedure
Procedure WindowCallback(hWnd.l,uMsg.l,wParam.l,lParam.l)
If uMsg = #WM_HSCROLL And lParam = GadgetID(#ScrollBar_0)
ScrollPos= GetGadgetState(#ScrollBar_0)
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
InitSprite()
InitKeyboard()
Open_Window_0()
SetWindowCallback(@WindowCallback())
Scrollthread = CreateThread(@ScrollPicture(), 154)
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
If Event = #PB_Event_Gadget
If GadgetID = #TrackBar_0
Schreibe()
ElseIf GadgetID = #ScrollBar_0
;ScrollPicture()
EndIf
EndIf
FlipBuffers()
Until Event = #PB_Event_CloseWindow
End
;
Verfasst: 26.03.2007 11:16
von legion
Sorry !
Hab den Fehler schon gefunden.
Ohne Repeat-Schleife funktioniert es natürlich nicht !
Lg. Legion