Avatar billede jakob/cosmo Nybegynder
21. februar 2002 - 14:56 Der er 9 kommentarer og
2 løsninger

Graf!

Hej alle!

Jeg er ved at lave et aktiespil!
Men kan ikke helt finde ud af hvordan jeg laver en Graf (Se evt. øverste graf på http://dk.finance.yahoo.com/q?s=gntc.co&d=c&t=1d)

Alså en Random graf ved en tryk på en knap skal programmet selv lave en Random Graf. Alså en graf med tilfældige kurver(op, ned)

På forhåd mange tak!

CJ
Avatar billede angelod Novice
21. februar 2002 - 17:55 #1
60 point er ikke så meget, men det er en interessant opgave. Jeg tror sgu jeg vil kigge på den. Forvent dog ikke noget (så blir du ikke skuffet). :o)
Avatar billede stoney Nybegynder
21. februar 2002 - 18:16 #2
Avatar billede angelod Novice
21. februar 2002 - 18:56 #3
Hæhæ. Nord, syd, øst, vest.. Alle ved, at Stoney er bedst. :D
Avatar billede hreiff Nybegynder
21. februar 2002 - 20:58 #4
Brug en Image og en Button:

procedure TForm1.Button1Click(Sender: TObject);
const
  num = 10; {antal mellemrum, dvs. 11 punkter}
var
  i: integer;
  xdel,ydel: double;
begin
  xdel := (image1.width-20)/num;
  ydel := image1.height-20;
  Image1.Canvas.fillrect(ClientRect); {sletter image}
  Image1.Canvas.MoveTo(10,10);
  Image1.Canvas.LineTo(10,Image1.height-10);  {koordinatsystem}
  Image1.Canvas.LineTo(Image1.width-10,Image1.height-10);
  Randomize;
  Image1.canvas.MoveTo(10,Image1.height-10-Round(Random*ydel));
  for i := 1 to num do
  begin
    Image1.canvas.LineTo(10+Round(i*xdel),
            Image1.height-10-Round(Random*ydel));
  end;
end;
Avatar billede hreiff Nybegynder
21. februar 2002 - 21:07 #5
--> Stoney:
Chart duer ikke på delphi3 (og tidligere)
Desværre - den virker ellers smart.

--> jakob:
Hvis der skal mindre udsving på grafen, så sæt
ydel:= (image1.height-20)/2;
Avatar billede stoney Nybegynder
21. februar 2002 - 21:10 #6
hreiff>>
Chart duer ikke på delphi3 (og tidligere)

bruger jacob/cosmo da delphi3 eller tidligere

Stoney
Avatar billede jakob/cosmo Nybegynder
22. februar 2002 - 15:48 #7
>>>Alle
Nej jeg gør ikke jeg bruger delphi 6.

Tak for de fede svar:)
Men jeg er stødt på et problem igen.

Dette kan løse det:

Hvordan kan jeg lave en slags variabl der gemmer en canvas(Graf), og så hver gang jeg trykker på en knap skal den lave en ny Canvas(graf) + den gamle Canvas(Graf) gemt i variablen.
Avatar billede hreiff Nybegynder
24. februar 2002 - 11:20 #8
Stoney: Åbenbart ikke, men det gør jeg, og jeg kunne godt have brug for en graf-komponent, så jeg biksede noget sammen selv.

Jakob: Hvis du bruger Image og opretter på følgende måde:

  var
    Bitmap: TBitmap;
  Begin
    Bitmap := TBitmap.Create;
    Bitmap.Height := Image.Height;
    Bitmap.Width := Image.Width;
    Image.Picture.Graphic := Bitmap;
  end;

kan du gemme hele billedet sådan:

  Image.Picture.SaveToFile(SaveDialog.FileName);

Eller du kan også arbejde med flere forskellige bitmaps, som du kan tegne videre på eller skifte imellem, f.eks

  Bitmap2 := Image.Picture.bitmap;
  Image2.Picture.Graphic := Bitmap2;

(kopierer fra image til image2 via variablen bitmap2)

(Se iøvrigt også Assign for TBitmap i hjælpen)
Avatar billede hreiff Nybegynder
25. februar 2002 - 09:09 #9
Da grafen iøvrigt bare er en funktion af nogle tal, kan du bare gemme den som en array, og så gentegne funktionen ud herfra. Det fylder meget mindre end at gemme hele bitmap'en.
Jeg vender tilbage lidt senere med et eksempel.

//hreiff
Avatar billede hreiff Nybegynder
25. februar 2002 - 10:18 #10
var
  Bitmap: TBitmap;


procedure TegnGraf(const a: array of double; const num: integer);
const
  kant = 10;
var
  i: integer;
  xdel,ydel: double;
begin
  xdel := (Form1.image1.width-2*kant)/num;
  ydel := Form1.image1.height-2*kant;
  Form1.Image1.Canvas.fillrect(Form1.ClientRect);
  Form1.Image1.Canvas.MoveTo(kant,kant);
  Form1.Image1.Canvas.LineTo(kant,Form1.Image1.height-kant);
  Form1.Image1.Canvas.LineTo(Form1.Image1.width-kant,
          Form1.Image1.height-kant);
  Form1.Image1.canvas.MoveTo(kant,
          Form1.Image1.height-kant-Round(a[0]*ydel));
  for i := 1 to num do
  begin
    Form1.Image1.canvas.LineTo(kant+Round(i*xdel),
          Form1.Image1.height-kant-Round(a[i]*ydel));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  num = 10; {antal mellemrum, dvs. 11 punkter}
var
  i: integer;
  a: array[0..num] of double;
begin
  for i := 0 to num do
    a[i] := random;
  TegnGraf(a,num);    { her kan du bruge array a,b,c osv. for}
end;                  { forskellige grafer }

procedure TForm1.FormCreate(Sender: TObject);
Begin
  Bitmap := TBitmap.Create;
  Bitmap.Height := Image1.Height;
  Bitmap.Width := Image1.Width;
  Image1.Picture.Graphic := Bitmap;
  randomize;
end;
Avatar billede hreiff Nybegynder
25. februar 2002 - 10:19 #11
Du kan jo også lave noget tilsvarende med Stoney's Chart-eksempel.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester