16. januar 2005 - 21:27Der er
28 kommentarer og 1 løsning
Hvordan gemmes en CheckBox's indstilling?
Goddag,
i et hvilket som helst progam er det som regel muligt at välge forskellige funktioner ved at "vinge af" i en CheckBox eller ved at välge en RadioButton. Hvordan gemmes den seneste indstilling af f.eks. en CheckBox (vinget af eller ej?), när programmet lukkes ned, sä programmet starter op med samme indstilling?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
du kan gemme den i en ini file husk inifiles i uses procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var i : Integer; begin ini := TIniFile.Create('c:\temp\MyIniFile.ini');
for i := 0 to ComponentCount-1 do if (Components[i] is TCheckbox) then ini.WriteBool('Indstillinger',components[i].Name,(Components[i] as TCheckbox).Checked); ini.Free; end;
procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin ini := TIniFile.Create('c:\temp\MyIniFile.ini');
for i := 0 to ComponentCount-1 do if (Components[i] is TCheckbox) then (Components[i] as TCheckbox).Checked := ini.ReadBool('Indstillinger',components[i].Name,false); ini.Free; end;
iøvrigt en radiogroup kan der kun vælges en knap af gangen, kan bruges til hvis der skal vælges en radiobuttons af gangen, f.eks i en dag specification:
man kan også kun vælge 1 indstilling med radiobutton, det giver mere fleksibilitet mht. GUI, men giver også noget mere kode, så ville personligt vælge radiogroup og så bare gemme itemindex, muligvis som string
Jeg har nu fäet det til at virke med et testprogram (en form med en CheckBox). När jeg fletter det ind i mit forhenvärende program, sker der intet. Ingen compiler fejl eller andet. Der oprettes ganske enkelt ingen INI fil. Jeg bövler videre i aften.
og så risikerer man ikke umiddelbart at et andet program overskriver den.... bruger det altid selv, så er det også nemmere at tage backup af dem hvis man skal formatere
Sä fik jeg det til at virke med CheckBox og Radiobutton. Af en eller anden grund skulle formen OnClose event aktiveres igen, selvom den er brugt i mit program i forvejen. Hvordan virker det sä med en TEdit's indstilling? Jeg har prövet fölgende:
I OnClose ini.WriteString('Indstillinger',components[i].Name,(Components[i] as TEdit).Text);
I FormCreate if (Components[i] is TEdit) then (Components[i] as TEdit).Text := ini.ReadString('Indstillinger',components[i].Name,false);
Det virker ikke (kan ikke compiles), men kan I hjälpe mig pä rette vej?
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private { Private declarations } public { Public declarations }
sti: string; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); var ini: tinifile; i: integer; begin sti := ExtractFilepath(Application.Exename) + 'MyIniFile.ini'; if not fileexists(sti) then exit; ini := tinifile.Create(sti); for i := 0 to form1.ComponentCount -1 do if (Components[i].Classname = 'TEdit') then (Components[i] as TEdit).Text := ini.ReadString('Indstillinger',components[i].Name,''); end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var ini: tinifile; i: integer; begin ini := tinifile.Create(sti); canclose := false; for i := 0 to form1.ComponentCount -1 do if (Components[i].ClassName = 'TEdit') then ini.writeString('Indstillinger',components[i].Name,(Components[i] as TEdit).Text); canclose := true; end;
hvis du placerer den under var gælder den kun i den procedure hvor den er deklareret, så derfor hvis der er mere end 1 procedure/function som skal bruge en variabel skal den stå under private eller public
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.