Benutzer mit den meisten Antworten
Aufgabe: Speedometer!

Frage
-
Hallo Leute,
ich brauche bei folgender Übungs-Aufgabe unbedingt eure Hilfe. Für die Programmier-und C# Cracks unter euch is das bestimmt ein Kinderspiel. Demjenigen oder denjenigen die mir helfen können werde ich danach auch ein Sixpack über PayPal spendieren!!
Hier die Aufgabenstellung: (Das ganze soll natürlich in Visual Studio gemacht werden)
"Zu implementieren ist ein Dialog zur Geschwindigkeitsanzeige. "
Hier ein Bild davon: http://tinypic.com/view.php?pic=2na49z9&s=6
1. Kernfunktionalität
a.) Der Benutzer kann den Anzeigebereich (Minimum, Maximum, Anzahl eingezeichne-ter Positionen) festlegen. Dabei dürfen Minimum und Maximum im Bereich von 0 bis 250 liegen und der Wert des Maximums muss größer als der des Minimums sein.
b.) Der Wertebereich wird durch Positionsstriche innerhalb einer Ellipse (s. 1a) angezeigt, wobei ca. 120 Grad ausgespart werden. Über einen Schieber kann der aktuelle ganz-zahlige Wert der Anzeige eingestellt werden. Die Anzeige erfolgt graphisch über eine „Anzeigenadel“ innerhalb der Ellipse.
c.) Der Benutzer kann optional Werte bei den Positionsstrichen anzeigen lassen.
d.) Die Anzeige des aktuellen Anzeigenwerts kann optional zusätzlich über die Darstel-lung des Zahlenwerts zentriert im unteren Drittel der Anzeigefläche erfolgen.
e.) Optional kann die Anzeige über eine Balkendarstellung im oberen Drittel ergänzt wer-den.
2. Erweiterte Funktionalität
a.) Implementieren Sie ein Menü über das u.A. der Font der Anzeige eingestellt werden kann und der Dialog beendet werden kann.
b.) Implementieren Sie weiterhin, dass die Schriftgröße der Anzeige eingestellt werden kann, und dass sie kursiv und fett dargestellt werden kann.
Es wäre der Wahnsinn wenn ihr mir helfen könntet!! und anschließend als .zip per E-Mail schickt oder so...- Bearbeitet Robert BreitenhoferModerator Montag, 18. Juni 2012 06:47 Titel Korrektur: war Suche dringend Hilfe bei folgender Aufgabe: Speedometer!
Antworten
-
Hallo,
eine Übungsaufgabe, also eine Aufgabe aus der Schule/Praktikum/Studium? Man lernt "mit der Hand am Arm", also indem man sich hinsetzt, sich selbst Gedanken über einen Lösungsweg macht und anfängt, die Aufgabe praktisch umsetzt.
Wenn Du Fragen zu dedizierten Problemen hast, wirst Du mit Sicherheit hier Antworten bekommen, aber Du wirst hier keine vorgefertigte komplette Lösung der Aufgabe erhalten. Wo wäre da auch sonst der Lerneffekt?
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort vorgeschlagen Elmar BoyeEditor Samstag, 2. Juni 2012 07:05
- Als Antwort markiert Robert BreitenhoferModerator Montag, 18. Juni 2012 06:49
Alle Antworten
-
Hallo,
eine Übungsaufgabe, also eine Aufgabe aus der Schule/Praktikum/Studium? Man lernt "mit der Hand am Arm", also indem man sich hinsetzt, sich selbst Gedanken über einen Lösungsweg macht und anfängt, die Aufgabe praktisch umsetzt.
Wenn Du Fragen zu dedizierten Problemen hast, wirst Du mit Sicherheit hier Antworten bekommen, aber Du wirst hier keine vorgefertigte komplette Lösung der Aufgabe erhalten. Wo wäre da auch sonst der Lerneffekt?
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort vorgeschlagen Elmar BoyeEditor Samstag, 2. Juni 2012 07:05
- Als Antwort markiert Robert BreitenhoferModerator Montag, 18. Juni 2012 06:49
-
Hi Freunde, gesagt getan! Habe jetzt soweit programmiert wie ich es verstanden habe, aber jetzt hab ich ein Problem oder gleich mehrere und komm nicht mehr weiter. Könnt ihr mir helfen?
Folgende Probleme:
1) Wenn ich die Tachonadel nach rechts schiebe, geht sie nur bis zum Wert 10.... erst wenn ich oben bei Maximum einen wert höher oder tiefer stelle (also von 150 auf 151 oder 149) geht sie auch tatsächlich bis zu diesem wert. Woran liegt das dass es beim Programmstart nur bis 10 geht? Ich finde den Fehler nicht...
2) Leider fängt meine Tachonadel nicht bei 0 an und hört auch nicht beim Maximalwert auf, sondern ist leicht verschoben...
3) Wie bekomme ich bei meiner Tachoanzeige auch die Zahlen unter meine Tachostriche? also nehmen wir an ich habe 10 Positionen (also 10 Tachostrichte) müsste ich folgende abstände haben 0, 15, 30, 45 usw... wie programmiert man das?
Hab das Programm auch mal hochgeladen, dann ist es für euch vielleicht einfacher den Code zu durchschauen.
http://www.file-upload.net/download-4417902/-bungsaufgabe_v1.rar.html (Download-Button ist der kleine mit dem grünen Pfeil nach unten)
Hier mein Quellcode:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace Uebungsaufgabe_v1
{
public partial class frmSpeedometer : Form
{
public frmSpeedometer()
{
InitializeComponent();
}
private void frmSpeedometer_Load(object sender, EventArgs e)
{
}
private void numMin_ValueChanged(object sender, EventArgs e)
{
trkBar.Minimum = (int)(numMin.Value);
ticks();
Refresh();
}
private void numMax_ValueChanged(object sender, EventArgs e)
{
trkBar.Maximum = (int)(numMax.Value);
ticks();
Refresh();
}
private void numPos_ValueChanged(object sender, EventArgs e)
{
ticks();
Refresh();
}
private void chkboxBalkenanzeige_CheckedChanged(object sender, EventArgs e)
{
if (chkboxBalkenanzeige.CheckState == CheckState.Checked)
{
prgBalken.Visible = true;
}
else
{
prgBalken.Visible = false;
}
}
private void chkboxZahlenangabe_CheckedChanged(object sender, EventArgs e)
{
if (chkboxZahlenangabe.CheckState == CheckState.Checked)
{
txtboxAnzeige.Visible = true;
}
else
{
txtboxAnzeige.Visible = false;
}
}
private void chkboxPositionswerte_CheckedChanged(object sender, EventArgs e)
{
Refresh();
}
private void trkBar_Scroll(object sender, EventArgs e)
{
txtboxAnzeige.Text = "" + trkBar.Value;
prgBalken.Minimum = trkBar.Minimum;
prgBalken.Maximum = trkBar.Maximum;
prgBalken.Value = trkBar.Value;
Refresh();
}
//Tachoanzeige
private void FrmSpeedometer_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
tachoDraw(e.Graphics, 0, 0, groupBoxAnzeige.Width - 20, groupBoxAnzeige.Height - 120);
}
private void tachoDraw(Graphics gr, int left, int top, int width, int height)
{
float dotRad = 0.01f;
Brush brush = new SolidBrush(this.ForeColor);
Pen pen = new Pen(brush);
Font drawFont = new Font("Arial", 12);
pen.Width = 2.5f;
//große Ellipse
gr.DrawEllipse(pen, left + 8, top + 15, width, height);
//Mittelpunkt
gr.FillEllipse(brush, (float)(left + 8 + width / 2 - 3), (float)(top + 15 + height / 2 - 3), 6, 6);
gr.TranslateTransform((float)(left + 8 + width / 2), (float)(top + 15 + height / 2));
gr.ScaleTransform(width, height);
gr.RotateTransform(150);
for (int ticks = 0; ticks < numPos.Value; ticks++)
{
gr.FillRectangle(brush, 0.5f - 4 * dotRad, -dotRad, 4 * dotRad, 2 * dotRad);
gr.RotateTransform(240f / ((float)(numPos.Value - 1)));
}
gr.RotateTransform(330);
pointerDraw(gr, brush, -10f, 1f);
gr.ResetTransform();
}
private void pointerDraw(Graphics gr, Brush brush, float pos, float relLength)
{
GraphicsState grState = gr.Save();
gr.RotateTransform(((int)(240 * (trkBar.Value / (numMax.Value - numMin.Value)) + 120)));
gr.FillPolygon(brush, new PointF[]{
new PointF(0,0), new PointF(0.05f, 0.02f),
new PointF(0.2f, 0.005f), new PointF(0.5f, 0.005f),
new PointF(0.5f, -0.005f), new PointF(0.2f, -0.005f),
new PointF(0.05f,-0.02f), new PointF(0,0)});
gr.Restore(grState);
}
private void ticks()
{
trkBar.TickFrequency = (int)(((float)(trkBar.Maximum - trkBar.Minimum) / (float)numPos.Value));
if (trkBar.TickFrequency >= 20)
trkBar.TickFrequency = 20;
}
private void groupBoxAnzeige_Enter(object sender, EventArgs e)
{
}
private void chkClock_CheckedChanged(object sender, EventArgs e)
{
if (chkClock.CheckState == CheckState.Checked)
{
txtboxClock.Visible = true;
}
else
{
txtboxClock.Visible = false;
}
}
private void txtboxClock_TextChanged(object sender, EventArgs e)
{
}
private void timer1_Tick_1(object sender, EventArgs e)
{
txtboxClock.Text = DateTime.Now.ToString();
Invalidate();
Update();
}
private void butExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}Wäre echt super wenn ich jetzt eine Hilfe bekäme!! Danke schonmal für alle die sich Mühe machen sich einzulesen!
-
Hi Freunde, gesagt getan! Habe jetzt soweit programmiert wie ich es verstanden habe, aber jetzt hab ich ein Problem oder gleich mehrere und komm nicht mehr weiter. Könnt ihr mir helfen?
Folgende Probleme:
1) Wenn ich die Tachonadel nach rechts schiebe, geht sie nur bis zum Wert 10.... erst wenn ich oben bei Maximum einen wert höher oder tiefer stelle (also von 150 auf 151 oder 149) geht sie auch tatsächlich bis zu diesem wert. Woran liegt das dass es beim Programmstart nur bis 10 geht? Ich finde den Fehler nicht...
Hallo kamikazemohr,
Bitte folge was Olaf Dir in seinem Beitrag geschrieben hat. Gib Dir ein wenig mehr Mühe die Sachen zu verstehen, zu lesen und experimentieren.
Also zu Frage 1) kannst Du sehen das trkBar (System.Windows.Forms.TrackBar) die Eigenschaft Maximum auf 10 hat und so startet auch dein Programm aber numMax (System.Windows.Forms.NumericUpDown) hat den Wert von 150 beim Start…einfach diese Werte abgleichen und der Punkt 1) ist gelöst:
private void frmSpeedometer_Load(object sender, EventArgs e)
{
trkBar.Maximum = (int)numMax.Value;
}
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.