Avatar billede madsalber Nybegynder
05. september 2000 - 21:42 Der er 8 kommentarer og
2 løsninger

Component og fejlmeddelelse...

Ohøj,

jeg har en fejlmeddelelse jeg fatter bjælder af:

Stack overflow - save your work and restart Delphi

Jeg benytter Delphi 4 Pro. Fejlen kommer når jeg forsøger at placere et komponent på en form. Komponenten er hjemmebikset. Den arver fra TEdit. I min komponent tilføjer jeg 7-8 properties med tilhørende access-metoder. Derudover overrider jeg constructor Create.
Access-metoderne er placeret i private-delen, property\'erne i published og constructoren i public-delen.

Jeg ved godt at dette er temmelig svævende, men jeg håber der er en med det forkromede overblik der kan fortælle mig hvad jeg gør galt...

Any help appreciated...

/Mads
mads@alber.dk
Avatar billede erikjacobsen Ekspert
05. september 2000 - 21:53 #1
Det er nok fordi den er \"hjemmebikset\"  ;-)  Men måske fordi du laver ubevidst rekursion
i dine read/write-metoder til properties. I komponenten bør du altid referere til den variabel,
der hører til en property i stedet for til property-navnet. Ellers må vi se noget kode.
Avatar billede madsalber Nybegynder
05. september 2000 - 22:27 #2
Tak for det... har ikke liige programmet \'på mig\', så jeg kan ikke verificere det, meeen...

fejlen kommer allerede når jeg forsøger at placere komponenten på formen, altså mens jeg sidder og designer (designer og designer... måske så meget sagt i mit tilfælde...). På det tidspunkt forsøger Delphi da for pokker ikke at eksekvere min kode???

/Mads
Avatar billede erikjacobsen Ekspert
05. september 2000 - 22:30 #3
Jo - det gør den!
Avatar billede madsalber Nybegynder
05. september 2000 - 22:38 #4
Ahaa... og tak.
Avatar billede madsalber Nybegynder
06. september 2000 - 13:26 #5
Ohøj,

det hjalp, tak :-)

Dvs. nu får jeg \'blot\' en EAccessViola...

Vil du ikke have pointene?

/Mads
Avatar billede sjensen Nybegynder
06. september 2000 - 14:03 #6
mads, når du lægger et komponent på en form (eller en anden container) i designtime udføres bl.a. komponentets Create metode, fordi du på det tidspunkt skaber komponentet. Det kan ikke umiddelbart selv finde ud af at du er i designtime og ikke runtime.

Til at holde styr på om man er i den ene eller anden mode findes der en property på alle VCL komponenter der hedder \"componentstate\". Denne antager forskellige værdier afhængig af den \"state\" komponentet er i. Når du er i designmode vil værdien f.eks. være \"csDesigning\".

I din komponent kan du derfor med fordel omkranse de dele af koden der ikke skal bruges i designfasen (eller aktiveres når du putter et komponent på din form) med:

if not [componentstate in [csDesigning]) then
begin
  // do runtimestuff
end;

eller

if [componentstate in [csDesigning]) then
begin
  // do designtimestuff
end else
  // do runtimestuff
end;

På den måde kan du styre at de dele af komponentets kode der ikke kan udføres i designtime, kun udføres i runtime og omvendt.
Avatar billede erikjacobsen Ekspert
06. september 2000 - 14:07 #7
Såmænd vil jeg nok have points, men ikke før vi har løst problemet. Din nye
fejlmeddelelse skal også væk. Lyt til sjensen, eller vis os noget kode.
Avatar billede martinlind Nybegynder
06. september 2000 - 14:10 #8
Hvis du \"kun\" får en EAccessViola... så check om du bruger en Klasse du ikke har fået created, det lyder som om det er det, ellers send koden til : arb@lind-sonne.dk, så skal jeg se hvad du har overset.

*S*
Avatar billede madsalber Nybegynder
07. september 2000 - 13:31 #9
Erik Jacobsen,

der hersker ikke tvivl om at vil kunne komme til at tjene MANGE point på mig i den nærmeste fremtid. Måske det kan være en trøst?

/Mads
Avatar billede erikjacobsen Ekspert
07. september 2000 - 13:52 #10
Intet problem ;-) Hvor mange mangler jeg for at slå
sjensen på top-10 .... hehe.....
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