Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Graph erzeugen (x-achse 32000 pixel) (https://www.delphipraxis.net/149026-graph-erzeugen-x-achse-32000-pixel.html)

haLLoL208 12. Mär 2010 16:48


Graph erzeugen (x-achse 32000 pixel)
 
hey!

ich bin gerade dabei einen graph zu proggen, den man manuell erzeugen kann (soll über eine länge von 32000 pixel auf der x-achse gehen), ich hatte es mir so gedacht, das die x-werte timergesteuert gehen und man halt nur die maus auf und ab bewegen braucht, dass der erzeugt wird, dann muss man das i-wie mir nem array machen, dass die werte abgespeichert werden glaub ich..

könnt ihr mir zeigen wie es geht, ich hab noch nich so viel erfahrung mit delphi..

thx schonmal..

haLLoL208 12. Mär 2010 17:33

Re: Graph erzeugen (x-achse 32000 pixel)
 
also ich hab schonmal ein bisschen was geschafft, aber ich würds gerne mit canvas.ployline machen und nich mit canvas.lineto das hab ich schon ganz hinbekommen, dass ich selber einen graphen komplett zeichnen kann und das hatte ich dan mit formmousemove, aber diesmal will ich es ja mit nem timer machen..
Delphi-Quellcode:
var pt1:tpoint;
getcursorpos(pt1);
label1.caption:='X:'+inttostr(pt1.x)+' Y:'+inttostr(pt1.y)// anzeigen der koordinaten
canvas.polyline(pt1)
ich hab bloß gar keine ahnung wie man das mit array machen soll..

haLLoL208 12. Mär 2010 17:54

Re: Graph erzeugen (x-achse 32000 pixel)
 
also so hab ich das gemacht was ich als erstes gemacht hab, wo man halt nur in das Formular gemalt hat den graphen..
Delphi-Quellcode:
var Form1:TForm1; xalt, yalt:integer;
procedure TForm1.FormMouseMove(Sender:TObject;Shift:TShiftState; X, Y:integer);
var
pt1:tpoint;

begin
getcursorpos(pt1);
label1.caption:='X:'+inttostr(pt1.x)+' Y:'+inttostr(pt1.y);// anzeigen der koordinaten

If (X-xalt>=0)           //damit man nur nach rechts zeichnen kann
then begin
canvas.lineto(x, y);
xalt:=X;
yalt:=Y;
end;
end;

end.

daywalker9 12. Mär 2010 17:56

Re: Graph erzeugen (x-achse 32000 pixel)
 
Bitte pushe deinen Beitrag nicht so. Du kannst deinen ersten Beitrag auch editieren. Der 2 und 3 Post waren / sind unnötig

haLLoL208 13. Mär 2010 07:17

Re: Graph erzeugen (x-achse 32000 pixel)
 
ja sry, aber könntet ihr mir vllt trotzdem helfen?

hallo??? bitte..

patti 15. Mär 2010 18:37

Re: Graph erzeugen (x-achse 32000 pixel)
 
Hi,

vielleicht solltest du nochmal ganz genau beschreiben, wo dein Problem liegt, denn ehrlich gesagt habe ich noch nicht genau verstanden, was du eigentlich erreichen willst und wo du im Moment hängst. Was genau soll den Timer-gesteuert sein? Vielleicht gibts du uns noch einpaar zusätzliche Informationen, dann wird dir bestimmt auch in irgendeiner Form geholfen...

mfg

Wolfgang Mix 15. Mär 2010 19:02

Re: Graph erzeugen (x-achse 32000 pixel)
 
x-Achse 32000 Pixel

Ist das für ein Fußball-Stadion gedacht oder welchen Monitor hast du?

patti 15. Mär 2010 19:06

Re: Graph erzeugen (x-achse 32000 pixel)
 
:o

Genau deswegen wäre es wichtig zu wissen, was der Thread-Ersteller erreichen will. Bin mir sicher, dass diese 32000 Pixel irgendwie gescrollt werden sollen, denn darstellen lassen die sich sicher nicht auf einem Bildschirm. Aber wie schon gesagt: Dafür brauchen wir einfach noch einpaar mehr Informationen ;-)

haLLoL208 20. Mär 2010 09:35

Re: Graph erzeugen (x-achse 32000 pixel)
 
also es soll timergesteuert sein, dass die x-achse weiter scrollt(bzw. dass der x-wert immer weiter geht) und ich will halt dann mur die maus auf- und abbewegen müssen, dass ich eine kurve bekomme und die punkte der kurve sollen dann in nem array abgespeichert werden, dass ist halt so mein hauptproblem..

patti 20. Mär 2010 10:34

Re: Graph erzeugen (x-achse 32000 pixel)
 
Okay, wenn ich dich richtig verstanden habe, dann sollte das in etwa so gehen:

Du brauchst zunächst mal ein Array, in dem du die Werte speichern kannst:

Delphi-Quellcode:
Werte: array[0..32000] of integer;
// am besten im Private- oder Public-Bereich deiner Form
Dann brauchst du einen Timer mit einem bestimmten Interval. Bei dem OnTimer-Ereignis musst du dann erstmal in x-Richtung "scrollen". Dazu würde ich eine Variable erstellen, die mir die momentane x-Position speichert:

Delphi-Quellcode:
AktuellePosition : integer; // Private
(Zu Beginn muss diese Variable dann natürlich auf 0 stehen.)

Bei jedem Timer-Ereignis musst du den Wert der Variablen dann um 1 erhöhen. So kannst du schonmal ein "Scrollen" der Werte erreichen. Dazu musst du beachten, dass du natürlich nur solange den Wert erhöhen darfst, bis du das "Ende" deines Werte-Arrays erreicht hast. Dazu kannst du im Timer-Ereignis folgendes machen:

Delphi-Quellcode:
// Erhoehen der aktuellen Position:
inc(AktuellePostition);
//
// Ueberpruefung, ob innerhalb des Arrays:
//
if AktuellePosition <= High(Werte) then
begin
    // Maus-Position bestimmen
    // ...
    // Wert speichern
    Werte[AktuellePosition] := {...};
end
else
begin
    // Am Ende angekommen --> abbrechen
    // ...
end;
Da fehlt jetzt natürlich noch was, aber das hängt davon ab, wie du den aktuellen Wert per Maus bestimmen willst. Eignen würde sich dafür z.B. eine PaintBox, wobei du bei jedem Timer-Ereignis dann natürlich die y-Maus-Position relativ zu den PaintBox-Koordinaten bestimmen musst. Der Vorteil einer PaintBox wäre, dass du den Graphen dann direkt darauf ausgeben kannst. Aber wie gesagt: Das hängt jetzt davon ab, wie du die Koordinaten-Bestimmung machen willst.

Hoffe, ich konnte dir schonmal einbisschen weiterhelfen und dir einen kleinen Denkanstoß geben. Bei Fragen kannst du dich ja hier einfach nochmal melden ;-)

MFG


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.
Seite 1 von 2  1 2      

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