14. august 2002 - 15:22Der er
18 kommentarer og 1 løsning
opdater
Jeg har et program hvor jeg bruger lenialer, og så har jeg en dll med indstillinger i og en ini fil som indeholder info omkring programmet. I Indstillings formen (dll filen) har jeg en checkbox og når den er markeret så ligger den en nøjle i ini filen. Det virker også godt nok. Men problemmet er at som det er nu skal man genstarte programmet for at få indstillingerne til at virke. Kan man ikke gøre sådan at det virker med det sammer???
Det er sku da noget du selv styrer, du skal da bare lave en nyindlæsning af dine indstillinger efter du har ændret dem ( kan du ikke det skal du nok overveje at re-designe din kode )
problemmet er at CheckBox'en er i en dll fil så det vil jo sådanset sige at det er et andet program der skriver i ini filen end det er der læser ini filen.
Ved det ikke, har ikke prøvet, jeg har aldrig brugt dll'er fra delphi, kig i online hjælpen, jeg tror ikke det er svært, hvordan kalder du din form, det er vel noget ala det samme
private { Private declarations } public { Public declarations } end;
var frmDllForm: TfrmDllForm;
implementation
{$R *.DFM} procedure iniadd(filename: string; Section: string; Name: string; value: string); var ini: Tinifile; begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'info.ini'); ini.WriteString(section,name,value); ini.free; end;
function iniread(filename: string; Section: string; Name: string; defaultvalue: string):string; var ini: Tinifile; begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'info.ini'); result:=ini.readString(section,name,defaultvalue); ini.free; end;
procedure TfrmDllForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
procedure TfrmDllForm.OkClick(Sender: TObject); begin If tlenial.Checked=true then begin iniadd('info.ini','tlenial','Status','true'); end else begin iniadd('info.ini','tlenial','Status','false'); end; If vlenial.Checked=true then begin iniadd('info.ini','vlenial','Status','true'); end else begin iniadd('info.ini','vlenial','Status','false'); end; Close;
end;
procedure TfrmDllForm.FormCreate(Sender: TObject); begin If iniread('info.ini','tlenial','Status','true')='true' then begin tlenial.Checked:=true; end else begin tlenial.Checked:=false; end; If iniread('info.ini','vlenial','Status','true')='true' then begin vlenial.Checked:=true; end else begin vlenial.Checked:=false; end;
end;
end.
Og så har jeg et projeckt som compiler dll filen. Den ser sådan her ud:
library Project1dll;
uses SysUtils, Classes, DllForm in 'DllForm.pas' {frmDllForm};
procedure ShowDllForm;stdcall; begin frmDllForm :=TfrmDllForm.Create(nil); frmDllForm.Show; end;
function ShowDllFormModal:integer;stdcall; begin frmDllForm :=TfrmDllForm.Create(nil); Result := frmDllForm.ShowModal; end;
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.