xy-Endlos-Schreiber für Daten von Messgerät

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo klingt gut...

trotzdem: die erfassung von der darstellung trennen... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Kaeru Gaman hat geschrieben:trotzdem: die erfassung von der darstellung trennen... ;)
... wogegen ich ja auch nix gesagt habe ;-)

Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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:

Beitrag 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
;
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
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:

Beitrag von legion »

Sorry !
Hab den Fehler schon gefunden.
Ohne Repeat-Schleife funktioniert es natürlich nicht !

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Antworten