Avatar billede jeppebecool Nybegynder
07. december 2001 - 13:21 Der er 9 kommentarer og
1 løsning

Komponent programmering Class not found exception

Jeg har lavet en ny Komponent TMidiSequencer som nedarver fra TComponent.

Inde i den unit hvor min komponent ligger har jeg også erklæret en timer Komponent som Sequenceren bruger. Når jeg registrerer Midisequenceren, sætter den ind på en form og kører den , får jeg en class not found exception med navnet på timeren. Timeren er egentlig en kopi af TDXTimer som jeg bare har smidt ind i uniten, fordi jeg havde problemer med at installere DelphiX. Hvad kan der være galt ?
Avatar billede martinlind Nybegynder
07. december 2001 - 13:27 #1
Du skal lave en RegisterClass(TDXTimer) i din Register procedure.

/Martin
Avatar billede jeppebecool Nybegynder
07. december 2001 - 13:46 #2
Hvorfor er det nødvendigt at registere timeren?

mener du

procedure Register;
begin
  Registerclass(\'Pagename\',[classname]);
end;
?

Jeg troede kun det var for at få den op på komponentpaletten, hvilket jeg jo ikke behøver
Avatar billede martinlind Nybegynder
07. december 2001 - 13:50 #3
Nej sådan :

procedure Register;
begin
  RegisterClass(AClass: TPersistentClass);
end;

For så gør du din classe kendt og undgår Class not found fejlen

/Martin
Avatar billede jeppebecool Nybegynder
07. december 2001 - 13:55 #4
Det hjælper ikke.

Jeg får stadig en EClassNotFound exception med beskeden (class \"Timernavn\" not found )
Avatar billede jeppebecool Nybegynder
07. december 2001 - 13:58 #5
En anden skør ting er at selv om jeg fjerner min komponent fra formen bliver den ved med at tilføje uniten i uses erklæringen, og bliver altså ved med at give mig den exception når jeg kører programmet.
Avatar billede martinlind Nybegynder
07. december 2001 - 14:02 #6
Det lyder mærkeligt, du må bruge noget fra den unit et eller andet sted, har du reinstalleret comp. efter du har tilføjet RegisterClass ?
Avatar billede jeppebecool Nybegynder
07. december 2001 - 14:04 #7
næ. Jeg har tilføjet registerclass.

Må jeg sende dig uniten, så kan det være du kan se hvad der er galt ?
Avatar billede martinlind Nybegynder
07. december 2001 - 14:09 #8
martin@e-lind.dk, det bliver muligvis først senere jeg for kigget på det, husk de unit\'s du user.

Prøv lige at registere / installere den packed du har din comp. i, det kunne godt hjælpe.
Avatar billede martinlind Nybegynder
07. december 2001 - 14:27 #9
Ret din Constructor til dette :

constructor TMidiSequencer.Create(AOwner : TComponent);
begin
  inherited;
  TPQN := 120;
  FStepValue := 15;
  BeatsPerMeasure := 4;
  FNoteOnList := TList.Create;
  FNoteOffList := TList.Create;
  FTracks := TList.Create;
  FTimer := TAccurateTimer.Create(Self); <<<<----
  FTimer.Enabled := false;
  FTimer.OnTimer := DoTimer;
  FPosition := TMidiTime.Create(0);
  FMeasureCount := 0;
  Tempo := 120;
  FLog := TStringlist.Create;
  FThrashCan := TList.Create;
end;

Så virker det

/Martin
Avatar billede jeppebecool Nybegynder
12. december 2001 - 10:46 #10
Kanon! Tusind tak. Jeg vidste ikke det kunne give problemer.

Jeppe
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