AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Werte aus StringGrid mit Canvas darstellen

Werte aus StringGrid mit Canvas darstellen

Ein Thema von felix1806 · begonnen am 13. Mai 2007 · letzter Beitrag vom 13. Mai 2007
Antwort Antwort
felix1806

Registriert seit: 13. Mai 2007
24 Beiträge
 
#1

Werte aus StringGrid mit Canvas darstellen

  Alt 13. Mai 2007, 10:35
Hallo Delphifreunde!!!

ich habe eine Frage: Kann mir jemand sagen wie man Werte aus einem StringGridFeld als Punkte in einem Image mit Canvas darstellen kann???

Ich programmiere nämlich ein Festgeldberechnungsprogramm: Und um die Punkte mathematisch richtig darzustellen müsste ich auch wissen wie man die Benennung im Image von Punkt [0,0] links oben in [0,0] rechts unten ändern kann bzw das Problem anderweitig umgeht.

Als letztes bräuchte ich noch einen Tip wie man noch die Achsen einzeichnen kann und mit Werten(am besten noch mit denen aus dem StringGrid) versieht.


Also eigentlich wird das Image wie ein Koordinatensystem benutzt und ich habe noch fast keine Erfahrung mit Canvas gemacht...

Vielen Dank !!!
Gruß Felix

  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Werte aus StringGrid mit Canvas darstellen

  Alt 13. Mai 2007, 11:43
Das mit dem Koordinatenursprung ändern ist einfach. Die komplizierte Variante: einfach statt x immer image1.width-x schreiben. Für die einfache solltest du dir in der Hilfe mal SetViewportOrgEx anschauen.
Hoffe geholfen zu haben
Apollonius
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
felix1806

Registriert seit: 13. Mai 2007
24 Beiträge
 
#3

Re: Werte aus StringGrid mit Canvas darstellen

  Alt 13. Mai 2007, 12:03
ja danke erstmal aber ich weiss immer noch nicht wie das mit den stringgrid werten im image funktioniert!!!!
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
195 Beiträge
 
Delphi XE Professional
 
#4

Re: Werte aus StringGrid mit Canvas darstellen

  Alt 13. Mai 2007, 12:37
Hi Felix,

Du solltest erstmal überlegen, wie Du Deine Daten im Speicher hälst, also Dir eine Datenstruktur überlegen, z.B. ein Array von Records oder ähnliches. Dann kannst Du viel einfacher auf Deine Zahlenwerte zugreifen, als wenn Du über das StringGrid gehen müsstest.

Danach guckst Du Dir mal die Funktionen an, die TCanvas bereitstellt. Grundlegend sind das z.B. MoveTo(x,y) und LineTo(x,y), mit denen Du einzelne Linien zeichnen kannst. Dann gibt es die Eigenschaft Pen, und über die Untereigenschaften Pen.Color, Pen.Width, Pen.Style kannst Du Farbe, Stiftdicke und Muster festlegen.

Dann musst Du Dir zwei Funktionen schreiben, die Deine Zahlenwerte in Koordinaten umwandeln: ScaleX(w) und ScaleY(w). Diese Funktionen hängen von Deinen Zahlenwerten ab. Du musst Dir Gedanken darüber machen, welchen Wertebereich Du darstellen willst. Wenn Du z.B. auf der X-Achse (die von links nach rechts) Datumswerte darstellen willst vom 01.01.2007 bis zum 31.12.2037, wäre die Umrechnung
x := Round(Canvas.Width * datumwswert / (EncodeDate(2037,12,31) - EncodeDate(2007,1,1)); Warum? Du musst die Datumswerte, die ganz links und ganz rechts sein sollen, in eine Zahl umwandeln, mit der Delphi (bzw. Dein Computer) rechnen kann. Das macht EncodeDate(). Dann "skalierst" Du Deinen eigentlichen Datumswert von dem Datumsumfang auf den Pixelumfang Deiner X-Achse.

Normalerweise möchte man links und rechts noch etwas Platz lassen. Also so:
x := 50 + Round((Canvas.Width - 70) * datumwswert / (EncodeDate(2037,12,31) - EncodeDate(2007,1,1)); Da diese Umrechnung sehr häufig passiert, macht es Sinn, einige Werte vorher auszurechnen. Dazu brauchst Du eine globale Variable ScaleFactorX (vom Typ Double), die Du nur einmal berechnest. Bzw. immer dann neu berechnest, wenn sich einer der Werte ändert, also z.B. die Breite des Canvas oder der Datumsbereich:
Delphi-Quellcode:
StartDatum := EncodeDate(2007, 1, 1);
EndDatum := EncodeDate(2037, 12, 31);
ScaleFactorX := (Canvas.Width - 70) / (EndDatum - StartDatum);
Danach kannst Du Dir eine Funktion definieren:
Delphi-Quellcode:
function TMain.ScaleX(datum: TDate): Integer;
begin
  result := Round(datum * ScaleFactorX);
end;
Genau das Gleiche musst Du nun für die Y-Achse machen, dann aber mit Deinen Geldbeträgen. Wenn das auch fertig ist, kannst Du so Dein Achsenkreuz zeichnen:
Delphi-Quellcode:
  with Canvas do begin
    MoveTo(ScaleX(StartDatum), ScaleY(KleinsterWert));
    LineTo(ScaleX(EndDatum), ScaleY(KleinsterWert));
    MoveTo(ScaleX(StartDatum), ScaleY(KleinsterWert));
    LineTo(ScaleX(StartDatum), ScaleY(GroessterWert));
  end;
So. Den Rest erarbeite Dir mal bitte selber Und wenn Du das alles verstanden hast, was da im Hintergrund passiert, guckst Du Dir bitte die TChart-Komponenten an, die machen das alles von alleine
  Mit Zitat antworten Zitat
felix1806

Registriert seit: 13. Mai 2007
24 Beiträge
 
#5

Re: Werte aus StringGrid mit Canvas darstellen

  Alt 13. Mai 2007, 19:25
vielen dank sir twist!!!

ich muss mir das erst einmal natürlich genau anschauen bevor ich dagen kann dass ich deine ausführliche beschreibung verstanden habe, aber trotzdem schon mal veieln dank für deine bemühungen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf