05. september 2000 - 21:42Der 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...
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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.
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, 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.
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.
Intet problem ;-) Hvor mange mangler jeg for at slå sjensen på top-10 .... hehe.....
Synes godt om
Ny brugerNybegynder
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.