Grafische Anzeige

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Grafische Anzeige

Beitrag 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é
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Grafische Anzeige

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Re: Grafische Anzeige

Beitrag 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é
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Grafische Anzeige

Beitrag von RSBasic »

Schau mal in der PB-Hilfe unter 2DDrawing.
Da gibt es einige Gradient-Befehle.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Grafische Anzeige

Beitrag 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
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Grafische Anzeige

Beitrag 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
a²+b²=mc²
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Re: Grafische Anzeige

Beitrag 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é
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Antworten