Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Grafiken (https://www.delphipraxis.net/145240-grafiken.html)

MiniMax 27. Dez 2009 14:45


Grafiken
 
Hallo Zusammen,
Ich möchte gerne so ne Art Autotacho nachbilden! Wie kann ich das Machen, sodass ich die Position des Zeigers ändern Kann?
In etwa so

Ich hoffe ihr könnt mir Helfen

Wolfgang Mix 27. Dez 2009 14:48

Re: Grafiken
 
Dein Suchwort heißt Canvas

Gruß

Wolfgang

patti 27. Dez 2009 15:38

Re: Grafiken
 
Woran hängst du denn im Moment? Liegt es am Zeichnen überhaupt oder am Berechnen des Winkels etc.? Einpaar zusätzliche Informationen wären hilfreich...

mfg

MiniMax 27. Dez 2009 16:17

Re: Grafiken
 
Hi,
thx für deine Antwort! Es hapert an allem! Ich dachte, man könnte den Tacho Hintergrund einladen, darüber den Zeiger als 2. Image und den dan I-wie drehen? Es kommen über den Serialport Zeichenketten mit Werten rein! Die müssen halt Zelegt werden und dann auf dem "Tacho" ausgegeben werden. Reicht das an Informatinionen? Wenn noch mehr Infos gebraucht werden, einfach schreiben welche --> Ich freue mich auf eine Antwort!

markus5766h 27. Dez 2009 16:31

Re: Grafiken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

anbei 'mal ein Demo mit VU-Metern,
der Zeiger wird auf dem Canvas gezeichnet.

vielleicht hilft's

MiniMax 27. Dez 2009 16:36

Re: Grafiken
 
Hi, Danke für deine Schnelle Antwort! Wie bringe ich denn den Zeiger zum Auschlagen? Ich blick da nicht durch!

markus5766h 27. Dez 2009 16:44

Re: Grafiken
 
... durch verändern der Trackbars - alles andere ist bur einfache Mathematik
und sollte leicht anzupassen sein.

MiniMax 27. Dez 2009 16:47

Re: Grafiken
 
Hi, nee das meine Ich net! Ich habe halt nur Lazarus und blicke somit nicht so ganz durch den Code! Kannst du nicht mal einbeispielcode Einstellen womit ich die Zeiger Position festlegen kann? Also Inetwa so: Zeiger:='50' oder so ähnlich halt so dass 50 genau die Mitte ist und 0 ganz lins und 100 Ganz rechts! Vielen Dank im Voraus

markus5766h 27. Dez 2009 17:05

Re: Grafiken
 
... also :
Beispiel :
Dein Zeigerinstrument soll ein kreis sein mit einem Durchmesser von 120 Pixeln,
dann ist der Mittelpunkt an den Koordinaten : X=60, Y=60,
Dein Canvas hat eine Fläche von 120 mal 120 Pixeln.

Beispiel zum Zeichnen der Position 0 (links)
Delphi-Quellcode:
with Image1.Canvas do
 begin
  Pen.Width := 1;        // Breite Deines Striches (=Zeiger)
  Pen.Color := clBlack;  // Zeigerfarbe
  MoveTo(60,60)          // Zeigerbeginn im Mittelpunkt
  LineTo(10,60)          // zeichne einen 50-pixel langen Zeiger nach links
 end;
wenn Du jetzt eine Bitmap als Zeigerinstrument lädst, musst Du vorher den Bereich unter dem zu zeichnenden Zeiger speichern, da die durch den überzeichneten Zeiger veränderten Pixel nach dem Verändern der Zeigerposition wieder zurückgeschrieben werden müssen.

Delphi-Quellcode:
oldPixels : array[0..49] of TColor; // array für 50 Pixel (Zeigerlänge) bereitstellen
                                     // im Abschnitt Private declaration

var
 i : Integer;

for i := 0 to 49 do
 oldPixels[i] := Image1.Canvas.Pixels[i+10, 60]; // Speichern der orginal-Pixel
nach dem Zeichnen des Zeigers (außer beim ersten Zeichnen des Zeigers)
muss das alte Pixelbild unter dem Zeiger wieder hergestellt werden :

Delphi-Quellcode:
var
 i : Integer;

for i := 0 to 49 do
 Image1.Canvas.Pixels[i+10, 60].Pixels := oldPixels[i];
dieses Beispiel gilt nur für die waagerechte Position, für andere Zeigerpositionen
müssen Vektoren gespeichert werden, da der Zeiger ja auch in Vektoren dargestellt
werden soll, die nicht auf 0, 90, 180 oder 270 Grad liegen.

.. ja, und die Skalierung musst Du eben per Winkelfunktionen berechnen.

patti 27. Dez 2009 17:36

Re: Grafiken
 
Liste der Anhänge anzeigen (Anzahl: 2)
Obwohl schon eine mögliche Lösung gepostet wurde, hab ich gerade mal kurz was zusammengetippt, das funktionieren sollte. Habe für die grafische Ausgabe eine PaintBox verwendet. Die Konstante "cMaxValue" regelt, bei welchem Wert für "Value" der Zeiger voll ausschlägt, sich also ganz rechts befindet. In dem Beispiel wird der Wert von "Value" per Timer geändert, damit man sieht, wie sich der Zeiger bewegt. Zur Berechnung der Koordinaten hab ich ganz einfach die Winkelfunktionen Sinus und Cosinus verwendet. Dabei darfst du nicht vergessen, dass das "Koordinatensystem" für die grafische Ausgabe am PC oben links und nicht unten links beginnt, deshalb die verschiedenen Umrechnungen!

Die Grafik lässt sich natürlich noch anpassen, beispielsweise indem du unter den Zeiger noch ein Bitmap per Draw-Befehl aufs Canvas zeichnen lässt. Das hängt jetzt aber von dir ab.

Vielleicht hilft dir das schonmal weiter. Bei Fragen kannst du sie hier einfach stellen.

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr.
Seite 1 von 3  1 23      

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