Avatar billede fun22 Nybegynder
14. august 2002 - 15:22 Der 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???

Mvh
fun22
Avatar billede martinlind Nybegynder
14. august 2002 - 15:26 #1
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 )

/Martin
Avatar billede assassin Juniormester
14. august 2002 - 15:28 #2
Det er vel bare et spørgsmål om hvornår du læser inifilen.

Hvis du læser inifilen ved ændring af checkboxen, så burde det lykkeds.

For mig lyder det som om at du læser inifilen ved opstart af programmet.

Dennis
Avatar billede assassin Juniormester
14. august 2002 - 15:29 #3
Jeg fik ikke opdateret siden :-)
Avatar billede martinlind Nybegynder
14. august 2002 - 15:31 #4
Kender det godt :(
Avatar billede fun22 Nybegynder
14. august 2002 - 15:47 #5
assassin--> Hvordan gør man det du siger med at læse ini filen ved ændring af checkboxen??
Avatar billede martinlind Nybegynder
14. august 2002 - 15:50 #6
På samme måde som du læser inifilen når du starter op, du kan bruge OnClick / OnChange event på CheckBox'en til at kalde din indlæsning
Avatar billede fun22 Nybegynder
14. august 2002 - 15:52 #7
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.
Avatar billede martinlind Nybegynder
14. august 2002 - 15:56 #8
Ok, det er IKKE dig der styrer tingende ?
Avatar billede fun22 Nybegynder
14. august 2002 - 16:00 #9
jo det er en dll fil som jeg har lavet.
Avatar billede martinlind Nybegynder
14. august 2002 - 16:02 #10
jamen så skal du jo bare Exportere din IndlæsINI procedure og kalde den, når du har ændret.
Avatar billede fun22 Nybegynder
14. august 2002 - 16:04 #11
Hvordan gør man det?
Avatar billede martinlind Nybegynder
14. august 2002 - 16:08 #12
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
Avatar billede fun22 Nybegynder
14. august 2002 - 16:15 #13
Hvordan Exportere man normalt? for så kan jeg jo prøve det
Avatar billede martinlind Nybegynder
14. august 2002 - 16:38 #14
library MyDLL;

uses Windows;

{$R *.RES}

exports 
  LoadINI;

begin
end.
Avatar billede fun22 Nybegynder
14. august 2002 - 17:07 #15
Gider du ikke lige at forklare det lidt bedere?
Avatar billede dkn Nybegynder
14. august 2002 - 22:31 #16
hvis du har lavet dll'en må du da også vide hvordan man kalder/modtager kald fra den ??

I din dll har du noget som exports, der skriver du de functioner som du ønsker der skal være adgang til udefra.

fx.

library MyDLL;

uses Windows;

{$R *.RES}

Procedure SaveINI;
begin
//Write ini code
end;

exports
  SaveINI;
begin
end.

i dit program kalder du så bare den function som du normalt ville gøre.
Sig til hvis du ikke forstår.
Avatar billede dkn Nybegynder
14. august 2002 - 22:34 #17
her kan du se hvordan det skal gøres:
http://delphi.about.com/library/weekly/aa041100a.htm
Avatar billede fun22 Nybegynder
15. august 2002 - 15:42 #18
dkn->>

Når jeg skal kalde den så bruger jeg denne kode:

procedure ShowForm;stdcall;external 'Project1dll.dll' name 'ShowDllForm';

og så en knap med denne kode:

ShowForm;

Og i min dll
(Hele filen (.pas))

unit DllForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Registry, StdCtrls, TFlatCheckBoxUnit, TFlatGroupBoxUnit, inifiles,
  TFlatTabControlUnit;

type
  TfrmDllForm = class(TForm)
    Ok: TButton;
    Button1: TButton;
    FlatTabControl1: TFlatTabControl;
    FlatGroupBox1: TFlatGroupBox;
    tlenial: TFlatCheckBox;
    vlenial: TFlatCheckBox;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure OkClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);


  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;

Exports
    ShowDllForm,
    ShowDllFormModal ;

begin
end.

Håber det kan hjælpe lidt.
Avatar billede fun22 Nybegynder
29. august 2002 - 07:44 #19
lukker
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester