PROBLEM beim erstellen von Diagrammen
-
Hallo,
ich befinde mich gerade in einem Praktikum an einer Fachhochschule und habe folgendes Problem:
Ich soll für meinen Professor ein Programm schreiben, das die CPU Auslastung in regelbaren Intervallen in einem Diagramm anzeigt.
An die CPU Auslastung zu kommen ist kein Problem, aber aufgrund der Tatsache das ich noch nie mit Borland gearbeitet habe,hab ich keinen Schimmer wie ich das jetzt in einem Diagramm darstellen kann
!Ich hoffe ihr könnt mir da (schnell) helfen da ich bis 16.00Uhr damit
fertig sein soll :(!!!Vielen Dank im Voraus Pumkicki
-
Hm... aus meiner Sicht besteht der schwierige Teil in der korrekten Messung der Prozessorauslastung. Jedenfalls wüsste ich nicht auf Anhieb, wie ich das machen würde.
Du hast Glück: die graphische Darstellung in einem Fenster ist recht einfach, und der Borland C++ Builder auch das ideale Werkzeug dazu!
Viele Wege führen nach Rom. Je nach dem, was du vorhast, gibt es bestimmt einen besseren Ansatz. Aber los geht's:
(1) Neues Projekt erstellen. Du siehst als Erstes ein Formular, oben die Palette mit "Komponenten", und links die Palette mit "Eigenschaften" und "Methoden". Ich habe den Builder gerade nicht vor mir, also stimmen die Bezeichnungen vielleicht nicht genau, aber sinngemäß.
(2) Auf der Komponentenpalette wählst du ein Image (Frame etc. geht meinetwegen auch). Durch Klicken und Ziehen zeichnest du auf deinem Formular ein Rechteck, quasi das Sichtfenster, in dem das Diagramm erscheinen soll.
(3) Auf der Komponentenpalette wählst du den "Timer" (Lasche "System" glaube ich). Du platzierst ihn mit einem Klick irgendwo auf dem Formular. Wo ist egal, ist eh unsichtbar.
(4) Der Timer müsste jetzt auch noch selektiert sein. Wenn nicht, klick' ihn an. In der Eigenschaften-Palette links stehen die Eigenschaften des Timers. Unter anderem, der Intervall in Millisekunden. Den Intervall stellst du ein, so wie du ihn haben willst. Meinetwegen 500ms. Wenn es für den Timer eine "Active"-Eigenschaft gibt, stell sie auf True. (Ich würde die Eigenschaft "Active" eher im OnCreate- oder OnShow-Ereignis der Form setzen, dazu später mehr.)
(5) Der Timer löst enstprechend des gewählten Intervalls alle x Millisekunden ein sog. Ereignis aus ("OnTimer"), sprich: es wird eine Prozedur / Funktion / Methode aufgerufen. In diese Methode schreibst du deinen Code zum Malen des Diagramms (auch hier: normalerweise malt man im OnPaint-Ereignis der Komponente oder Form, und würde im OnTimer die Daten aktualisieren und dann das Neuzeichnen auslösen)
(6) Timer selektiert. In der Eigenschaftenpalette die Lasche "Methoden"/"Ereignisse"/"Events" auswählen. Dort findest du eine Zeile "OnTimer" oder "OnTick" oder ähnlich. Doppelklicke auf die leere Zelle rechts daneben. Im Editor-Fenster springt der Cursor an eine neu angelegte Methode für dein Ereignis. Dort fügst du den Code ein, der alle X ms ausgeführt werden soll.
(7) Malen. Merk dir den Namen der Image-/Frame-Komponente, die du vorher aufs Formular gezogen hast. Du kannst den Namen in ihrer Eigenschaftenpalette auch ändern. Ich nenne die Komponente mal "Diagramm". Bestimmte Komponenten haben eine Eigenschaft namens Canvas. Das ist sozusagen die Leinwand, die Malfläche. Die Leinwand bietet verschieden Funktionen zum Zeichnen: Linien, Kreise, Rechtecke, Text... und Eigenschaften die man setzen kann, wie Malfarbe, Hintergrundfarbe usw. Farben sind idR TColor (Hilfe anschauen). Du solltest zunächst mal die passende Farbe setzen. Das geht dann etwa mit
Diagramm->Canvas->Color = RGB(...)Linien zeichnen kannst du dann mit:
Diagramm->Canvas->MoveTo (x1,y1);
Diagramm->Canvas->LineTo (x2,y2);Rechtecke mit:
Diagramm->Canvas->Rectangle(x1,y1,x2,y2);
usw. usw.Ich würde in der OnTimer-Routine erst einmal den Zeichenbereich löschen. Dazu Füllfarbe auf Weiss setzen, mit Canvas->Rectangle ein Rechteck malen, das so gross ist wie die Zeichenfläche.
Die Größe der Zeichenfläche kriegst du mit Diagramm->GetClientRect(&r);
wobei r eine "TRect"-Struktur ist. Kurz nachschauen.Dann die Linienfarbe setzen, und die entpsprechenden Linien zeichnen.
Zu guter Letzt:
Koordinatensystem des "Canvas" ist in Pixeln. Bezugspunkt ist die obere linke Ecke der Zeichenfläche. +x geht nach unten, +y nach rechts.Viel Erfolg!
-
Ach so, und um die Intervalle regelbar zu machen, könntest du z.B. eine "Slider"-Komponente (das sind diese Regler) auf der Form platzieren, und in deren OnChange-Ereignis (wenn ich mich richtig erinnere) enstprechend des aktuellen Slider-Wertes den Timer-Intervall setzen (etwa: Timer1->Interval = xxx).
Wie gesagt, hab den Builder gerade nicht da, kommt alles aus meiner blassen Erinnerung.
-
man kann allerdings auch TChart benutzen, das spart das selbstzeichnen des Diagramms und man kann mit dem Timer immer einen neuen Punkt zum Chart hinzufügen
die grafischen Einstellungen des Chart macht man am besten zur Entwurfszeit, und die Eingabe der Werte und die Achsenskalierung zur Laufzeit
TLineSeries *LineSerie = new TLineSeries(Chart1); LineSerie->ParentChart = Chart1; LineSerie->Clear(); LineSerie->XValues->Order = loAscending; //beim Timer LineSerie->AddXY( X, Y, "", clTeeColor ); //Achsen Chart1->BottomAxis->Minimum = 0; Chart1->BottomAxis->Maximum = 100; Chart1->BottomAxis->Increment = 10;
-
Super Tipp mit dem TChart!!
Das ist ein tolles Beispiel, wie schnell man mit dem Builder so was hinkriegen kann. Das Borland Komponenten-Konzept ist wirklich sehr fein!
-
Danke, eure Tipps funktionieren einwandfrei. Das das mit Borland dermaßen einfach geht überrascht mich ja jetzt doch! Jetzt muss ich nur noch
den Timer wie von KrautFritz beschrieben regelbar machen und dann kann ich
endlich Mittagspause machen :D.MfG MesoBoB
Edit: Oh ich merk grad das ich mit dem Account von meinem Bruder drin war.