Delphi-PRAXiS
Seite 11 von 12   « Erste     91011 12      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Grafik Programmierung (https://www.delphipraxis.net/198304-grafik-programmierung.html)

Contace 29. Okt 2018 18:08

AW: Grafik Programmierung
 
Hallo Harry Stahl,

ich versuche den code besser zu verstehen und habe dazu noch einige Fragen.

Du hast 2 Circle ein inneren als rand ?

Den äußeren für die Zahlen selber ?

Du hast quasi die nummern entlang des äußeren Cicle kopiert ?


Grüße

Harry Stahl 29. Okt 2018 20:47

AW: Grafik Programmierung
 
Ja, das hast Du richtig verstanden.

Allerdings möchte ich mich den Anmerkungen einiger Anderer hier anschließen und Dir doch raten, dass Du Dich zunächst einmal mit den Grundlagen der Programmierung und der Pascal-Sprache beschäftigst. Auf Amazon findest Du einiges (Stichwörter etwa wie Grundkurs Pascal, Delphi Programmierung, etc.).

Leider gibt es kein Buch, welches einen Grundkurs zur Programmierung mit dem aktuellen Delphi unter direkter Verwendung von FMX anbietet (jedenfalls kenne ich keines), insofern wird da nichts anderes übrig bleiben, als erst mal mit der VCL das Wesentliche zu Pascal und Delphi zu lernen.

Evtl. kann hier jemand anderes noch ein gutes Buch für den Einstieg empfehlen.

Contace 29. Okt 2018 21:49

AW: Grafik Programmierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Harry Stahl,

ja das seh ich genauso, nur ohne referenz werd ich nicht viel lernen können.

Ich bin mittlerweile auf visual umgestiegen zur graphikprogrammierung gibt es da genug bücher.

Allerdings hab ich ein problem, ich weiß nicht warum der Kreis nicht ganz rum geht.


Grüße

Code:
protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        SetScale(g);
        DrawFace(g);
        base.OnPaint(e);
    }
    private void InitializeComponent()
    {
        this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
        this.ClientSize = new System.Drawing.Size(800, 600);

    }

    [STAThread]
    static void Main()
    {
        Application.Run(new DrawStringAlignACircle());
    }

    private void SetScale(Graphics g)
    {
        g.TranslateTransform(Width / 2, Height / 2);

        float inches = Math.Min(Width / g.DpiX, Height / g.DpiX);

        g.ScaleTransform(inches * g.DpiX / 2000, inches * g.DpiY / 2000);
    }

    private void DrawFace(Graphics g)
    {
        Brush brush = new SolidBrush(ForeColor);
        Font font = new Font("Arial", 15);

        float x, y;

        const int numHours = 100;
        const int deg = 360 / numHours;
        const int FaceRadius = 700;

        for (int i = 1; i <= numHours; i++)
        {
            x = GetCos(i * deg + 90) * FaceRadius;
            y = GetSin(i * deg - 90) * FaceRadius;

            StringFormat format = new StringFormat();
            format.Alignment = StringAlignment.Center;
            format.LineAlignment = StringAlignment.Center;

            g.DrawString(i.ToString(), font, brush, -x, -y, format);

        }
        brush.Dispose();
        font.Dispose();
    }

    private static float GetSin(float degAngle)
    {
        return (float)Math.Sin(Math.PI * degAngle / 180f);
    }

    private static float GetCos(float degAngle)
    {
        return (float)Math.Cos(Math.PI * degAngle / 180f);
    }

}

Medium 29. Okt 2018 22:25

AW: Grafik Programmierung
 
Zitat:

Zitat von Contace (Beitrag 1417065)
nur ohne referenz werd ich nicht viel lernen können.

Deshalb mein Hinweis auf F1: Dahinter verbirgt sich die Online-Hilfe, welche recht gut als Referenz dient.

Zitat:

Ich bin mittlerweile auf visual umgestiegen zur graphikprogrammierung gibt es da genug bücher.
Und sicherlich auch Foren, in denen dir dann weit besser geholfen werden kann als in diesem Delphi-Forum.

Zitat:

Allerdings hab ich ein problem, ich weiß nicht warum der kreis nicht gefüllt wird und wie ich den zirkel verdoppeln kann.
Mit gefüllt meinst du vermutlich, dass die Zahlen nicht ganz rum gehen. Das wird daran liegen, dass du "deg" als "int" deklarierst, und der dabei entstehende Rundungfehler nachher mit multipliziert wird. Das sollte fast sicher als "float" deklariert werden. (Lernen was welche Typen können und wofür man sie einsetzt lohnt sich in allen Sprachen!)

Was du mit "Zirkel verdoppeln" meinst erschließt sich mir nicht wirklich.

Contace 29. Okt 2018 22:44

AW: Grafik Programmierung
 
Hallo Medium,

danke für den Hinweis, es funktioniert super. :thumb:

Ich meinte wie ich mehrere Kreise mit nummern bekomme.


Grüße

Medium 29. Okt 2018 23:05

AW: Grafik Programmierung
 
Das gleiche nochmal, nur mit anderem FaceRadius. Spiel einfach mal etwas mit den Zahlen herum die da so verteilt in "deinem" Code stehen und schau was sie machen. Rumfummeln ist auch eine super Lernmethode!

Contace 29. Okt 2018 23:06

AW: Grafik Programmierung
 
Was meintest Du mit das gleiche nochmal ?

Anderes problem ist ich weiß nicht wie ich die abstände rein bekomme und die linien dazu

Grüße



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

public class DrawStringAlignACircle : System.Windows.Forms.Form
{
    private System.ComponentModel.Container components = null;

    public DrawStringAlignACircle()
    {
        InitializeComponent();
        BackColor = SystemColors.Window;
        ForeColor = SystemColors.WindowText;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        SetScale(g);
        DrawFace(g);
        base.OnPaint(e);
    }
    private void InitializeComponent()
    {
        this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
        this.ClientSize = new System.Drawing.Size(800, 600);

    }

    [STAThread]
    static void Main()
    {
        Application.Run(new DrawStringAlignACircle());
    }

    private void SetScale(Graphics g)
    {
        g.TranslateTransform(Width / 2, Height / 2);

        float inches = Math.Min(Width / g.DpiX, Height / g.DpiX);

        g.ScaleTransform(inches * g.DpiX / 2000, inches * g.DpiY / 2000);
    }

    private void DrawFace(Graphics g)
    {
        Brush brush = new SolidBrush(ForeColor);
        Font font = new Font("Arial", 20);

        float x, y;

        const float kreis = 90;
        const float deg = 360 / kreis;


        const float FaceRadius = 800;

        for (int i = 1; i <= kreis; i++)
        {
            x = GetCos(i * deg + 90) * FaceRadius;
            y = GetSin(i * deg - 90) * FaceRadius;

            StringFormat format = new StringFormat();
            format.Alignment = StringAlignment.Center;
            format.LineAlignment = StringAlignment.Center;

            g.DrawString(i.ToString(), font, brush, -x, -y, format);

        }
        brush.Dispose();
        font.Dispose();
    }

    private static float GetSin(float degAngle)
    {
        return (float)Math.Sin(Math.PI * degAngle / 180f);
    }

    private static float GetCos(float degAngle)
    {
        return (float)Math.Cos(Math.PI * degAngle / 180f);
    }

}

KodeZwerg 29. Okt 2018 23:40

AW: Grafik Programmierung
 
Na das ist ja mal eine Reise, wenn man sich alles von vorne durchliest.
Kreis in Delphi, Kinokarten, Visual, wie wo was, wieder zu Delphi weils ein Beispiel gab um 50 Posts später wieder auf Visual zu gehen.
Solange Du Dich wohl fühlst, darauf finde ich kommt es am meisten an, ist ja alles geregelt, egal in welcher Sprache.

Contace 29. Okt 2018 23:44

AW: Grafik Programmierung
 
Hallo KodeZwerg,

ja ich habe anfangs probleme gehabt aber ich denke visual ist super.

Allerdings kann ich mich hier nicht von dem Forum trennen, es ist das beste...:cry:


Grüße

Neutral General 30. Okt 2018 09:12

AW: Grafik Programmierung
 
Warum ignorierst du jeden Ratschlag erstmal die Grundlagen zu lernen? :roll:
Du hast doch in dieser ganzen Odyssee nur Code aus Tutorials abgeschrieben und wenn etwas nicht geklappt hat, hast du die Hände in die Luft geworfen und "Hilfe" geschrieen und den Code einfach so abgeändert wie der nächste Beitrag dir das empfohlen hat.
Es kann dich nicht eine ganze Foren-Community Zeile für Zeile durch deinen Code begleiten - so läuft das nicht :!:
Ich verstehe auch ehrlich gesagt nicht warum Leute dir hier überhaupt noch Quelltext diktieren... :roll:

Sein "Visual" Code ist z.B. zu 100% einfach von hier abgeschrieben:
http://www.java2s.com/Tutorial/CShar...ongacircle.htm
(abgesehen von 2 Werten die er bei sich geändert hat..)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 Uhr.
Seite 11 von 12   « Erste     91011 12      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz