Seite 1 von 1

Grafische Anzeige

Verfasst: 16.03.2011 22:29
von Elektrolurch
Hi

Ich habe mal eine grundlegende Frage.
Ich habe in meinem Program eine kleine Testfunktion die die Netzwerkverbindung über einen längeren Zeitraum testet.
Sie zeigt an ob der Ping erfolgreich war und wie die Pingzeit lag.
Nun habe ich mir gedacht man könnte ja die Meßzeiten irgendwie schnuckelig grafisch darstellen. (Eyecatcher)
Nur wie macht man sowas?
Ich habe so etwas bisher noch nicht gemacht.
Hat da jemand Beispiele, Bilder oder Codeschnipsel?

Danke schon mal im voraus.

BYe André

Re: Grafische Anzeige

Verfasst: 16.03.2011 22:35
von RSBasic
Du kannst das gerne mit 2DDrawing einen Liniendiagramm erstellen.
Das könnte vielleicht für dich hilfreich sein: http://www.purebasic.fr/german/viewtopi ... 8&p=286918
Du musst nur die Input-Werte ändern.

Re: Grafische Anzeige

Verfasst: 17.03.2011 10:20
von Elektrolurch
Hi RSBasic

danke für deinen Post.
So etwas ähnliches hatte ich auch schon mal.
Ich hatte damals so eine Art Balkendiagramm welches dann durchlief.
Allerdings war mir es etwas zu pixelig.
Ich hätte gerne den Hintergrund mit einer art Farbverlauf von Grün > Gelb > Rot gehabt.
Eigentlich müßte man ja die Grafik mit einem Bild hinterlegen können, oder?

Mal sehen vielleicht fällt mir ja noch was ein.

BYe André

Re: Grafische Anzeige

Verfasst: 17.03.2011 10:48
von RSBasic
Schau mal in der PB-Hilfe unter 2DDrawing.
Da gibt es einige Gradient-Befehle.

Re: Grafische Anzeige

Verfasst: 17.03.2011 11:19
von c4s
Elektrolurch hat geschrieben:Ich hätte gerne den Hintergrund mit einer art Farbverlauf von Grün > Gelb > Rot gehabt.
Schau dir am Besten mal die Gradient-Befehle an, z.B. LinearGradient():

Code: Alles auswählen

If OpenWindow(0, 0, 0, 400, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	If CreateImage(0, 400, 200) And StartDrawing(ImageOutput(0))
		Box(0, 0, 400, 200, $FFFFFF)

		DrawingMode(#PB_2DDrawing_Gradient)      
		GradientColor(1.0, $00FF00)  ; Grün
		GradientColor(0.5, $00FFFF)  ; Gelb
		GradientColor(0.0, $0000FF)  ; Rot
		;BackColor($00FFFF)
		;FrontColor($FF0000)

		LinearGradient(0, 0, 200, 200)    
		Circle(100, 100, 100)   
		LinearGradient(350, 100, 250, 100)
		Circle(300, 100, 100)

		StopDrawing() 
		ImageGadget(0, 0, 0, 400, 200, ImageID(0))
	EndIf

	Repeat
		Event = WaitWindowEvent()
	Until Event = #PB_Event_CloseWindow
EndIf

Re: Grafische Anzeige

Verfasst: 17.03.2011 12:26
von Kiffi
@Elektrolurch: es gibt eine schöne DLL (rmchart), für
die ABBKlaus einen PB-Wrapper gebastelt hat:

http://www.purebasicpower.de/?RMChart

Grüße ... Kiffi

Re: Grafische Anzeige

Verfasst: 17.03.2011 23:09
von Elektrolurch
Hi
Danke für eure Ratschläge ich habe mir alle bis auf Kiffi's alle mal angesehen.
Ich habe mal als kleine Teststudie aus allem etwas zusammen gebastelt.

Code: Alles auswählen

;Kleines grafische Tool zum anpingen einer Adresse im eigenen Netzwerk
Global IP_Adresse.s = "192.168.1.6" ;Die anzupingende Adresse 
CreateImage(1, 440, 240, 24)
CreateImage(2, 440, 240, 24)
Procedure Thread(z)
  Protected LineYCounter = 25
  Protected LineYCounter2
  Protected Zufall
  Protected oldZufall
  Protected lngHPort, strMessage.s, MsgLen, lngDAddress
  Protected *ECHO.ICMP_ECHO_REPLY, Result
  lngHPort     = IcmpCreateFile_()
  strMessage.s = "Echo This Message back to me"
  MsgLen       = Len(strMessage)
  lngDAddress  = MakeIPAddress(Val(StringField(IP_Adresse.s, 1, ".")), Val(StringField(IP_Adresse.s, 2, ".")), Val(StringField(IP_Adresse.s, 3, ".")), Val(StringField(IP_Adresse.s, 4, ".")))
  *buffer      = AllocateMemory(SizeOf(ICMP_ECHO_REPLY) + MsgLen + 16)
  ECHO.ICMP_ECHO_REPLY
  Repeat
    FreeImage(2)
    CopyImage(1, 2)
    If StartDrawing(ImageOutput(1))
      DrawingMode(#PB_2DDrawing_Gradient)
      GradientColor(1.0, $00FF00)  ; Grün
      GradientColor(0.5, $00FFFF)  ; Gelb
      GradientColor(0.0, $0000FF)  ; Rot
      LinearGradient(0, 0, 0, 200)
      Box(0, 0, 480, 240, $FFFFFF)
      DrawingMode(#PB_2DDrawing_Default)
      Line(ImageWidth(1) - 1, 0, 1, 1, RGB(0, 0, 0))
      Line(ImageWidth(1) - 1, 80, 1, 1, RGB(0, 0, 0))
      Line(ImageWidth(1) - 1, 160, 1, 1, RGB(0, 0, 0))
      Line(ImageWidth(1) - 1, 239, 1, 1, RGB(0, 0, 0))
      If LineYCounter = 25
        Line(ImageWidth(1) - 1, 0, 1, 240, $000000)
        LineYCounter = 0
      Else
        LineYCounter + 1
      EndIf
      DrawImage(ImageID(2), -1, 0)
      If IcmpSendEcho_(lngHPort, lngDAddress, @strMessage, MsgLen, #Null, *buffer, SizeOf(ICMP_ECHO_REPLY) + MsgLen, 1000)
        CopyMemory(*Buffer, ECHO, SizeOf(ICMP_ECHO_REPLY))
        PTime.i = ECHO\RoundTripTime
      EndIf
      If  PTime.i < 10
        Wert.i = PTime.i / 0.125
      ElseIf  PTime.i < 101
        Wert.i = PTime.i / 0.625
      ElseIf  PTime.i < 1000
        Wert.i = PTime.i / 4.167
      EndIf
    EndIf
    If LineYCounter2 = 4
      LineXY(ImageWidth(1) - 5, 240 - oldWert.i, ImageWidth(1) - 1, 240 - Wert.i, RGB(12, 15, 243))
      LineYCounter2   = 0
      oldWert.i       = Wert.i
    Else
      LineYCounter2 + 1
    EndIf
    StopDrawing()
    ;EndIf
    SetGadgetState(1, ImageID(1))
    Delay(10)
  ForEver
EndProcedure
If OpenWindow(0, 0, 0, 500, 270, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ImageGadget(1, 10, 20, 0, 0, ImageID(1), 0)
  StartDrawing(ImageOutput(1))
  Box(0, 0, 440, 240, $FFFFFF)
  DrawingMode(#PB_2DDrawing_Gradient)
  GradientColor(1.0, $00FF00)  ; Grün
  GradientColor(0.5, $00FFFF)  ; Gelb
  GradientColor(0.0, $0000FF)  ; Rot
  LinearGradient(0, 0, 0, 200)
  Box(0, 0, 480, 240, $FFFFFF)
  TextGadget(10, 5, 10, 40, 20, "1000ms", #PB_Text_Right)
  TextGadget(11, 5, 90, 40, 20, "100ms", #PB_Text_Right)
  TextGadget(12, 5, 170, 40, 20, "10ms", #PB_Text_Right)
  DrawingMode(#PB_2DDrawing_Default)
  Line(ImageWidth(1) - 1, 0, 1, 1, RGB(0, 0, 0))
  Line(ImageWidth(1) - 1, 80, 1, 1, RGB(0, 0, 0))
  Line(ImageWidth(1) - 1, 160, 1, 1, RGB(0, 0, 0))
  Line(ImageWidth(1) - 1, 239, 1, 1, RGB(0, 0, 0))
  StopDrawing()
  ImageGadget(1, 50, 20, 480, 240, ImageID(1))
  CreateThread(@Thread(), 0)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
So in der Art hatte ich mir das auch vorgestellt.
Den Code kann man sicher noch verbessern und komprimieren, aber wie gesagt das ist nur ein Versuch.

@Kiffi ich denke für die dll werde ich wohl erst am Wochenende Zeit haben.
Mit einer dll habe ich bisher noch garnicht gearbeitet.

BYe André