Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C# (Visual C#, Mono) » Analoge Uhr

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.05.2010, 10:27 Uhr
Sebastian



Hallo,

ich habe folgenden Code aber irgendwie zeichnet er mir keine Uhr auf die Form.
Das andere Problem das ich habe ist das bei der Funktion puplic uhr() ein Rückgabewert erwartet wird.


Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Uebung2Aufgabe1
{
    public partial class Form1 : Form
    {
        private Point center;
        private DateTime drawtime;
        private int lowest_size;
        public DateTime time = new DateTime(DateTime.Now.Ticks);
        private DateTime start = new DateTime(DateTime.Now.Ticks);
        
        public uhr()
        {
            if (this.Size.Width < this.Size.Height)
                lowest_size = this.Size.Width;
            else
                lowest_size = this.Size.Height;
            InitializeComponent();
            center = new Point(this.Size.Width/2, this.Size.Height/2);
        }

        //Kreis auf der Form positionieren
        Point getKreisPosition(int radius, int deg, Point p)
        {
            double x, y;
            x = Math.Sin((Math.PI / 180) * (deg));
            y = Math.Sin((Math.PI / 180) * (deg - 90));
            x *= radius;
            y *= radius;
            x += p.X;
            y += p.Y;
            return new Point((int)x, (int)y);
        }
                        
        void uhrZeichnen(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            
            //Stundenzeiger
            int h = drawtime.Hour % 12;
            Point c = getCirclePosition(lowest_size/5-10,((h*60 + drawtime.Minute)/2),center);
            Pen pen = new Pen(Color.Red, 7);
            pen.EndCap = System.Drawing.Drawing2D.LineCap.Triangle;
            pen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
            g.DrawLine(pen,center,c);
            
            //Minutenzeiger
            Point c = getCirclePosition(lowest_size/5,((drawtime.Minute*60 + drawtime.Second)/10),center);
            Pen pen = new Pen(Color.Blue, 5);
            pen.EndCap = System.Drawing.Drawing2D.LineCap.Triangle;
            pen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
            g.DrawLine(pen, center, c);
            
            //Sekundenzeiger
            Point c = getCirclePosition(lowest_size / 4, ((drawtime.Second * 1000 + drawtime.Millisecond) / 166), center);
            Pen pen = new Pen(Color.Black, 3);
            pen.EndCap = System.Drawing.Drawing2D.LineCap.Triangle;
            pen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
            g.DrawLine(pen, center, c);          
            
        }
        
        void similar_clock_Resize(object sender, EventArgs e)
        {
            if (this.Size.Width < this.Size.Height)
                lowest_size = this.Size.Width;
            else
                lowest_size = this.Size.Height;
            this.center = new Point(this.Size.Width / 2, this.Size.Height / 2);
            this.Invalidate(true);
        }
        
        //Ticker intervall einstellen
        void TickerTick(object sender, EventArgs e)
        {
            drawtime = new DateTime((DateTime.Now.Ticks - start.Ticks) + time.Ticks);
            this.Invalidate(true);
        }              
        public Form1()
        {
            InitializeComponent();
        }      
    }
}




Ich denke das es nicht viel sein kann.
Könnt ihr mir da weiterhelfen?

Danke.
Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.05.2010, 08:18 Uhr
Tommix



Hallo,

Zitat von Sebastian:
Hallo,
ich habe folgenden Code aber irgendwie zeichnet er mir keine Uhr auf die Form...


Du rufst uhrZeichnen in TimerTick auch gar nicht auf.

Zitat von Sebastian:

Das andere Problem das ich habe ist das bei der Funktion puplic uhr() ein Rückgabewert erwartet wird.


uhr() sieht aus wie ein Konstruktor, Deine Klasse heißt aber nicht uhr sondern Form1.

Gruß, Tommix

Dieser Post wurde am 16.05.2010 um 08:18 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.05.2010, 08:32 Uhr
Tommix



Ach Moment...
uhrZeichnen soll offenbar das Paint-Ereignis behandeln. Wenn Du das nicht von Hand programmieren willst, mußt Du im Form-Designer unter Eigenschaften / Ereignisse die Funktion auswählen. Ebenso für die Timer-Funktion (den Timer hast Du eingefügt?).
- Tommx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.05.2010, 09:16 Uhr
Sebastian



Hey Tommix,


Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Uebung2Aufgabe1
{
    public partial class Form1 : Form
    {
        private Point center;
        private DateTime drawtime;
        private int lowest_size;
        public DateTime time = new DateTime(DateTime.Now.Ticks);
        private DateTime start = new DateTime(DateTime.Now.Ticks);
        
        public Form1()
        {
            if (this.Size.Width < this.Size.Height)
                lowest_size = this.Size.Width;
            else
                lowest_size = this.Size.Height;
            InitializeComponent();
            center = new Point(this.Size.Width/2, this.Size.Height/2);
        }

        //Kreis auf der Form positionieren
        Point getKreisPosition(int radius, int deg, Point p)
        {
            double x, y;
            x = Math.Sin((Math.PI / 180) * (deg));
            y = Math.Sin((Math.PI / 180) * (deg - 90));
            x *= radius;
            y *= radius;
            x += p.X;
            y += p.Y;
            return new Point((int)x, (int)y);
        }
                        
        void uhrZeichnen(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            
            //Stundenzeiger
            int h = drawtime.Hour % 12;
            Point a = getKreisPosition(lowest_size/5-10,((h*60 + drawtime.Minute)/2),center);
            Pen penStun = new Pen(Color.Red, 7);
            penStun.EndCap = System.Drawing.Drawing2D.LineCap.Triangle;
            penStun.StartCap = System.Drawing.Drawing2D.LineCap.Round;
            g.DrawLine(penStun,center,a);
            
            //Minutenzeiger
            Point b = getKreisPosition(lowest_size/5,((drawtime.Minute*60 + drawtime.Second)/10),center);
            Pen penMin = new Pen(Color.Blue, 5);
            penMin.EndCap = System.Drawing.Drawing2D.LineCap.Triangle;
            penMin.StartCap = System.Drawing.Drawing2D.LineCap.Round;
            g.DrawLine(penMin, center, b);
            
            //Sekundenzeiger
            Point c = getKreisPosition(lowest_size / 4, ((drawtime.Second * 1000 + drawtime.Millisecond) / 166), center);
            Pen penSec = new Pen(Color.Black, 3);
            penSec.EndCap = System.Drawing.Drawing2D.LineCap.Triangle;
            penSec.StartCap = System.Drawing.Drawing2D.LineCap.Round;
            g.DrawLine(penSec, center, c);          
            
        }
        
        void similar_clock_Resize(object sender, EventArgs e)
        {
            if (this.Size.Width < this.Size.Height)
                lowest_size = this.Size.Width;
            else
                lowest_size = this.Size.Height;
            this.center = new Point(this.Size.Width / 2, this.Size.Height / 2);
            this.Invalidate(true);
        }
        
        //Ticker intervall einstellen
        private void timer1_Tick(object sender, EventArgs e)
        {
            drawtime = new DateTime((DateTime.Now.Ticks - start.Ticks) + time.Ticks);
            this.Invalidate(true);
        }              
        
    }
}



Ich habe jetzt einen Timer eingefügt das hatte ich offensichtlich vergessen.
Wo genau muss ich die Funktion uhrZeichnen aufrufen?
Das habe ich noch nicht ganz verstanden.

Danke
Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.05.2010, 09:53 Uhr
Tommix



So wie Du für den Timer das Tick-Ereignis behandelst, mußt Du für das Form das Paint-Ereignis behandeln, dafür ist die Funktion uhrZeichnen schon angelegt (von dem, der sie geschrieben hat ).
Dann zeichnet er schon mal was.
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.05.2010, 09:59 Uhr
Sebastian



:-D
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C# (Visual C#, Mono) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: