/ 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
Gem variablen?
Fra : Monie Jacobsen


Dato : 22-08-02 03:32

Hej

Har du en ide til, hvordan man på en god måde, kan gemme
de variabler der herunder bliver tildelt en værdi?

Og hvordan de samme variabler kan hentes end igen og kan anvdes igen.

De variablerne der tænkes på er:
P,Radius,i,omdr og Lamda osv.


procedure TOKBottomDlg.RadioButton2Click(Sender: TObject);
begin
v:=12.0;
np:=16/27;
cp:=0.48;
rho:=1.225;
P := Form1.IndtastKommaTal( 'Rotoe effekt P [kw]:', P);
Radius:=sqrt((P*1000*2)/( rho*Cp*(Power(V,3)*Pi )));
Areal:= power(radius,2) * Pi;
Form1.Edit1.Text := FormatFloat('#0.0000', radius);
Form1.Edit5.text := Format('%.2f', [Areal]);
Form1.Edit9.Text := FormatFloat('#0.00', V);
Form1.Edit10.Text := FormatFloat('#0.00', p);
Form1.Show;
end;

MVH
Monie




 
 
// Overby (22-08-2002)
Kommentar
Fra : // Overby


Dato : 22-08-02 08:26

> Har du en ide til, hvordan man på en god måde, kan gemme
> de variabler der herunder bliver tildelt en værdi?

I en fil, tabel eller måske .ini-fil

Daniel



Garfield (22-08-2002)
Kommentar
Fra : Garfield


Dato : 22-08-02 10:43

> > Har du en ide til, hvordan man på en god måde, kan gemme
> > de variabler der herunder bliver tildelt en værdi?
>
> I en fil, tabel eller måske .ini-fil


Eller endnu bedre i Reg. Basen - så kommer der ikke til at flyde filer over
alt på folks maskiner. Man skal bare huske, at ved Uninstall skal man slette
det der er skrevet i Registry, ellers bliver den også bare overfyldt.


Garfield_dk



Monie Jacobsen (22-08-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 22-08-02 15:01

Til Garfield

Gem data-værdi'er i Reg. Basen.
Det kan godt være det er en god ide.
Så ligger filerne jo ikke og flyder.

Har du et eksempel som kan bruges her?
Du er meget velkommen til, at sende mig disse koder for en Reg. Basen, hvis
du vil.

Mvh
Monie

"Garfield" <garfield@email.dk> skrev i en meddelelse
news:ak2bni$2urv$1@news.cybercity.dk...
> > > Har du en ide til, hvordan man på en god måde, kan gemme
> > > de variabler der herunder bliver tildelt en værdi?
> >
> > I en fil, tabel eller måske .ini-fil
>
>
> Eller endnu bedre i Reg. Basen - så kommer der ikke til at flyde filer
over
> alt på folks maskiner. Man skal bare huske, at ved Uninstall skal man
slette
> det der er skrevet i Registry, ellers bliver den også bare overfyldt.
>
>
> Garfield_dk
>
>



Garfield (22-08-2002)
Kommentar
Fra : Garfield


Dato : 22-08-02 20:01


> Gem data-værdi'er i Reg. Basen.
> Det kan godt være det er en god ide.
> Så ligger filerne jo ikke og flyder.

Uses
Registry;

Procedure SkrivTilRegBasen;
Var
Reg : TRegistry;

Begin
Reg:=Tregistry.Create;
Reg.RootKey:=HKey_Current_User;
If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
Reg.CreateKey('Software\Firma\Programnavn');
Reg.WriteString('MyString','Værdi');
Reg.CloseKey;
Reg.Free;
End;

Procedure LæsFraRegBasen;
Var
Reg : TRegistry;
S : String;
Begin
Reg:=Tregistry.Create;
Reg.RootKey:=HKey_Current_User;
If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
Begin
Showmessage('Fejl');
Exit;
End;
S:=Reg.ReadString('MyString');
Showmessage(S);
End;

Resten kan du læses i hjælpen


Vh. Garfield_dk



Monie Jacobsen (23-08-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 23-08-02 14:53

Hej Garfield

Tak for program stumperne.
Som du kan se, har jeg lagt en ny forspørgelse med titlen:
"Værdi'er i Reg.basen hvordan tilføjes de i unit5??"
Har nogle spørgsmål, da det er førstegang jeg skal arbejde Reg.base.
Vil da gerne havde om du vil se på dette?

Med venlig hilsen
Monie

"Garfield" <garfield@email.dk> skrev i en meddelelse
news:ak3ccm$17n6$1@news.cybercity.dk...
>
> > Gem data-værdi'er i Reg. Basen.
> > Det kan godt være det er en god ide.
> > Så ligger filerne jo ikke og flyder.
>
> Uses
> Registry;
>
> Procedure SkrivTilRegBasen;
> Var
> Reg : TRegistry;
>
> Begin
> Reg:=Tregistry.Create;
> Reg.RootKey:=HKey_Current_User;
> If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
> Reg.CreateKey('Software\Firma\Programnavn');
> Reg.WriteString('MyString','Værdi');
> Reg.CloseKey;
> Reg.Free;
> End;
>
> Procedure LæsFraRegBasen;
> Var
> Reg : TRegistry;
> S : String;
> Begin
> Reg:=Tregistry.Create;
> Reg.RootKey:=HKey_Current_User;
> If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
> Begin
> Showmessage('Fejl');
> Exit;
> End;
> S:=Reg.ReadString('MyString');
> Showmessage(S);
> End;
>
> Resten kan du læses i hjælpen
>
>
> Vh. Garfield_dk
>
>



Garfield (23-08-2002)
Kommentar
Fra : Garfield


Dato : 23-08-02 17:00

Hej igen Monie,

jeg må nok indrømme, at dit spørgsmål ikke ligefrem er let forståeligt for
mig.

Så jeg kan ikke helt svare på det. Men har du ICQ, så kan jeg måske hjælpe
der lidt nemmere

Flower: 6731637

Garfield_dk

"Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
news:3d663e42$0$43945$edfadb0f@dspool01.news.tele.dk...
> Hej Garfield
>
> Tak for program stumperne.
> Som du kan se, har jeg lagt en ny forspørgelse med titlen:
> "Værdi'er i Reg.basen hvordan tilføjes de i unit5??"
> Har nogle spørgsmål, da det er førstegang jeg skal arbejde Reg.base.
> Vil da gerne havde om du vil se på dette?
>
> Med venlig hilsen
> Monie
>
> "Garfield" <garfield@email.dk> skrev i en meddelelse
> news:ak3ccm$17n6$1@news.cybercity.dk...
> >
> > > Gem data-værdi'er i Reg. Basen.
> > > Det kan godt være det er en god ide.
> > > Så ligger filerne jo ikke og flyder.
> >
> > Uses
> > Registry;
> >
> > Procedure SkrivTilRegBasen;
> > Var
> > Reg : TRegistry;
> >
> > Begin
> > Reg:=Tregistry.Create;
> > Reg.RootKey:=HKey_Current_User;
> > If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
> > Reg.CreateKey('Software\Firma\Programnavn');
> > Reg.WriteString('MyString','Værdi');
> > Reg.CloseKey;
> > Reg.Free;
> > End;
> >
> > Procedure LæsFraRegBasen;
> > Var
> > Reg : TRegistry;
> > S : String;
> > Begin
> > Reg:=Tregistry.Create;
> > Reg.RootKey:=HKey_Current_User;
> > If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
> > Begin
> > Showmessage('Fejl');
> > Exit;
> > End;
> > S:=Reg.ReadString('MyString');
> > Showmessage(S);
> > End;
> >
> > Resten kan du læses i hjælpen
> >
> >
> > Vh. Garfield_dk
> >
> >
>
>



Monie Jacobsen (23-08-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 23-08-02 18:04

Til Garfield

>Men har du ICQ, så kan jeg måske hjælpe der lidt nemmere?
Jeg er ny bruger af Delphi 6 enterprise, købt i dyre domme.
Ved ikke hvad ICQ er! Måske er dette en beder måde?
Men at bruge Reg.basen for Gem og Hent data-værdier.
Og hente data-værdierne ind og tilføje dem til program.
Det må kunne gøres?

Med venlig hilsen
Monie




Garfield (24-08-2002)
Kommentar
Fra : Garfield


Dato : 24-08-02 10:53

Hej igen,

vi prøver:

Unit Unit5;

Uses Registry (+en masse andre);

Var
Vtip, Vn, v, ,np, cp, rho : Float; (Måske Float ikke er den rette type)
Reg : TRegistry;

Procedure HentTalFraReg;
Begin
Reg:=Tregistry.Create;
Reg.RootKey:=HKey_Current_User;
If Reg.OpenKey('Software\MitFirma\MitProgramnavn',False)=False Then
//Bemærk at MitFirma og MitProgramNavn skal erstattes af rigtige navne
Begin
Showmessage('Fejl - Der er endnu ikke gemt nogle værdier i Reg.
Basen');
Exit;
End;
Vtip:=Reg.ReadFloat('Vtip');
Vn:=Reg.ReadFloat('Vn');
v:=Reg.ReadFloat('v');
//osv med np, cp og rho
//Nu har du hentet værdierne ind i variablerne som kan bruges i hele
Unit5, alternativt lægger du variablerne op før Implementation - så akn du
//finde værdierne i hele programmet, hvis du tilføjer Unit5 i dine
Uses-statements.
Reg.CloseKey;
Reg.Free;
End;

Procedure SkrivTalTilReg;
Var
Reg : TRegistry;

Begin
Reg:=Tregistry.Create;
Reg.RootKey:=HKey_Current_User;
If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
Reg.CreateKey('Software\Firma\Programnavn');
Reg.WriteFloat('Vtip',Vtip);
Reg.WriteFloat('Vn',Vn);
Reg.WriteFloat('v',v);
// osv med np, cp, rho
Reg.CloseKey;
Reg.Free;
End;

Nu kan du hente værdierne i reg. basen og skrive dem til reg. basen. Regner
med, at du ved, hvordan du kan bruge disse værdier.

tjek www.icq.com - måske det ville være en god ide

Garfield_dk
"Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
news:3d666af9$0$27647$edfadb0f@dspool01.news.tele.dk...
> Til Garfield
>
> >Men har du ICQ, så kan jeg måske hjælpe der lidt nemmere?
> Jeg er ny bruger af Delphi 6 enterprise, købt i dyre domme.
> Ved ikke hvad ICQ er! Måske er dette en beder måde?
> Men at bruge Reg.basen for Gem og Hent data-værdier.
> Og hente data-værdierne ind og tilføje dem til program.
> Det må kunne gøres?
>
> Med venlig hilsen
> Monie
>
>
>



Monie Jacobsen (24-08-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 24-08-02 18:25

Hej Garfield
Tak det virkede bare.
Lige et lille spørgsmål.
Kan der bruges GemSom og dermed navngive de enkelte projekter?
Eller har du en bedere måde?

MVH
Monie

"Garfield" <garfield@email.dk> skrev i en meddelelse
news:ak7l2i$2nim$1@news.cybercity.dk...
> Hej igen,
>
> vi prøver:
>
> Unit Unit5;
>
> Uses Registry (+en masse andre);
>
> Var
> Vtip, Vn, v, ,np, cp, rho : Float; (Måske Float ikke er den rette type)
> Reg : TRegistry;
>
> Procedure HentTalFraReg;
> Begin
> Reg:=Tregistry.Create;
> Reg.RootKey:=HKey_Current_User;
> If Reg.OpenKey('Software\MitFirma\MitProgramnavn',False)=False Then
> //Bemærk at MitFirma og MitProgramNavn skal erstattes af rigtige navne
> Begin
> Showmessage('Fejl - Der er endnu ikke gemt nogle værdier i Reg.
> Basen');
> Exit;
> End;
> Vtip:=Reg.ReadFloat('Vtip');
> Vn:=Reg.ReadFloat('Vn');
> v:=Reg.ReadFloat('v');
> //osv med np, cp og rho
> //Nu har du hentet værdierne ind i variablerne som kan bruges i hele
> Unit5, alternativt lægger du variablerne op før Implementation - så akn du
> //finde værdierne i hele programmet, hvis du tilføjer Unit5 i dine
> Uses-statements.
> Reg.CloseKey;
> Reg.Free;
> End;
>
> Procedure SkrivTalTilReg;
> Var
> Reg : TRegistry;
>
> Begin
> Reg:=Tregistry.Create;
> Reg.RootKey:=HKey_Current_User;
> If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
> Reg.CreateKey('Software\Firma\Programnavn');
> Reg.WriteFloat('Vtip',Vtip);
> Reg.WriteFloat('Vn',Vn);
> Reg.WriteFloat('v',v);
> // osv med np, cp, rho
> Reg.CloseKey;
> Reg.Free;
> End;
>
> Nu kan du hente værdierne i reg. basen og skrive dem til reg. basen.
Regner
> med, at du ved, hvordan du kan bruge disse værdier.
>
> tjek www.icq.com - måske det ville være en god ide
>
> Garfield_dk
> "Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
> news:3d666af9$0$27647$edfadb0f@dspool01.news.tele.dk...
> > Til Garfield
> >
> > >Men har du ICQ, så kan jeg måske hjælpe der lidt nemmere?
> > Jeg er ny bruger af Delphi 6 enterprise, købt i dyre domme.
> > Ved ikke hvad ICQ er! Måske er dette en beder måde?
> > Men at bruge Reg.basen for Gem og Hent data-værdier.
> > Og hente data-værdierne ind og tilføje dem til program.
> > Det må kunne gøres?
> >
> > Med venlig hilsen
> > Monie
> >
> >
> >
>
>



Garfield (25-08-2002)
Kommentar
Fra : Garfield


Dato : 25-08-02 17:00

Hej, hvis du vil bruge flere projekter, så bliver det måske lidt mere
besværligt, og
jeg ville vælge at løse det med Records, som skrives som Data i Registry -
eller
i filer.

Jeg har lige lavet et eksempel, som viser hvordan det kan gøres i Registry -
men
hold tungen lige i munden - for det bliver noget mere tricky.

Uses Registry;

Type
TMyRecord = Record
X, Y, Z : Integer;
End;

TaMyRecord = Array[1..1] of TMyRecord;
PaMyRecord = ^TaMyRecord;



Var
Reg : TRegistry; //Registreringsdatabasen
PMyRecord : PaMyRecord; //Indeholder de data som er angivet under
TMyRecord, og kan frit ændres
AntalPMyRecord : Integer; //Angiver hvor mange forskellige Records du har
(antal forskellige projekter - 1 projekt = en PMyRecord)

Procedure ReadReg; //Læser data fra Registry.
Begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKey_Current_User;
If Reg.OpenKey('Software\Primeware\TestProg',False)=False Then
Begin
Showmessage('Fejl');
Exit;
End;
AntalPMyRecord:=Reg.ReadInteger('Antal'); //Her henter den antallet af
projekter
Getmem(PMyRecord,SizeOf(PMyRecord)*AntalPMyRecord); //Her allokerer du
den nødvendige hukommelse i maskinen
Reg.ReadBinaryData('Data',PMyRecord^,SizeOf(PMyRecord)*AntalPMyRecord);
//Her hentes data fra Registry
ShowMessage(IntToStr(PMyRecord[1].X)); //Her vises indholdet af
PMyRecord[1] - som er projekt nr. 1
Freemem(PMyRecord); //Her frigives hukommelsen igen, men dette skal kun
gøres, hvis der ikke skal arbejdes med indholdet.
Reg.CloseKey;
Reg.Free;
End;

Procedure WriteReg;
Begin
AntalPMyRecord:=1; //Her skal du angive, hvor mange projekter der er
igang - husk inc(AntalPMyRecord,1) - hvergang et nyt projekt tilføjes.
Getmem(PMyRecord,SizeOf(PMyRecord)*AntalPMyRecord); //Her allokeres igen
hukommelse
PMyRecord[1].X:=3; //Her sættes Projekt 1 variabel X til 3
Reg:=TRegistry.Create;
Reg.RootKey:=HKey_Current_User;
Reg.OpenKey('Software\Primeware\TestProg',True); //True angiver, at Key
Software osv. bliver oprettet, hvis den ikke eksisterer
Reg.WriteInteger('Antal',AntalPMyRecord); //Her skrives antallet af
projekter du har gang i
Reg.WriteBinaryData('Data',PMyRecord^,SizeOf(PMyRecord)*AntalPMyRecord);
//Her gemmes data som ligger i PMyRecord
Reg.CloseKey;
Reg.Free;
Freemem(PMyRecord); //Hukommelse frigives.
End;

Se dette gør tingene lidt mere komplicerede, men meget nemmere at arbejde
med. Alternativet til ovenstående er, at gemme hvert projekt
som en tekstfil, hvor du skal lave nogle gennemløb for at se antallet af
projekter osv.

Ellers kan du anvende binærfiler, men der er konceptet næsten det samme,
bortset fra, at du kan undgå hukommelses delen.
(Smag og behag)

Hvorfor har du egentlig inv. i Enterprise, hvis du kun er på
begynderstadiet? - Burde du ikke være startet med Pro eller Personal,
sådan bare lige indtil du fik noget mere indsigt i Delphi og dets univers -
virker på mig som en smule overkill ?

Garfield_dk

"Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
news:3d67c17b$0$43966$edfadb0f@dspool01.news.tele.dk...
> Hej Garfield
> Tak det virkede bare.
> Lige et lille spørgsmål.
> Kan der bruges GemSom og dermed navngive de enkelte projekter?
> Eller har du en bedere måde?
>
> MVH
> Monie
>
> "Garfield" <garfield@email.dk> skrev i en meddelelse
> news:ak7l2i$2nim$1@news.cybercity.dk...
> > Hej igen,
> >
> > vi prøver:
> >
> > Unit Unit5;
> >
> > Uses Registry (+en masse andre);
> >
> > Var
> > Vtip, Vn, v, ,np, cp, rho : Float; (Måske Float ikke er den rette
type)
> > Reg : TRegistry;
> >
> > Procedure HentTalFraReg;
> > Begin
> > Reg:=Tregistry.Create;
> > Reg.RootKey:=HKey_Current_User;
> > If Reg.OpenKey('Software\MitFirma\MitProgramnavn',False)=False Then
> > //Bemærk at MitFirma og MitProgramNavn skal erstattes af rigtige navne
> > Begin
> > Showmessage('Fejl - Der er endnu ikke gemt nogle værdier i Reg.
> > Basen');
> > Exit;
> > End;
> > Vtip:=Reg.ReadFloat('Vtip');
> > Vn:=Reg.ReadFloat('Vn');
> > v:=Reg.ReadFloat('v');
> > //osv med np, cp og rho
> > //Nu har du hentet værdierne ind i variablerne som kan bruges i hele
> > Unit5, alternativt lægger du variablerne op før Implementation - så akn
du
> > //finde værdierne i hele programmet, hvis du tilføjer Unit5 i dine
> > Uses-statements.
> > Reg.CloseKey;
> > Reg.Free;
> > End;
> >
> > Procedure SkrivTalTilReg;
> > Var
> > Reg : TRegistry;
> >
> > Begin
> > Reg:=Tregistry.Create;
> > Reg.RootKey:=HKey_Current_User;
> > If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
> > Reg.CreateKey('Software\Firma\Programnavn');
> > Reg.WriteFloat('Vtip',Vtip);
> > Reg.WriteFloat('Vn',Vn);
> > Reg.WriteFloat('v',v);
> > // osv med np, cp, rho
> > Reg.CloseKey;
> > Reg.Free;
> > End;
> >
> > Nu kan du hente værdierne i reg. basen og skrive dem til reg. basen.
> Regner
> > med, at du ved, hvordan du kan bruge disse værdier.
> >
> > tjek www.icq.com - måske det ville være en god ide
> >
> > Garfield_dk
> > "Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
> > news:3d666af9$0$27647$edfadb0f@dspool01.news.tele.dk...
> > > Til Garfield
> > >
> > > >Men har du ICQ, så kan jeg måske hjælpe der lidt nemmere?
> > > Jeg er ny bruger af Delphi 6 enterprise, købt i dyre domme.
> > > Ved ikke hvad ICQ er! Måske er dette en beder måde?
> > > Men at bruge Reg.basen for Gem og Hent data-værdier.
> > > Og hente data-værdierne ind og tilføje dem til program.
> > > Det må kunne gøres?
> > >
> > > Med venlig hilsen
> > > Monie
> > >
> > >
> > >
> >
> >
>
>



Monie Jacobsen (25-08-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 25-08-02 17:16

Tak Garfield

Jeg vil prøve det du skriver her. Mange tak.

MVH
Monie


"Garfield" <garfield@email.dk> skrev i en meddelelse
news:akauu9$1gk3$1@news.cybercity.dk...
> Hej, hvis du vil bruge flere projekter, så bliver det måske lidt mere
> besværligt, og
> jeg ville vælge at løse det med Records, som skrives som Data i Registry -
> eller
> i filer.
>
> Jeg har lige lavet et eksempel, som viser hvordan det kan gøres i
Registry -
> men
> hold tungen lige i munden - for det bliver noget mere tricky.
>
> Uses Registry;
>
> Type
> TMyRecord = Record
> X, Y, Z : Integer;
> End;
>
> TaMyRecord = Array[1..1] of TMyRecord;
> PaMyRecord = ^TaMyRecord;
>
>
>
> Var
> Reg : TRegistry; //Registreringsdatabasen
> PMyRecord : PaMyRecord; //Indeholder de data som er angivet under
> TMyRecord, og kan frit ændres
> AntalPMyRecord : Integer; //Angiver hvor mange forskellige Records du
har
> (antal forskellige projekter - 1 projekt = en PMyRecord)
>
> Procedure ReadReg; //Læser data fra Registry.
> Begin
> Reg:=TRegistry.Create;
> Reg.RootKey:=HKey_Current_User;
> If Reg.OpenKey('Software\Primeware\TestProg',False)=False Then
> Begin
> Showmessage('Fejl');
> Exit;
> End;
> AntalPMyRecord:=Reg.ReadInteger('Antal'); //Her henter den antallet af
> projekter
> Getmem(PMyRecord,SizeOf(PMyRecord)*AntalPMyRecord); //Her allokerer du
> den nødvendige hukommelse i maskinen
> Reg.ReadBinaryData('Data',PMyRecord^,SizeOf(PMyRecord)*AntalPMyRecord);
> //Her hentes data fra Registry
> ShowMessage(IntToStr(PMyRecord[1].X)); //Her vises indholdet af
> PMyRecord[1] - som er projekt nr. 1
> Freemem(PMyRecord); //Her frigives hukommelsen igen, men dette skal kun
> gøres, hvis der ikke skal arbejdes med indholdet.
> Reg.CloseKey;
> Reg.Free;
> End;
>
> Procedure WriteReg;
> Begin
> AntalPMyRecord:=1; //Her skal du angive, hvor mange projekter der er
> igang - husk inc(AntalPMyRecord,1) - hvergang et nyt projekt tilføjes.
> Getmem(PMyRecord,SizeOf(PMyRecord)*AntalPMyRecord); //Her allokeres igen
> hukommelse
> PMyRecord[1].X:=3; //Her sættes Projekt 1 variabel X til 3
> Reg:=TRegistry.Create;
> Reg.RootKey:=HKey_Current_User;
> Reg.OpenKey('Software\Primeware\TestProg',True); //True angiver, at Key
> Software osv. bliver oprettet, hvis den ikke eksisterer
> Reg.WriteInteger('Antal',AntalPMyRecord); //Her skrives antallet af
> projekter du har gang i
> Reg.WriteBinaryData('Data',PMyRecord^,SizeOf(PMyRecord)*AntalPMyRecord);
> //Her gemmes data som ligger i PMyRecord
> Reg.CloseKey;
> Reg.Free;
> Freemem(PMyRecord); //Hukommelse frigives.
> End;
>
> Se dette gør tingene lidt mere komplicerede, men meget nemmere at arbejde
> med. Alternativet til ovenstående er, at gemme hvert projekt
> som en tekstfil, hvor du skal lave nogle gennemløb for at se antallet af
> projekter osv.
>
> Ellers kan du anvende binærfiler, men der er konceptet næsten det samme,
> bortset fra, at du kan undgå hukommelses delen.
> (Smag og behag)
>
> Hvorfor har du egentlig inv. i Enterprise, hvis du kun er på
> begynderstadiet? - Burde du ikke være startet med Pro eller Personal,
> sådan bare lige indtil du fik noget mere indsigt i Delphi og dets
univers -
> virker på mig som en smule overkill ?
>
> Garfield_dk
>
> "Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
> news:3d67c17b$0$43966$edfadb0f@dspool01.news.tele.dk...
> > Hej Garfield
> > Tak det virkede bare.
> > Lige et lille spørgsmål.
> > Kan der bruges GemSom og dermed navngive de enkelte projekter?
> > Eller har du en bedere måde?
> >
> > MVH
> > Monie
> >
> > "Garfield" <garfield@email.dk> skrev i en meddelelse
> > news:ak7l2i$2nim$1@news.cybercity.dk...
> > > Hej igen,
> > >
> > > vi prøver:
> > >
> > > Unit Unit5;
> > >
> > > Uses Registry (+en masse andre);
> > >
> > > Var
> > > Vtip, Vn, v, ,np, cp, rho : Float; (Måske Float ikke er den rette
> type)
> > > Reg : TRegistry;
> > >
> > > Procedure HentTalFraReg;
> > > Begin
> > > Reg:=Tregistry.Create;
> > > Reg.RootKey:=HKey_Current_User;
> > > If Reg.OpenKey('Software\MitFirma\MitProgramnavn',False)=False Then
> > > //Bemærk at MitFirma og MitProgramNavn skal erstattes af rigtige navne
> > > Begin
> > > Showmessage('Fejl - Der er endnu ikke gemt nogle værdier i Reg.
> > > Basen');
> > > Exit;
> > > End;
> > > Vtip:=Reg.ReadFloat('Vtip');
> > > Vn:=Reg.ReadFloat('Vn');
> > > v:=Reg.ReadFloat('v');
> > > //osv med np, cp og rho
> > > //Nu har du hentet værdierne ind i variablerne som kan bruges i hele
> > > Unit5, alternativt lægger du variablerne op før Implementation - så
akn
> du
> > > //finde værdierne i hele programmet, hvis du tilføjer Unit5 i dine
> > > Uses-statements.
> > > Reg.CloseKey;
> > > Reg.Free;
> > > End;
> > >
> > > Procedure SkrivTalTilReg;
> > > Var
> > > Reg : TRegistry;
> > >
> > > Begin
> > > Reg:=Tregistry.Create;
> > > Reg.RootKey:=HKey_Current_User;
> > > If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
> > > Reg.CreateKey('Software\Firma\Programnavn');
> > > Reg.WriteFloat('Vtip',Vtip);
> > > Reg.WriteFloat('Vn',Vn);
> > > Reg.WriteFloat('v',v);
> > > // osv med np, cp, rho
> > > Reg.CloseKey;
> > > Reg.Free;
> > > End;
> > >
> > > Nu kan du hente værdierne i reg. basen og skrive dem til reg. basen.
> > Regner
> > > med, at du ved, hvordan du kan bruge disse værdier.
> > >
> > > tjek www.icq.com - måske det ville være en god ide
> > >
> > > Garfield_dk
> > > "Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
> > > news:3d666af9$0$27647$edfadb0f@dspool01.news.tele.dk...
> > > > Til Garfield
> > > >
> > > > >Men har du ICQ, så kan jeg måske hjælpe der lidt nemmere?
> > > > Jeg er ny bruger af Delphi 6 enterprise, købt i dyre domme.
> > > > Ved ikke hvad ICQ er! Måske er dette en beder måde?
> > > > Men at bruge Reg.basen for Gem og Hent data-værdier.
> > > > Og hente data-værdierne ind og tilføje dem til program.
> > > > Det må kunne gøres?
> > > >
> > > > Med venlig hilsen
> > > > Monie
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Garfield (25-08-2002)
Kommentar
Fra : Garfield


Dato : 25-08-02 17:59

Hej Monie,

jeg er ved at gå amok ...

Jeg har lige testet med 2 "projekter". Og det virker bare lige helt a h'
til...

Så prøv dette her i stedet for, så er du sikker på, at det virker

Her benytter jeg en fil - C:\Test.dat og ikke PC'ens hukommelse, men dens
virtuelle hukommelse.

Desværre kan jeg ikke få den til at makke ret med Registry

...... et program med to buttons på Form1

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Registry, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


TMyRecord = Record
X, Y, Z : Integer;
End;

TaMyRecord = Array[1..1] of TMyRecord;
PaMyRecord = ^TaMyRecord;



Var
Reg : TRegistry;
PMyRecord : PaMyRecord;
AntalPMyRecord : Integer;
S : TMemoryStream;


var
Form1: TForm1;

implementation
{$R *.dfm}

Procedure ReadFile;
Var

Size, Loop, I : Integer;
Begin
S:=TMemoryStream.Create;
S.LoadFromFile('C:\Test.dat');

AntalPMyRecord:=Integer(S.Size) div SizeOf(PMyRecord);

Size:=SizeOf(PMyRecord)*AntalPMyRecord;

PMyRecord:=VirtualAlloc(Nil,Size,Mem_Commit,Page_ReadWrite);

For Loop:=1 To AntalPMyRecord Do
S.Read(PMyRecord^[Loop],SizeOf(PMyRecord));

For I:=1 To 2 Do
ShowMessage(IntToStr(PMyRecord^[I].X));
VirtualFree(PMyRecord,Size,Mem_Decommit);
S.Free;
End;

Procedure WriteFile;
Var
Loop, Size : Integer;
Begin

S:=TMemoryStream.Create;
AntalPMyRecord:=2;
Size:=SizeOf(PMyRecord)*AntalPMyRecord;
PMyRecord:=VirtualAlloc(Nil,Size,Mem_Commit,Page_ReadWrite);

For Loop:=1 to AntalPMyRecord Do
PMyRecord^[Loop].X:=Loop+2;

For Loop:=1 To AntalPMyRecord Do
S.Write(PMyRecord^[Loop],SizeOf(PMyRecord));

VirtualFree(PMyRecord,Size,Mem_Decommit);
S.SaveToFile('C:\Test.dat');
S.Free;
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
ReadFile;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
WriteFile;
end;

end.


"Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
news:3d6902a1$0$27660$edfadb0f@dspool01.news.tele.dk...
> Tak Garfield
>
> Jeg vil prøve det du skriver her. Mange tak.
>
> MVH
> Monie
>
>
> "Garfield" <garfield@email.dk> skrev i en meddelelse
> news:akauu9$1gk3$1@news.cybercity.dk...
> > Hej, hvis du vil bruge flere projekter, så bliver det måske lidt mere
> > besværligt, og
> > jeg ville vælge at løse det med Records, som skrives som Data i
Registry -
> > eller
> > i filer.
> >
> > Jeg har lige lavet et eksempel, som viser hvordan det kan gøres i
> Registry -
> > men
> > hold tungen lige i munden - for det bliver noget mere tricky.
> >
> > Uses Registry;
> >
> > Type
> > TMyRecord = Record
> > X, Y, Z : Integer;
> > End;
> >
> > TaMyRecord = Array[1..1] of TMyRecord;
> > PaMyRecord = ^TaMyRecord;
> >
> >
> >
> > Var
> > Reg : TRegistry; //Registreringsdatabasen
> > PMyRecord : PaMyRecord; //Indeholder de data som er angivet under
> > TMyRecord, og kan frit ændres
> > AntalPMyRecord : Integer; //Angiver hvor mange forskellige Records du
> har
> > (antal forskellige projekter - 1 projekt = en PMyRecord)
> >
> > Procedure ReadReg; //Læser data fra Registry.
> > Begin
> > Reg:=TRegistry.Create;
> > Reg.RootKey:=HKey_Current_User;
> > If Reg.OpenKey('Software\Primeware\TestProg',False)=False Then
> > Begin
> > Showmessage('Fejl');
> > Exit;
> > End;
> > AntalPMyRecord:=Reg.ReadInteger('Antal'); //Her henter den antallet
af
> > projekter
> > Getmem(PMyRecord,SizeOf(PMyRecord)*AntalPMyRecord); //Her allokerer
du
> > den nødvendige hukommelse i maskinen
> >
Reg.ReadBinaryData('Data',PMyRecord^,SizeOf(PMyRecord)*AntalPMyRecord);
> > //Her hentes data fra Registry
> > ShowMessage(IntToStr(PMyRecord[1].X)); //Her vises indholdet af
> > PMyRecord[1] - som er projekt nr. 1
> > Freemem(PMyRecord); //Her frigives hukommelsen igen, men dette skal
kun
> > gøres, hvis der ikke skal arbejdes med indholdet.
> > Reg.CloseKey;
> > Reg.Free;
> > End;
> >
> > Procedure WriteReg;
> > Begin
> > AntalPMyRecord:=1; //Her skal du angive, hvor mange projekter der er
> > igang - husk inc(AntalPMyRecord,1) - hvergang et nyt projekt tilføjes.
> > Getmem(PMyRecord,SizeOf(PMyRecord)*AntalPMyRecord); //Her allokeres
igen
> > hukommelse
> > PMyRecord[1].X:=3; //Her sættes Projekt 1 variabel X til 3
> > Reg:=TRegistry.Create;
> > Reg.RootKey:=HKey_Current_User;
> > Reg.OpenKey('Software\Primeware\TestProg',True); //True angiver, at
Key
> > Software osv. bliver oprettet, hvis den ikke eksisterer
> > Reg.WriteInteger('Antal',AntalPMyRecord); //Her skrives antallet af
> > projekter du har gang i
> >
Reg.WriteBinaryData('Data',PMyRecord^,SizeOf(PMyRecord)*AntalPMyRecord);
> > //Her gemmes data som ligger i PMyRecord
> > Reg.CloseKey;
> > Reg.Free;
> > Freemem(PMyRecord); //Hukommelse frigives.
> > End;
> >
> > Se dette gør tingene lidt mere komplicerede, men meget nemmere at
arbejde
> > med. Alternativet til ovenstående er, at gemme hvert projekt
> > som en tekstfil, hvor du skal lave nogle gennemløb for at se antallet af
> > projekter osv.
> >
> > Ellers kan du anvende binærfiler, men der er konceptet næsten det samme,
> > bortset fra, at du kan undgå hukommelses delen.
> > (Smag og behag)
> >
> > Hvorfor har du egentlig inv. i Enterprise, hvis du kun er på
> > begynderstadiet? - Burde du ikke være startet med Pro eller Personal,
> > sådan bare lige indtil du fik noget mere indsigt i Delphi og dets
> univers -
> > virker på mig som en smule overkill ?
> >
> > Garfield_dk
> >
> > "Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
> > news:3d67c17b$0$43966$edfadb0f@dspool01.news.tele.dk...
> > > Hej Garfield
> > > Tak det virkede bare.
> > > Lige et lille spørgsmål.
> > > Kan der bruges GemSom og dermed navngive de enkelte projekter?
> > > Eller har du en bedere måde?
> > >
> > > MVH
> > > Monie
> > >
> > > "Garfield" <garfield@email.dk> skrev i en meddelelse
> > > news:ak7l2i$2nim$1@news.cybercity.dk...
> > > > Hej igen,
> > > >
> > > > vi prøver:
> > > >
> > > > Unit Unit5;
> > > >
> > > > Uses Registry (+en masse andre);
> > > >
> > > > Var
> > > > Vtip, Vn, v, ,np, cp, rho : Float; (Måske Float ikke er den rette
> > type)
> > > > Reg : TRegistry;
> > > >
> > > > Procedure HentTalFraReg;
> > > > Begin
> > > > Reg:=Tregistry.Create;
> > > > Reg.RootKey:=HKey_Current_User;
> > > > If Reg.OpenKey('Software\MitFirma\MitProgramnavn',False)=False
Then
> > > > //Bemærk at MitFirma og MitProgramNavn skal erstattes af rigtige
navne
> > > > Begin
> > > > Showmessage('Fejl - Der er endnu ikke gemt nogle værdier i
Reg.
> > > > Basen');
> > > > Exit;
> > > > End;
> > > > Vtip:=Reg.ReadFloat('Vtip');
> > > > Vn:=Reg.ReadFloat('Vn');
> > > > v:=Reg.ReadFloat('v');
> > > > //osv med np, cp og rho
> > > > //Nu har du hentet værdierne ind i variablerne som kan bruges i
hele
> > > > Unit5, alternativt lægger du variablerne op før Implementation - så
> akn
> > du
> > > > //finde værdierne i hele programmet, hvis du tilføjer Unit5 i dine
> > > > Uses-statements.
> > > > Reg.CloseKey;
> > > > Reg.Free;
> > > > End;
> > > >
> > > > Procedure SkrivTalTilReg;
> > > > Var
> > > > Reg : TRegistry;
> > > >
> > > > Begin
> > > > Reg:=Tregistry.Create;
> > > > Reg.RootKey:=HKey_Current_User;
> > > > If Reg.OpenKey('Software\Firma\Programnavn',False)=False Then
> > > > Reg.CreateKey('Software\Firma\Programnavn');
> > > > Reg.WriteFloat('Vtip',Vtip);
> > > > Reg.WriteFloat('Vn',Vn);
> > > > Reg.WriteFloat('v',v);
> > > > // osv med np, cp, rho
> > > > Reg.CloseKey;
> > > > Reg.Free;
> > > > End;
> > > >
> > > > Nu kan du hente værdierne i reg. basen og skrive dem til reg. basen.
> > > Regner
> > > > med, at du ved, hvordan du kan bruge disse værdier.
> > > >
> > > > tjek www.icq.com - måske det ville være en god ide
> > > >
> > > > Garfield_dk
> > > > "Monie Jacobsen" <monie@tdcadsl.dk> wrote in message
> > > > news:3d666af9$0$27647$edfadb0f@dspool01.news.tele.dk...
> > > > > Til Garfield
> > > > >
> > > > > >Men har du ICQ, så kan jeg måske hjælpe der lidt nemmere?
> > > > > Jeg er ny bruger af Delphi 6 enterprise, købt i dyre domme.
> > > > > Ved ikke hvad ICQ er! Måske er dette en beder måde?
> > > > > Men at bruge Reg.basen for Gem og Hent data-værdier.
> > > > > Og hente data-værdierne ind og tilføje dem til program.
> > > > > Det må kunne gøres?
> > > > >
> > > > > Med venlig hilsen
> > > > > Monie
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Monie Jacobsen (26-08-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 26-08-02 11:26

Til Garfield

Tak for dit forslag.
Det er meget fint, at kunne gemme værdierne i en *.dat file
Med kommando ReadFile for læsning, fremkommer der 2 tal 3 og 4.

Hvis der findes følgende variabler i F.eks Unit2,
som er tildelt værdierne:
Radius :=12.5;
Power :=39.6:
Lamda :=5.5;

Hvordan tilskrives variablerne så i dit eksempel herunder for både skriv og
læsning?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Registry, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
Procedure ReadFile;
Procedure WriteFile;

private
{ Private declarations }
public
{ Public declarations }
end;

TMyRecord = Record
X, Y, Z : Integer;
End;

TaMyRecord = Array[1..1] of TMyRecord;
PaMyRecord = ^TaMyRecord;

Var
Reg : TRegistry;
PMyRecord : PaMyRecord;
AntalPMyRecord : Integer;
S : TMemoryStream;

var
Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.ReadFile;
Var
Size, Loop, I : Integer;
Begin
S:=TMemoryStream.Create;
S.LoadFromFile('C:\Test.dat');

AntalPMyRecord:=Integer(S.Size) div SizeOf(PMyRecord);

Size:=SizeOf(PMyRecord)*AntalPMyRecord;

PMyRecord:=VirtualAlloc(Nil,Size,Mem_Commit,Page_ReadWrite);

For Loop:=1 To AntalPMyRecord Do
S.Read(PMyRecord^[Loop],SizeOf(PMyRecord));

For I:=1 To 2 Do
ShowMessage(IntToStr(PMyRecord^[I].X));
VirtualFree(PMyRecord,Size,Mem_Decommit);
S.Free;
End;

procedure TForm1.WriteFile;
Var
Loop, Size : Integer;
Begin

S:=TMemoryStream.Create;
AntalPMyRecord:=2;
Size:=SizeOf(PMyRecord)*AntalPMyRecord;
PMyRecord:=VirtualAlloc(Nil,Size,Mem_Commit,Page_ReadWrite);

For Loop:=1 to AntalPMyRecord Do
PMyRecord^[Loop].X:=Loop+2;

For Loop:=1 To AntalPMyRecord Do
S.Write(PMyRecord^[Loop],SizeOf(PMyRecord));

VirtualFree(PMyRecord,Size,Mem_Decommit);
S.SaveToFile('C:\Test.dat');
S.Free;
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
ReadFile;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
WriteFile;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
end.

MVH
Monie




Garfield (26-08-2002)
Kommentar
Fra : Garfield


Dato : 26-08-02 18:07

Hej Monie,

Der er flere ting i din programmering, som jeg synes gør tingene mere
besværlige end de gavner.

1: Alle procedure og functions behøver ikke være tilknyttet Fx TForm1 som du
vil nedenfor. Du kan sagtens have en procedure som kaldes ReadFile og
Writefile, uden at de behøver at være TForm1.Readfile osv.

2: Du er meget begrænset i dine valg af løsninger. Du vil have at alle
operationer bliver udført i flere forskellige units, hvilket i sidste ende
medfører en masse ekstra programmering og ikke mindst dobbelt programmering,
hvilket igen fører til, at du skal holde mere kode ajour ved ændringer og
opdateringer.

Jeg gør altid følgende:

- Nye forms tildeles deres egen Unit - indholdet i den Unit er
udelukkende grafisk og
baseret på de events der udføres fx Button1.OnClick

- I en Unit der hedder Utils.pas laver jeg så alle procedurer - Herved
bliver
overblikket godt, og man undgår at skulle finde koden i diverse
units.

Måden at få ovenstående til at virke på er, at man i Unit1, 2 osv. tilføjer
Utils til uses statement, og samtidig i Utils tilføjer Unit1, 2 osv. i en
>>Lokal<< uses statement

Sådan her gøres det med Uses

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Registry, Dialogs, StdCtrls, UTILS; <------- her tilføjes i unit1, 2, 3
osv.

type
TForm1 = class(TForm)
Button1: TButton;

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.dfm}

-------

unit Utils;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Registry, Dialogs, StdCtrls; <---- Her tilføjes der IKKE noget!!

type

end;

implementation

Uses Unit1, Unit2, Unit3 osv... ; <----- Bemærk at her tilføjes de i
Utils.pas EFTER Implementation!!

.......

Jeg kan/"gider" ikke lave programeksemplet til dig, da jeg mener, at du er g
ået ud på et område nu, hvor du ikke kan "bunde". Mit umiddelbare indtryk
er, at det mere er dk.edb.pragrammering.pascal der laver dit program end det
er dig selv. Synes du skal starte mere stille og roligt ud og få
grundbegreberne på plads.

Du går død, hvis du fortsætter på denne måde, da der er en masse ting, hvor
vi har lavet koden til dig, og når du så skal have det lavet om, jamen så er
det kun os her der kan gøre det for dig.

Prøv dig noget mere frem før end du beder om hjælp. Det giver mest.

Jeg vil gerne hjælpe, men alt med måde.

Garfield_dk





Monie Jacobsen (22-08-2002)
Kommentar
Fra : Monie Jacobsen


Dato : 22-08-02 14:54

Til "// Overby

Erlidt på bar bund her.
En *.dat eller ini-fil. Var noget af det jeg tænker på.
Mvh
Monie


"// Overby" <daniel@FJERNoverbyhansen.dk> skrev i en meddelelse
news:ak23mi$2mb3$1@news.cybercity.dk...
> > Har du en ide til, hvordan man på en god måde, kan gemme
> > de variabler der herunder bliver tildelt en værdi?
>
> I en fil, tabel eller måske .ini-fil
>
> Daniel
>
>



// Overby (22-08-2002)
Kommentar
Fra : // Overby


Dato : 22-08-02 21:18

> Erlidt på bar bund her.
> En *.dat eller ini-fil. Var noget af det jeg tænker på.

Slå op i hjælpen under TINIFile

Daniel



Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408490
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste