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