Jak zaimplementować ruch wskazówki?

0

Witam,
Pisałem już w jendym poście, że robię pewien projekt, ale dzisiaj po głębszuch przemyśleniach doszedłem do wniosku ze najwiekszym problemem będzie zaimplementowanie ruchu wskazówki zegara. Projekt zakłąda że dane będę pobierane przez zewnętrze urządzenie mikroprocesorowe i zapisywane do zmiennej. Bedę musiał stworzyć sobie w jakimś photoshopie wirtualny zegar analogowy(nie zegar czasu, tylko zegar do pomiarów wielkości fizycznych). Zmienna będzie przyjmowała wartości w przedziale od (-50 do 200). Czyli np -50 to wskazówka ma być poziomo skierowana w lewą stronę, a jak będzie dwieście to w prawą, jak będzie na środku, pionowo to zmienna będzie miałą wartość pomięrdzy -50 a 200 czyli 125. Moim zadaniem jest teraz napisać taką aplikację. Gdzie mogę znaleźć takie materiały,

0

Przelicz na wartość na kąt, a potem narysuj kreskę pod odpowiednim kątem…

0

To wiem,
Ale jakich klas użyć etc. Przedewszystkiem jak dodać taki obrazek. i wskazówkę?

1

PictureBox

0

W bibliotece akademickiej znalazłem 2 książki które są dostępne

  1. Język C# 2010 i platforma .NET 4
  2. Język C# od podszewki.
    którą z nich polecacie?
    A może wypożyczyć obie?
0

Wiktor Zychla, C# Programowanie w Windows. Jest taki darmowy ebook na chomikach. Wg mnie napisany świetnym zwięzłym akademickim językiem. Plus ew zbiór zadań tego Pana do znalezienia na jego stronie WWW (google "wiktor zychla ii uw c#"). Plus MSDN. Mogę się mylić, ale wg mnie start w postaci tego materiału jest super.

0

Chciałbym wykorzystać buttony do załączania pewnych rzeczy w tym urządzeniu. Mam problem tylko ze zmianą koloru buttona, tzn. domyślnie po uruchomieniu aplikacji ma kolor czerwony, klikam na niego zielony, klikam kolejny raz czerwony i tak dalej, jak to zrobić?

0

Używasz WinForms czy WPF?
Obawiam się, że button z Windows Forms nie ma wbudowanej możliwości ustawiania koloru tła. Trzeba byłoby rysować kontrolkę ręcznie.
Ale możesz wykorzystać Panel zamiast Buttona.

0

Windows Forms.
Zrobiłem to tak:

private void button1_Click(object sender, EventArgs e)
        {
            if (i == true)
            {
                this.button1.BackColor = Color.Green;
                i = false;
                //pozostałe instrukcje
            }
            else if (i == false)
            {
                this.button1.BackColor = Color.Red;
                i = true;
                //pozostałe instrukcje
            }
        }

Kod działa, ale to chyba nie jest rozwiązanie zbyt eleganckie programistycznie?

0

Może lepiej po prostu sprawdzać kolor klikniętego buttona, bez dodatkowego bool'a. Odnośnie koloru czerwonego na starcie... Chyba zielony lepszy. Na zasadzie: zielony - zegar start, czerwony - zegar stop. Lecz to tylko detale.

private void button1_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;

            if (button.BackColor == Color.Green)
            {
                button.BackColor = Color.Red;
                //akcje dla start
            }
            else if (button.BackColor == Color.Red)
            {
                button.BackColor = Color.Green;
                //akcje dla stop;
            }        
        }
0

Jeszcze inaczej to zrobiłem.
Mam jeszcze pytanie odnośnie ruchu wskazówki(wirtualny termometr, barometr) lepiej taką aplikację stworzyć w WPF czy Windows Forms?

0

Polecam WPF i świetny artykuł:
http://www.silverlightshow.net/items/Red-To-Green-scale-using-an-IValueConverter.aspx
Progressbar zmieniający kolor w zależności od wartości - idealny na termometr

0

A da się go ustawić pionowo?

0

Da się. W jego właściwościach: transformation, angle.

0

Witam ponownie.
Mam problem z serialportem. Co sekundę odbieram z niego string

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            total = serialPort1.ReadExisting().ToString();
        }
 

i wypisuję w tekstoxie

this.textBox1.Text = total.ToString();

Liczba powinna wyglądać np. tak. 2189, problem w tym, że czasami ucina mi pierwszą lub pierwsze dwie cyfry i wychodzi z tego 189 lub 89.
Zakładamy, że problem siedzi tylko w programie na PC który piszę, a z mikrokontrolerem jest wszystko OK(Próbowałem dwoma innymi programami: Putty, i Realterm i wszystko jest OK)
Jak sobie z tym poradzić?
Z góry dziękuję za wskazówki.

0

A jak zrobić w C# automatyczne przewijanie wykresu? Co sekundę do wykresu dodawana jest nowa wartość, i wykres się zaczyna "zlewać", a chciałbym aby sam się przesuwał w lewo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1