/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
TObject i FPC Pascal
Fra : Carsten


Dato : 04-11-08 11:51

Jeg mangler et godt forslag til følgende. Jeg har en data record som
gerne skulle gemmes på en disk ved skrivning af data til recorden, og
evt. læses fra disk ved læsning af data fra samme record. Det gør
følgende kode, men jeg kan kun gemme en hel record ad gangen.
Ligesom jeg kan læse en enkelt post (b:=SafeVar.data.week;) så ville jeg
også gerne kunne skrive "SafeVar.data.week:=b;" Dette giver dog en
kompilerings fejl.
Hvis jeg ændrer rSafeVar til hSafeVar i linien
"property data:SafeVar_typ read rSafeVar write wSafeVar;"
så kan koden kompileres. Problemet er så at "SafeVar.data.week:=b;" ikke
udløser et kald til "wSafevar" men blot gemmer værdien i hSafeVar.

Er der nogle der har en ide.

Mvh

Carsten


-------------------------
program safevartest;
{$mode objfpc}

Uses
sysutils; {System}


Type
SafeVar_typ = packed record
week:byte;
end;

TSafeVar=class(TObject)
Private
hSafeVar:SafeVar_typ;
Procedure wSafeVar(data:SafeVar_typ);
Function rSafeVar:SafeVar_typ;
Public
constructor create;
destructor destroy; override;
property data:SafeVar_typ read rSafeVar write wSafeVar;
Published
end;



var
SafeVar:TSafeVar;
b:byte;
s:SafeVar_typ;

constructor TSafeVar.create;
Begin
inherited Create;
fillchar(hSafeVar,sizeof(SafeVar_typ),chr(0));
End;

destructor TSafeVar.destroy;
Begin
inherited destroy;
End;

Procedure TSafeVar.wSafeVar(data:SafeVar_typ);
Begin
WriteLn('Write record');
End;

Function TSafeVar.rSafeVar:SafeVar_typ;
Begin
WriteLn('Read record');
End;

Begin
SafeVar:=TSafeVar.create;
SafeVar.data:=s;
b:=SafeVar.data.week;
//SafeVar.data.week:=b;
SafeVar.free;
End.

 
 
Uffe Kousgaard (04-11-2008)
Kommentar
Fra : Uffe Kousgaard


Dato : 04-11-08 23:47

"Carsten" <carsten_no-mail_@beas.dk> wrote in message
news:49102925$0$56791$edfadb0f@dtext02.news.tele.dk...
>
> Er der nogle der har en ide.

Jeg tror du er "out-of-luck"

Getter og setter funktioner er nødvendige for at fange skrivning til
variablen, men de virker kun på hele variablen, ikke et enkelt felt i en
record. Ellers skal du lave en ekstra getter/setter for week-feltet alene.

Jeg går udfra, at du har andre felter end week i din record, ellers er hele
systemet lidt meget overkill.



Carsten (07-11-2008)
Kommentar
Fra : Carsten


Dato : 07-11-08 08:40

Uffe Kousgaard wrote:
> Jeg går udfra, at du har andre felter end week i din record, ellers er hele
> systemet lidt meget overkill.
Ja den originale record består af mange felter.
Jeg må finde en anden måde.
Jeg tror at jeg laver en tråd der holder øje med om der sker ændringer i
recorden og så gemmer hvis de bliver nødvendigt.

Carsten


Uffe Kousgaard (07-11-2008)
Kommentar
Fra : Uffe Kousgaard


Dato : 07-11-08 10:15

"Carsten" <carsten_no-mail_@beas.dk> wrote in message
news:4913f0da$0$56792$edfadb0f@dtext02.news.tele.dk...

> Jeg tror at jeg laver en tråd der holder øje med om der sker ændringer i
> recorden og så gemmer hvis de bliver nødvendigt.

Lav hellere getter/setter funktioner til de enkelte felter i din record. Så
kan du opdage ændringen på det tidspunkt og det er alt andet lige nemmere
end tråde.



Carsten (12-11-2008)
Kommentar
Fra : Carsten


Dato : 12-11-08 09:18

Uffe Kousgaard wrote:
> Lav hellere getter/setter funktioner til de enkelte felter i din record. Så
> kan du opdage ændringen på det tidspunkt og det er alt andet lige nemmere
> end tråde.

Da det er en forholdsvis stor record så bliver det nok lidt bøvlet.
Jeg synes nu ikke at det er så besværligt at lave en ekstra tråd til det.

Mvh

Carsten

Søg
Reklame
Statistik
Spørgsmål : 177416
Tips : 31962
Nyheder : 719565
Indlæg : 6407859
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste