Avatar billede michael_g Nybegynder
04. april 2004 - 20:33 Der er 3 kommentarer og
1 løsning

Et lille problem med en funktion

Hej...

jeg er nybegynder i borland delphi 7.
Jeg har en funktion som skal plotte nogen koordinater (x,y,z) ind på fire forskellige Tpaneler.
 
Problemet er det at  funktionen (func_PlotCoor) vil jeg gerne kunne køre fra flere forskellige procedurer men det virker sørme ikke..

Jeg får følgende fejl:
[error]unit1.pas[56]:unsatisfied forward or external declaration 'Tform1.views1panel_perspClick'

min kode ser således ud:
unit Unit1;

interface

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


type
  TMyPanel = class(TPanel)
  protected
  procedure Paint;
  override;

end;


type
  TForm1 = class(TForm)
    Coor_x: TEdit;
    Label2: TLabel;
    Coor_y: TEdit;
    Label3: TLabel;
    Coor_z: TEdit;
    Label4: TLabel;
    Create_Point: TButton;
    Views1: TViews;
    Label1: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Perspp0_x: TEdit;
    Perspp0_y: TEdit;
    Perspp0_z: TEdit;
    Butt_makePerspektiv: TButton;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Perspp1_x: TEdit;
    Perspp1_y: TEdit;
    Perspp1_z: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Perspp2_x: TEdit;
    Perspp2_y: TEdit;
    Perspp2_z: TEdit;
    Label15: TLabel;
    Label16: TLabel;


    procedure Create_PointClick(Sender: TObject);
    procedure Butt_makePerspektivClick(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;



var
  Form1: TForm1;
  Views1: TViews;



implementation
{$R *.dfm}

function func_PlotCoor(xo,yo,zo :Integer ) : integer;
begin
//plot koordinater i xy-planen
  TMyPanel(Views1.Panel_xy).Canvas.Polyline([Point(xo + 3, yo + 3),
  Point(xo - 3, yo - 3)]);
  TMyPanel(Views1.Panel_xy).Canvas.Polyline([Point(xo - 3, yo + 3),
  Point(xo + 3, yo - 3)]);

//plot koordinater i yz-planen
  TMyPanel(Views1.Panel_yz).Canvas.Polyline([Point(yo + 3, zo + 3),
  Point(yo - 3, zo - 3)]);
  TMyPanel(Views1.Panel_yz).Canvas.Polyline([Point(yo - 3, zo + 3),
  Point(yo + 3, zo - 3)]);

//plot koordinater i xz-planen
TMyPanel(Views1.Panel_xz).Canvas.Polyline([Point(xo + 3, zo + 3),
Point(xo - 3, zo - 3)]);
TMyPanel(Views1.Panel_xz).Canvas.Polyline([Point(xo - 3, zo + 3),
Point(xo + 3, zo - 3)]);
end;

procedure TMyPanel.Paint;
begin
inherited Paint;
  Canvas.MoveTo(0,0);
  Canvas.LineTo(height,width);
end;


procedure TForm1.Create_PointClick(Sender: TObject);
//Procedure der skal gemme koordinaterne og plotte dem i alle tre
//koordinatsystemer i det vilkårlige plan (Ax + By + Cz + D = 0

var
  x,y,z: string;
  coorx, coory, coorz: integer;

begin

  x := Coor_x.text;
  y := Coor_y.Text;
  z := Coor_z.Text;

//konvertere string (x, y og z) til integer
  coorx := StrToInt(x);
  coory := StrToInt(y);
  coorz := StrToInt(z);

//plotter xy yz xz
  func_PlotCoor(coorx, coory, coorz);

end;

end.






Er der nogen der kan fortælle mig hvad hvor fejlen ligger og hvordan jeg løser dette problem uden at skulle have skrevet hele funktionen ind i hver enkel procedure som den skal kaldes fra?
Avatar billede michael_g Nybegynder
04. april 2004 - 20:58 #1
Rettelse:
Jeg får følgende fejl når jeg køre proceduren Create_PointClick:

Debugger execption notification.: Som siger noget med Eaccessviolation og access violation i adressen 004527c6

og så får jeg også fejlen:

[error]unit1.pas[94]:unsatisfied forward or external declaration 'Tform1.views1panel_perspClick'
Avatar billede nca Juniormester
05. april 2004 - 08:58 #2
Når du i din funktion henviser til elementer i Form1, skal du enten erklærer din funktion i Form1 eller skal du foran alle elementerne angive, at de tilhører Form1.
Det nemmeste er at erklære funktionen i Form1.
Det gør du på flg. måde:
Funktionens header skal ændres til:
TForm1.function func_PlotCoor(xo,yo,zo :Integer ) : integer;

I Interface-delen skal du efter
procedure Butt_makePerspektivClick(Sender: TObject);
indsætte linien:

function func_PlotCoor(xo,yo,zo :Integer ) : integer;

Jeg håber du kan forstå forklaringen :-)

skal du indsætte
Avatar billede michael_g Nybegynder
06. april 2004 - 21:26 #3
Tak skal du ha' nca...
Det problem har jeg bare siddet med så længe uden at kunne hitte ud af hvad jeg havde gjort galt, men nu virker det bare helt fint. :o)
Smid lige et svar så du kan få nogen point.

Mvh. Michael.
Avatar billede nca Juniormester
06. april 2004 - 21:35 #4
Her er et svar :-)
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