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...
xy-Endlos-Schreiber für Daten von Messgerät
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
dafür benötigst Du meines Erachtens einen Callback:legion hat geschrieben:Das Gadget schickt nach bewegen des Balkens die Position nur in einem Stück.
http://www.purebasic.fr/german/viewtopic.php?t=11865
Grüße ... Kiffi
a²+b²=mc²
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
... was ich auch garnicht behautet habeKiffi hat geschrieben:... wogegen ich ja auch nix gesagt habeKaeru Gaman hat geschrieben:trotzdem: die erfassung von der darstellung trennen...
Grüße ... Kiffi

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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- legion
- Beiträge: 467
- Registriert: 08.10.2006 18:04
- Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
- Wohnort: Wien
- Kontaktdaten:
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 !
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
;
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!