Toon posts:

[Delphi] Save alles naar file...

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil de complete "state" van een programma in een file saven met een save as functie.
Dus alle captions, variables, checkboxes, etc. in 1 file om deze in een later stadium
weer in mijn programma te laden.
Is dit mogelijk in 1 keer, of moet ik gebruik maken van een TFileString ?

[ Voor 37% gewijzigd door Verwijderd op 17-09-2003 15:45 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Je geeft hier wel lekker veel info.

Lees eens de P&W Quickstart (deze vind je hier, onder puntje 3 oid).
Pas daarna je topic aan met de nodige info.

https://fgheysels.github.io/


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

Toevalligerwijs heb ik laatstens zoiets gemaakt. Je kunt echter ook gebruik maken van TComponent.SaveToStream en zijn tegenhanger TComponent.LoadFromStream als je alles wilt opslaan.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
function TSettings.UpDownHasAssociate(Form: TCustomForm; Edit: TCustomEdit): boolean;
var
    i: integer;
    UpDown: TUpDown;
begin
    i := 0;
    Result := false;
    while (i < Form.ComponentCount) and not Result do
    begin
        if Form.Components[i] is TUpDown then
        begin
            UpDown := TUpDown(Form.Components[i]);
            if UpDown.Associate = Edit then
                Result := true;
        end;
        Inc(i);
    end;
end;

procedure TSettings.LoadForm(Form: TForm);
var
    i: integer;
    Edit: TEdit;
    ComboBox: TComboBox;
    UpDown: TUpDown;
begin
    for i:=0 to Form.ComponentCount-1 do
    begin
        if Form.Components[i] is TComboBox then
        begin
            ComboBox := TComboBox(Form.Components[i]);
            // todo: rangecheck + bug (krijgt altijd -1??)
            ComboBox.ItemIndex := FIniFile.ReadInteger('Settings', Form.Name + '_' + ComboBox.Name, ComboBox.ItemIndex);
        end
        else if Form.Components[i] is TEdit then
        begin
            Edit := TEdit(Form.Components[i]);
            // don't save the state of the edit box if there is an associated TUpDown
            if not UpDownHasAssociate(Form, Edit) then
                Edit.Text := FIniFile.ReadString('Settings', Form.Name + '_' + Edit.Name, Edit.Text);
        end
        else if Form.Components[i] is TUpDown then
        begin
            UpDown := TUpDown(Form.Components[i]);
            UpDown.Position := FIniFile.ReadInteger('Settings', Form.Name + '_' + UpDown.Name, UpDown.Position);
        end;
    end;
end;

function TSettings.SaveForm(Form: TForm): boolean;
var
    i: integer;
    Edit: TEdit;
    ComboBox: TComboBox;
    UpDown: TUpDown;
begin
    for i:=0 to Form.ComponentCount-1 do
    begin
        if Form.Components[i] is TComboBox then
        begin
            ComboBox := TComboBox(Form.Components[i]);
            FIniFile.WriteInteger('Settings', Form.Name + '_' + ComboBox.Name, ComboBox.ItemIndex);
        end
        else if Form.Components[i] is TEdit then
        begin
            Edit := TEdit(Form.Components[i]);
            // don't save the state of the edit box if there is an associated TUpDown
            if not UpDownHasAssociate(Form, Edit) then
                FIniFile.WriteString('Settings', Form.Name + '_' + Edit.Name, Edit.Text);
        end
        else if Form.Components[i] is TUpDown then
        begin
            UpDown := TUpDown(Form.Components[i]);
            FIniFile.WriteInteger('Settings', Form.Name + '_' + UpDown.Name, UpDown.Position);
        end;
    end;
    Result := true;
end;

[ Voor 6% gewijzigd door klinz op 17-09-2003 17:03 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

TFileString heb ik nog nooit van gehoord... TFileStream zul je wel bedoel. Ja, die moet je altijd gebruiken als je naar een file wil schrijven (of je moet een proprietary of obsolete manier gebruiken).

Anyways, gebruik de ZoeckTM en aanschouw de keur aan uitleg over RTTI, wat jij dus nodig hebt ;)

[ Voor 3% gewijzigd door _Thanatos_ op 17-09-2003 19:46 ]

日本!🎌


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

klinz schreef op 17 September 2003 @ 16:40:
Toevalligerwijs heb ik laatstens zoiets gemaakt. Je kunt echter ook gebruik maken van TComponent.SaveToStream en zijn tegenhanger TComponent.LoadFromStream als je alles wilt opslaan.
code:
1
.. hoop code zonde uitleg hier
Mag ik zeggen dat ik het jammer vindt dat je want code neerplempt zonder enige uitleg?
Uitleg bijvoorbeeld waarom je een inifile gebruikt, waarom je alleen form.components gebruikt, waarom je niks met het form zelf doet, en waarom je in je procedure alleen maar 3 soorten objecten kan saven? ;)

Als in: hier leert niemand wat van, dit wordt gewoon dom gecopy'pasted.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 20-08 22:09

Delphi32

Heading for the gates of Eden

RXLib heeft hier standaard functies voor. Ik moet bekennen dat ik nog met Delphi 5 opgescheept zit en dus niet weet of RX ook voor de recentere Delphi's beschikbaar is. Ik kan het setje van harte aanbevelen. TFormStorage heet dat ding en hij savet alles automatisch als je dat wilt :)

Verwijderd

TFileStream zul je denk ik bedoelen.

Als je kijkt bij ReadComponent/WriteComponent en onderzoekt hoe de VCL omgaat met component i.c.m. streams dan zul je heel snel ontdekken hoe je dit probleem kunt oplossen.
Pagina: 1