Avatar billede jens123 Nybegynder
01. januar 2004 - 13:28 Der er 5 kommentarer og
1 løsning

Hvordan bruges canvas i en unit

Min unit ser sådan ud

unit Unit2;

interface

type
prik = class
procedure mal;
end;

implementation

procedure prik.mal;
begin
Canvas.Pixels[2, 10] := clRed;
end;

end.

Hvordan kan jeg komme til at bruge canvas inde i uniten.
(der må godt være en forklaring med)
Avatar billede dkn Nybegynder
01. januar 2004 - 14:14 #1
du skal også bruge canvas unit

uses Forms;

efter interface
Avatar billede martinlind Nybegynder
01. januar 2004 - 14:53 #2
Du kan øve dig med en PaintBox comp. eller du kan lave dine canvas rutiner i din forms Onpaint Property eller vil de bare blive tegnet over af formen og de andre componenter når de opdaterer

/Martin
Avatar billede jens123 Nybegynder
01. januar 2004 - 15:18 #3
Hvordan vil uniten så kommer til at se ud. For hvis jeg tilføjer uses Forms får jeg stadigvæk en fejl melding.
Avatar billede zerohero Nybegynder
01. januar 2004 - 15:58 #4
Prøv dette

type

  Prik = class
  private
    MinCanvas : TCanvas;
  public
    procedure Mal;
    constructor Create;
    destructor Destroy;
  end;

implementation

constructor Prik.Create;
begin
  MinCanvas := TCanvas.Create;
end;

destructor Prik.Destroy;
begin
  MinCanvas.Free;
end;

procedure Prik.Mal;
begin
  MinCanvas.Pixels[2,10] := clRed;
end;
Avatar billede hrc Mester
01. januar 2004 - 16:20 #5
Bygger videre på zerohero's eksempel

  TPrik = class
  private
    fMinCanvas : TCanvas; // Defacto std. at private props starter med f!
  public
    procedure Mal;
    constructor Create(aCanvas : TCanvas); // Sender formens canvas over
    destructor Destroy; override; // Altid override en destructor!
  end;

implementation

constructor TPrik.Create(aCanvas : TCanvas);
begin
  fMinCanvas := TCanvas.Create;

  // Manglede at assigne handle så canvas'et ved hvor den skal tegne
  fMinCanvas.Handle := aCanvas.Handle;

(*
  At man så ligeså godt kunne gøre følgende, er en anden sag:
  fMinCanvas := aCanvas; // Uden at oprette ny.
end;

destructor TPrik.Destroy;
begin
  try
    fMinCanvas.Free;
  finally
    Inherited;
  end; // try
end;

procedure TPrik.Mal;
begin
  fMinCanvas.Lock;
  try
    fMinCanvas.Pixels[2,10] := clRed;
  finally
    fMinCanvas.UnLock;
  end; // try
end;
Avatar billede hrc Mester
01. januar 2004 - 16:25 #6
Dvs. jeg kopierede nærmere eksemplet og rettede det til "i mit billede". Eventuelle points bør også tilgå zerohero.

Rettelse:

constructor TPrik.Create(aCanvas : TCanvas);
begin
  fMinCanvas := TCanvas.Create;

  // Manglede at assigne handle så canvas'et ved hvor det skal tegne
  fMinCanvas.Handle := aCanvas.Handle;


//  At man ligeså godt kunne gøre følgende, er en anden sag:
//  fMinCanvas := aCanvas; // Uden at oprette nyt objekt
end;
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