Ist sowas mit Canvas möglich?

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Ist sowas mit Canvas möglich?

Beitrag von sstvmaster »

Hallo

ich möchte gern so etwas machen wie in den Bildern zu sehen ist. Außerdem sollen 2 Zeiger, einer für IST und einer für SOLL, eingezeichnet werden und sich bewegen.
Ist das überhaupt möglich?

LG Maik

el.bmp
el.bmp (101.77 KiB) 3459 mal betrachtet
az.bmp
az.bmp (103.05 KiB) 3459 mal betrachtet
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Ist sowas mit Canvas möglich?

Beitrag von theo »

Klar ist das möglich. Du kannst auf den Canvas malen was du willst.
Du kannst auch gleich das Bild als Hintergrund nehmen und dann nur noch den Zeiger drauf malen.

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Ist sowas mit Canvas möglich?

Beitrag von sstvmaster »

Ok danke, und wie? Gibt es ein Canvas Tutorial oder so? Scripte für ne Uhr wurden hier im Forum schon behandelt. Als Grundlage zum spielen würde ich mir so ein Script nehmen.

Kann mir jemand da noch ein paar Tipps geben wie ich das mit den Zahlen usw. machen kann?
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Ist sowas mit Canvas möglich?

Beitrag von wp_xyz »

z.B. das:
http://wiki.freepascal.org/Drawing_with_canvas/de
http://www.hh.schule.de/hhs/delphi/Graf ... elphi1.pdf

Bei der Textausgabe (mit Canvas.TextOut(x,y, text)) ist zu beachten, dass am Ort (x,y) die linke obere Ecke des Textes liegt. Du musst alse die Position jeder Zahl separat korrigieren. Dazu brauchst du sicher etwas geometirsches Verständnis, sowie das Wissen, dass Canvas.TextWidth(text) die Breite und Canvas.TextHeight(text) die Höhe eines Textes ermitteln (in Pixeln),

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Ist sowas mit Canvas möglich?

Beitrag von sstvmaster »

Danke für die Links und die Hinweise.

So habe jetzt mal ein Uhren Script angepasst. Leider bekomme ich das mit dem Rechtecken nicht so hin wie im Beispielbild oben.
Wie bekomme ich den schwarzen Rahmen um die Roten Kreise weg? Wie kann ich die kanten glätten?

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure DrawHands;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
  xcenter:integer = 80;
  ycenter:integer = 80;
  lastxs,lastys,lastxm,lastym,lastxh,lastyh:integer;
 
  clockbg: tbitmap;
 
  scond, minute, hour: integer;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure Tform1.DrawHands();
var
  HH,MM,SS,MS: Word;
  xhour, yhour, xminute, yminute, xsecond, ysecond, second, minute, hour: Integer;
  cSecond, cMinute, cHour: TColor;
begin
  // hand colors
  cSecond:=clGreen;
  cMinute:=clBlue;
  cHour:=clRed;
 
  // get the time
  DecodeTime(Time,HH,MM,SS,MS);
  second:=SS;
  minute:=MM;
  hour:=HH;
 
  // calculation of (x, y) points where the hands will point to
  xsecond := round(cos(second * pi / 30 - pi / 2) * 80 + xcenter);
  ysecond := round(sin(second * pi / 30 - pi / 2) * 80 + ycenter);
  xminute := round(cos(minute * pi / 30 - pi / 2) * 60 + xcenter);
  yminute := round(sin(minute * pi / 30 - pi / 2) * 60 + ycenter);
  xhour := round(cos((hour * 30 + minute / 2) * pi / 180 - pi / 2) * 40 + xcenter);
  yhour := round(sin((hour * 30 + minute / 2) * pi / 180 - pi / 2) * 40 + ycenter);
 
  with Canvas do begin
 
    // drawing the hands
    pen.Color:=cSecond;
    Line(xcenter, ycenter, xsecond, ysecond);
    pen.Color:=cMinute;
    Line(xcenter, ycenter - 1, xminute, yminute);
    Line(xcenter - 1, ycenter, xminute, yminute);
    pen.Color:=cHour;
    Line(xcenter, ycenter - 1, xhour, yhour);
    Line(xcenter - 1, ycenter, xhour, yhour);
 
  end;
 
  // some info we can use later...
  lastxs := xsecond;
  lastys := ysecond;
  lastxm := xminute;
  lastym := yminute;
  lastxh := xhour;
  lastyh := yhour;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var a,b,c: integer;
begin
  clockbg:=tbitmap.Create;
  clockbg.SetSize(160,160);
  with clockbg.Canvas do begin
    // background clearing
    Brush.Color:=RGBToColor(0,90,82);
    FillRect(0,0,160,160);
 
    // clock area
    Brush.Color:=clWhite;
    Ellipsec(xcenter, ycenter, 160, 160);
 
    // draw numbers...
    Font.Color:=clBlack;
    Font.Size:=8;
    Brush.Style:=bsClear;
    b:=1;
    c:=30;
    while b <= 11 do
    begin
        TextOut(round(cos((b*30)*pi/180-pi/2)*68+xcenter-10),
                round(sin((b*30)*pi/180-pi/2)*68+ycenter-7), IntToStr(c));
        b:=b+1;
        c:=c+30;
    end;
    TextOut(round(cos((12*30)*pi/180-pi/2)*68+xcenter-10),
            round(sin((12*30)*pi/180-pi/2)*68+ycenter-7), '0');
 
    // draw the red circle
    Brush.Style:=bsSolid;
    Brush.Color:=clRed;
    a:=1;
    while a <= 12 do
    begin
      EllipseC(
        round(cos((a*30)*pi/180-pi/2)*50+xcenter),
        round(sin((a*30)*pi/180-pi/2)*50+ycenter),
        4,4);
        a:=a+1;
    end;
 
    // draw the black dots
    Brush.Style:=bsSolid;
    Brush.Color:=clBlack;
    a:=1;
    while a <= 36 do
    begin
      Rectangle(
        round(cos((a*10)*pi/180-pi/2)*48+xcenter),
        round(sin((a*10)*pi/180-pi/2)*48+ycenter),
        round(cos((a*10)*pi/180-pi/2)*52+xcenter),
        round(sin((a*10)*pi/180-pi/2)*52+ycenter)
        );
        a:=a+1;
    end;
 
  end;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  if clockbg <> nil then
    FreeAndNil(clockbg);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if clockbg <> nil then begin
    Canvas.Draw(0,0,clockbg);
    //DrawHands;
  end;
end;
 
end.
 
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: Ist sowas mit Canvas möglich?

Beitrag von Nixsager »

@sstvmaster
Danke für das Posten des Codes!
Ich habe mal für ein Programm eine Analoge Uhr machen wollen, aber die ganze Mathematik dahinter ist mir zu hoch.
Deswegen habe ich mit einer Funktion (die habe ich aus dem Internet) mehrere Grafiken für verschiedenen Einheiten genommen und sie entsprechend gedreht.
Jetzt kann ich mir eine bessere Funktion bauen. :D
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Ist sowas mit Canvas möglich?

Beitrag von Mathias »

Wie bekomme ich den schwarzen Rahmen um die Roten Kreise weg?

Code: Alles auswählen

  Canvas.Pen.Color := clRed;
  Canvas.Brush.Color := clRed;
  Canvas.Ellipse(100, 100, 200, 200);


Brush isr die Füllfarbe und Pen ist die Farbe des Randes.

Ich täte für die Uhr eine eigene Komponenten machen, welche von einem Panel abgeleitet ist.
So etwa, wie ich es im Anhang gemacht habe.
Das ist nach meiner Meinung viel eleganter und flexibler.
Dateianhänge
Roulett.zip
(65.57 KiB) 114-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Ist sowas mit Canvas möglich?

Beitrag von sstvmaster »

Danke euch, aber eigentlich will ich keine Uhr, sondern so etwas wie in den beiden Bildern zu sehen ist. Ich habe da Uhren Script nur als Beispiel genommen um einen Anfang für mein Script zu haben.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: Ist sowas mit Canvas möglich?

Beitrag von Nixsager »

Das weiß ich auch. ;)
Aber du willst ja einen analogen Zeiger, wenn du so was wie auf den Bildern machen willst, dann ist das Prinzip das selbe.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Ist sowas mit Canvas möglich?

Beitrag von Mathias »

um einen Anfang für mein Script zu haben.

Meinst du wirklich Script, oder einfach einen Quellcode ?

sondern so etwas wie in den beiden Bildern zu sehen ist.

Hast du meine Anhang mal angeguckt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Ist sowas mit Canvas möglich?

Beitrag von wp_xyz »

Sieht ja schon mal ganz gut aus! Was noch nicht richtig ist, dass du das OnPaint-Event des Formulars nicht verwendest, um die Uhr auszugeben. Diese wird zwar jeweils vom Timer in einem bestimmten Intervall jeweils neu gezeichnet. Wenn du dazwischen aber ein anderes Fenster über die Uhr und wieder wegschiebst, verschwindet die Uhr bis zum nächsten Timer-Event. Grundregel muss immer sein: Zeichnen nur im OnPaint-Event, und im OnTimer-Event würde ich nicht direkt Zeichen-Operationen aufrufen, sondern das OnPaint-Event generieren, indem ich Invalidate aufrufe (oder Refresh, oder Repaint).

Code: Alles auswählen

procedure TForm1.FormPaint(Sender: TObject);
begin
  if clockbg <> nil then
    Canvas.Draw(0, 0, clockbg);
end;
 
procedure TForm1.TimerTimer(Sender: TObject);
begin
  Invalidate;
end;


Der schwarze Rand um die roten Punkte ist die Farbe den Pen, der von dir nicht verändert wurde, also noch auf schwarz steht. Setze entweder Pen.Color auf dieselbe Farbe wie Brush.Color, oder setze Pen.Style auf psClear (kein Rand).

Was meinst du mit den "Rechtecken"?

Bei der Erstellung des Uhrenhintergrunds in FormCreate gefallen mir die "magischen" Zahlen 160, 68, 10, 7 nicht. Dass 160 der Durchmesser des Ziffernblattes ist, geht wahrscheinlich an allen möglichen Stellen in die Rechnung ein - du hast extrem viel Arbeit, wenn du mal die Uhr größer ausgeben willst! Nimm stattdessen eine Variable (Radius) und setze sie zu beginn auf 80. 68 ist wahrscheinlich (ich muss es ahnen...) die Breite einer Beschriftung - dieser Wert stimmt jetzt schon nicht für alle Stunden, aber definitiv nicht, wenn du aus irgendeinem Grund später die Schrift größer machst. Du kannst aber mit w := Canvas.TextWidth(IntToStr(c)) die Breite jeder einzelnen Beschriftung berechnen (w ist ein Integer, c der Stundenwert). Genauso findest du mit h := Canvas.TextHeight(IntToStr(c)) die Höhe jeder Zahl (wobei diese immer gleich ist, es reicht also h := Canvas.TextHeight('0') zu nehmen).

Wie ich geschrieben habe, musst du für jede Stunde die genaue Position des Textbeginns (linke obere Ecke) einzeln berechnen. Dazu nimmst du am einfachsten eine große case-Anweisung, in der du dir jede Stunde einzeln vornimmst. Zunächst legst du den Radius des Kreises fest, an dem der Stunden-Text "anliegt", RText := Radius + 10 (um 10 Pixel größer als der Ziffernblatt-Radius, oder so - den Ziffernblatt-Radius sehe ich durch die Position der roten und schwarzen Punkte definiert; idealerweise deklarierst du die 10 noch als Konstante (z.B. const TEXT_ABSTAND = 10; RText := Radius + TEXT_ABSTAND) zu Beginn deines Codes, damit wird's sehr übersichtlich und lesbar).

Zuerst die einfachen Fälle:

Die Stunde ganz oben (0 bzw. 12) ist horizontal zentriert und um 1 Texthöhe nach oben geschoben. Wenn x und y die Position des Textankers in der linken oberen Text-Ecke bezeichnen, gilt hier: x := xcenter - w div 2; y := ycenter - RText - h

Die Stunde ganz unten (6) ist ebenfalls horizontal zentriert, aber der vertikale Textanker ist schon richtig: x := xcenter - w div 2; y := yCenter + RText

Die Stunde ganz rechts (3) ist vertikal zentriert und linksbündig, d.h. der Text beginnt direkt an der richtigen Stelle: x := xcenter + RText; y := ycenter - h div 2

Die Stunde ganz links (9) ist ebenfalls vertikal zentriert, aber rechtsbündig, d.h der Textanker liegt um 1 Textbreite weiter links: x := xcenter - RText - w; y := ycenter - h div 2

Die Stunden dazwischen sind schwierig, ich würde mal ausprobieren, wie es aussieht, wenn die Ecken des Texts am Anfangspunkt liegen. Die Rechnung überlasse ich dir, dass du sin und cos verwenden musst, hast du ja schon erkannt.

Insgesamt (ich nehme für x und y einen TPoint-Record damit kriege ich die beiden x und y Anweisungen in 1 Zeile:

Code: Alles auswählen

 
var
  P: TPoint;
  w: Integer;
  h: Integer;
...
  w := Canvas.TextWidth(IntToStr(c));
  h := Canvas.TextHeight('0')// ist für alle Werte gleich
  case c of
    0: P := Point(xcenter - w div 2, ycenter - RText - h);
    1: // ... von dir zu lösen...
    2: // ... von dir zu lösen...
    3: P := Point(xcenter + RText, ycenter - h div 2);
    // ... etc bis 11
  end;
  Canvas.TextOut(P.X, P.Y, IntToStr(c));

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Ist sowas mit Canvas möglich?

Beitrag von sstvmaster »

Dankeschön, habe mal noch weiter gemacht. Elevation hab ich noch nicht gemacht.

nochmal ich möchte keine UHR programmieren. Das soll für eine Satellitensteuerung sein.
360° für Azimuth 90° für Elevation.


Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Image1: TImage;
    procedure DrawHands;
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
  xcenter:integer = 80;
  ycenter:integer = 80;
 
  clockbg: tbitmap;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure Tform1.DrawHands();
var
  AZist, AZsoll, xAZist, yAZist, xAZsoll, yAZsoll: Integer;
begin
  // get the time
  AZist:=45;
  AZsoll:=225;
 
  // calculation of (x, y) points where the hands will point to
  xAZist := round(cos(AZist*pi/180-pi/2)*40+xcenter);
  yAZist := round(sin(AZist*pi/180-pi/2)*40+ycenter);
  xAZsoll := round(cos(AZsoll*pi/180-pi/2)*40+xcenter);
  yAZsoll := round(sin(AZsoll*pi/180-pi/2)*40+ycenter);
 
  with Image1.Canvas do begin
    // AZ ist
    pen.Color:=clLime;
    pen.Width:=2;
    Line(xcenter, ycenter, xAZist, yAZist);
    //AZ soll
    pen.Color:=clBlack;
    pen.width:=2;
    Line(xcenter, ycenter, xAZsoll, yAZsoll);
  end;
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var a,b,c,d: integer;
begin
  clockbg:=tbitmap.Create;
  clockbg.SetSize(160,160);
  with clockbg.Canvas do begin
    // background clearing
//    Brush.Color:=RGBToColor(0,90,82);
    FillRect(0,0,160,160);
 
    // clock area
    Brush.Color:=clWhite;
//    Ellipsec(xcenter, ycenter, 160, 160);
 
    // draw numbers...
    Font.Color:=clBlack;
    Font.Size:=8;
    Brush.Style:=bsClear;
    b:=1;
    c:=30;
    while b <= 11 do
    begin
        TextOut(round(cos((b*30)*pi/180-pi/2)*68+xcenter-10),
                round(sin((b*30)*pi/180-pi/2)*68+ycenter-7), IntToStr(c));
        b:=b+1;
        c:=c+30;
    end;
    TextOut(round(cos((12*30)*pi/180-pi/2)*68+xcenter-10),
            round(sin((12*30)*pi/180-pi/2)*68+ycenter-7), '0');
 
    // draw the red circle
    Pen.Color:=clRed;
    Brush.Style:=bsSolid;
    Brush.Color:=clRed;
    a:=1;
    while a <= 12 do
    begin
      EllipseC(
        round(cos((a*30)*pi/180-pi/2)*50+xcenter),
        round(sin((a*30)*pi/180-pi/2)*50+ycenter),
        4,4);
        a:=a+1;
    end;
 
    // draw the black dots
    Pen.Color:=clBlack;
    Brush.Style:=bsSolid;
    Brush.Color:=clBlack;
    a:=1;
    d:=1;
    while a <= 36 do
    begin
      if (a=d*3) then
       begin
        Pen.Color:=clRed;
        d:=d+1;
       end
      else Pen.Color:=clBlack;
      Rectangle(
        round(cos((a*10)*pi/180-pi/2)*50+xcenter+1),
        round(sin((a*10)*pi/180-pi/2)*50+ycenter-1),
        round(cos((a*10)*pi/180-pi/2)*50+xcenter-1),
        round(sin((a*10)*pi/180-pi/2)*50+ycenter+1)
        );
        a:=a+1;
    end;
 
  end;
end;
 
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  if clockbg <> nil then
    FreeAndNil(clockbg);
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
  if clockbg <> nil then begin
    Image1.Canvas.Draw(0,0,clockbg);
  DrawHands;
end;
 
end;
 
end.
 
 
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Ist sowas mit Canvas möglich?

Beitrag von sstvmaster »

Kann ich auch was in Form.Create steht eigentlich auch in eine procedure stecken? Habe es schon probiert aber das Bild wird nicht gezeichnet!
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Ist sowas mit Canvas möglich?

Beitrag von wp_xyz »

sstvmaster hat geschrieben:Kann ich auch was in Form.Create steht eigentlich auch in eine procedure stecken? Habe es schon probiert aber das Bild wird nicht gezeichnet!

Natürlich. Aber du musst die Prozedur natürlich auch aufrufen.

sstvmaster hat geschrieben:nochmal ich möchte keine UHR programmieren. Das soll für eine Satellitensteuerung sein.
360° für Azimuth 90° für Elevation.

Kein Grund herumzuschreien. Ist doch egal, ob die Labels mit 0-11 beschriftet sind, oder mit 0-330.

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: Ist sowas mit Canvas möglich?

Beitrag von Nixsager »

Die Frage würde mich auch mal interessieren.
Habe es ausprobiert und wenn ich einen Knopf mit folgendem Code erstelle 'Form1.Canvas.Draw(0,0,clockbg);' wird der Inhalt von 'clockbg'gezeichnen.:?

sstvmaster hat geschrieben:nochmal ich möchte keine UHR programmieren. Das soll für eine Satellitensteuerung sein.
360° für Azimuth 90° für Elevation.


ROFL
Das Ziel ist egal. Die Funktion kann man für beides verwenden.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Antworten