/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
tegning i canvas
Fra : merlin


Dato : 10-07-02 15:11

Hej,

Jeg har nogle problemer med at tegne i canvas.
Jeg vil gerne have lavet en slags graf.
Jeg har en funktion som tar imod to tal: x og y. (floating points)
Den skal så først afrunde tallene så de blir integers da man jo ikke kan
tale om fx halve pixels på skærmen.
Så skal den gå X henad grafen og gå (screen.height div 2)-y op ad grafen.

jeg har tænkt mig noget kode i stil med.

var
x,y:double;
ix,iy:integer;
begin
iX:=Round(x);
iY:=Round(Y);
iY:=(Screen.Height div 2)-iY;

With Form1.Image1.Canvas do
begin
MoveTo(0,Screen.Height div 2); //gå til midten af skærmen
//helt til venstre??
LineTo(x,y);
end;
end;

Men det virker ikke.
Kan nogen forklare hvorfor?
Evt. nogle andre forslag til hvordan problemet kan løses?

Mvh
Thomas



 
 
merlin (10-07-2002)
Kommentar
Fra : merlin


Dato : 10-07-02 15:15

> jeg har tænkt mig noget kode i stil med.
>
> var
> x,y:double;
> ix,iy:integer;
> begin
> iX:=Round(x);
> iY:=Round(Y);
> iY:=(Screen.Height div 2)-iY;
>
> With Form1.Image1.Canvas do
> begin
> MoveTo(0,Screen.Height div 2); //gå til midten af skærmen
> //helt til venstre??
> LineTo(x,y);
> end;
> end;
>

Ja, ok, jeg er klar over at jeg her har lavet en fejl.
Jeg er kommet til at skrive LineTo(x,y) jeg mente naturligvist iX,iY.



Uffe Kousgaard (11-07-2002)
Kommentar
Fra : Uffe Kousgaard


Dato : 11-07-02 06:58

"merlin" <merlin@merlin.sprex.dk> wrote in message
news:3d2c3fce$0$13940$edfadb0f@dspool01.news.tele.dk...
> Så skal den gå X henad grafen og gå (screen.height div 2)-y op ad
grafen.

Du skal nok anvende canvas.height i formlen ovenfor. Resten af koden har
jeg ikke checket.


Thomas Munk (11-07-2002)
Kommentar
Fra : Thomas Munk


Dato : 11-07-02 07:11

Canvas.Height ??????


"Uffe Kousgaard" <uffe@routeware.dk> wrote in message
news:3d2d1e67$0$63569$edfadb0f@dspool01.news.tele.dk...
> Du skal nok anvende canvas.height i formlen ovenfor. Resten af koden har
> jeg ikke checket.



Uffe Kousgaard (11-07-2002)
Kommentar
Fra : Uffe Kousgaard


Dato : 11-07-02 07:57

Ok, det var image1.height jeg havde i tankerne:

iX:=Round(x);
iY:=Round(y);
with form1.Image1 do
begin
iY:=(Height div 2)-iY;
With Canvas do
begin
MoveTo(0,Height div 2);
LineTo(ix,iy);
end;
end;

Ovenstående er afprøvet og det virker

"Thomas Munk" <spam@rudekuvert.dk> wrote in message
news:3d2d2154$0$16812$edfadb0f@dspool01.news.tele.dk...
> Canvas.Height ??????
>
>
> "Uffe Kousgaard" <uffe@routeware.dk> wrote in message
> news:3d2d1e67$0$63569$edfadb0f@dspool01.news.tele.dk...
> > Du skal nok anvende canvas.height i formlen ovenfor. Resten af koden
har
> > jeg ikke checket.
>
>


Aftershock (07-08-2002)
Kommentar
Fra : Aftershock


Dato : 07-08-02 08:15

Hej Thomas

Nedenstående unit (komplet kopi koden til en form) viser hvordan man kan
tegne på en canvas.

I nedenstående tilfælde tegnes der på formens canvas med tilfældige
streger hver gang
der klikkes på formen.

Mvh.
Afteshock


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure tegnLinie(x, y, x1, y1: double);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.tegnLinie(x, y, x1, y1: double);
begin
Form1.Canvas.Pen.Color:= clBlue;
Form1.Canvas.Pen.Style:= psSolid;
Form1.Canvas.MoveTo(Round(x), Round(y));
Form1.Canvas.LineTo(Round(x1), Round(y1));

Form1.Canvas.TextOut(10,10, 'x.y '+
IntToStr(Form1.Canvas.PenPos.X)+','+
IntToStr(Form1.Canvas.PenPos.Y));
end;

procedure TForm1.FormClick(Sender: TObject);
begin
tegnLinie(random(200), random(200), 200+random(400), 200+random(400));
end;

end.

--
Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"


Aftershock (07-08-2002)
Kommentar
Fra : Aftershock


Dato : 07-08-02 08:15

Hej Thomas

Nedenstående er et andet eksempel. Når der trykke på knappen vil der
blive tegnet på
billedet (image1).

Dit problem kunne måske være at billedet (image1) i din kode ikke er
stor nok og derfor tegner
du udenfor billedet - og din streg kan derfor ikke ses.

Mvh.
Aftershock


unit Unit1;

interface

uses
Windows, Classes, Controls, ExtCtrls, Forms, StdCtrls;

type

TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure tegnLinie(x, y: double);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.tegnLinie(x, y: double);
begin
With Form1.Image1.Canvas do
begin
MoveTo(Image1.Height div 2, Image1.Height div 2); //gå til midten
af skærmen
LineTo(round(x), round(y)); // tegn til x,y
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Top:= 0;
Image1.Left:= 0;
Image1.Width:= 420;
Image1.Height:= 420;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
tegnLinie(random(400), random(400));
end;

end.

--
Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"


Aftershock (07-08-2002)
Kommentar
Fra : Aftershock


Dato : 07-08-02 08:16

"merlin" skrev d. 10-07-02 15:11 dette indlæg :
> Hej,
>
> Jeg har nogle problemer med at tegne i canvas.
> Jeg vil gerne have lavet en slags graf.
> Jeg har en funktion som tar imod to tal: x og y. (floating points)
> Den skal så først afrunde tallene så de blir integers da man jo ikke
kan
> tale om fx halve pixels på skærmen.
> Så skal den gå X henad grafen og gå (screen.height div 2)-y op ad
grafen.
>
> jeg har tænkt mig noget kode i stil med.
>
> var
> x,y:double;
> ix,iy:integer;
> begin
> iX:=Round(x);
> iY:=Round(Y);
> iY:=(Screen.Height div 2)-iY;
>
> With Form1.Image1.Canvas do
> begin
> MoveTo(0,Screen.Height div 2); //gå til midten af skærmen
> //helt til venstre??
> LineTo(x,y);
> end;
> end;
>
> Men det virker ikke.
> Kan nogen forklare hvorfor?
> Evt. nogle andre forslag til hvordan problemet kan løses?
>
> Mvh
> Thomas
>
>


Nedenstående er en form med en knap og et image på. Der er afprøvet og
virker.


unit Unit1;

interface

uses
Windows, Classes, Controls, ExtCtrls, Forms, StdCtrls;

type

TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure tegnLinie(x, y: double);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.tegnLinie(x, y: double);
begin
With Form1.Image1.Canvas do
begin
MoveTo(Image1.Height div 2, Image1.Height div 2); //gå til midten
af skærmen
LineTo(round(x), round(y)); // tegn linie ud fra midten
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Top:= 0;
Image1.Left:= 0;
Image1.Width:= 420;
Image1.Height:= 420;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
tegnLinie(random(400), random(400));
end;

end.


Mvh.
Aftershock

--
Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"


Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408490
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste