I working on a project where I want the object to define it's own form instead of using a stored one. I've done this before so I just copied what I did before but this time I'm getting an 'External: SIGSEGV' error on the TForm.Create(nil) line. The program I used this in before was compiled with an older version of Lazarus, from last year I think, so I'm not sure what I'm missing. Below is the code for the Class object it's not finished but testable.
Any ideas?
unit InvoiceHeaderClass;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,forms;
var
NextInvNum:integer; {Global invoice number that can be set from the outside but will be incremented by the object}
type
Tinvheader = class
Private
InvNum: integer;
SalesNum: integer;
CustCode: string;
CustName: string;
CustAddr1: string;
CustAddr2: string;
CustCity: string;
CustState: string;
CustZip:string;
CustPhone:string;
InvDate:TDateTime;
HeadScreen:TForm;
procedure SetNumData(Index:integer ; targetdata : integer);
procedure SetStrData(Index : integer ;targetdata : string);
function GetStrData(Index:integer):string;
function GetNumData(Index:integer):integer;
Public
Constructor Create();
property InvoiceNumber :integer index 1 read GetNumData write SetNumData;
property SalespersonNumber :integer index 2 read GetNumData write SetNumData;
property CustomerCode:string index 1 read GetStrData write SetStrData;
property CustomerName: string index 2 read GetStrData write SetStrData;
property CustomerAddr1: string index 3 read GetStrData write SetStrData;
property CustomerAddr2: string index 4 read GetStrData write SetStrData;
property CustomerCity: string index 5 read GetStrData write SetStrData;
property CustomerState: string index 6 read GetStrData write SetStrData;
property CustomerZip:string index 7 read GetStrData write SetStrData;
property CustomerPhone:string index 8 read GetStrData write SetStrData;
function DisplayHeader:boolean;
end;
implementation
Constructor Tinvheader.Create();
begin
InvNum:= NextInvNum;
inc(NextInvNum); {Increment global invoice number variable so the next time a header is created it has a new number}
SalesNum:= 0;
CustCode:= '';
CustName:= '';
CustAddr1:= '';
CustAddr2:= '';
CustCity:= '';
CustState:= '';
CustZip:= '';
CustPhone:= '';
InvDate:=now();
end;
procedure Tinvheader.SetNumData(Index:integer;targetdata : integer);
{ Set integer based data in object}
begin
case Index of
1:InvNum := targetdata;
2:SalesNum:= targetdata;
end;
end;
procedure Tinvheader.SetStrData(Index : integer ;targetdata : string);
{ Set string based data in object}
begin
case Index of
1:CustCode := targetdata;
2:CustName:= targetdata;
3:CustAddr1:= targetdata;
4:CustAddr2:= targetdata;
5:CustCity:= targetdata;
6:CustState:= targetdata;
7:CustZip:= targetdata;
8:CustPhone:= targetdata;
end;
end;
function Tinvheader.GetNumData(Index:integer):integer;
{Get integer based data in object}
begin
case Index of
1:GetNumData := InvNum;
2:GetNumData:= SalesNum;
end;
end;
function Tinvheader.GetStrData(Index:integer):string;
{Get string based data in object}
begin
case Index of
1:GetStrData:=CustCode;
2:GetStrData:=CustName;
3:GetStrData:=CustAddr1;
4:GetStrData:=CustAddr2;
5:GetStrData:=CustCity;
6:GetStrData:=CustState;
7:GetStrData:=CustZip;
8:GetStrData:=CustPhone;
end;
end;
function Tinvheader.DisplayHeader:boolean;
{var
ttypelab,saleslab,ccodelab,namel,addlab,phonelab,plevlab,termslab,translab,jobnamlab,storelab,trandtlab,classlab,authchrglab,taxlab,jobnamelab,custpolab:TLabel;}
begin
HeadScreen := TForm.Create(nil);
HeadScreen.Height := 200;
HeadScreen.Width := 400;
DisplayHeader:=True;
end;
end.