Avatar billede delphiuser Mester
05. april 2007 - 00:06 Der er 5 kommentarer og
2 løsninger

ini filer

Hej eksoerter....

Jeg ligger og roder lidt med nogle inifiler. men kan ikke få det ril at virke som jeg gerne vil...

jeg er igang med et større program hvor jeg gerne vil kunne vælge mellem nogle bagrunde, det virker fint. Men problemet er jeg vil gerne kunne beholde den samme baggrúnd selvom jeg lukker programmet ned. og når jeg skifter bagrund skal den så blive gemt så den automatisk er der når jeg starter op igen...

her er lidt kode at lege med...

procedure TForm2.FormCreate(Sender: TObject);
var
MyIni : TINIFile;
mystring,PathToFile : String;
begin
  PathToFile := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)));
MyINI := TINIFile.Create(PathToFile+'fa.ini');
MyString := MyINI.ReadString('baggrund', 'bagrundsbilled', 'Ikke fundet');
end;

her kommer den kode jeg bruger når jeg henter en ny bagrund til programmet...

rocedure TForm2.Instillinger1Click(Sender: TObject);
var
MyINI: TINIFile; // TINIFile objektet
PathToINIFile: String;
begin
PathToINIFile := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)))+'fa.ini';
  {Skab objektet}

  if OpenDialog1.Execute then
  try
    Image1.Picture.LoadFromFile(OpenDialog1.Filename);
  except
    on EInvalidGraphic do
      Image1.Picture.Graphic := nil;
  end;
MyINI := TINIFile.Create(PathToINIFile);
MyINI.WriteString('Baggrund', 'Bagrundsbilled',image1);
end;

som i kan se har jeg prøvet mig frem men kan bare ikke få det til at virke. og det er rigtig træls...

håber i kan hjælpe mig. På forhånd tak....
Avatar billede kammeyer Nybegynder
05. april 2007 - 11:06 #1
I din formcreate - du mangler at tildele Image1 det billede du henter fra INI filen.

Image1.Picture.LoadFromFile(MyString);

Husk også at rydde op efter dig i "Indstillinger1Click" i slutningen:

MyINI.Free;
Avatar billede delphiuser Mester
05. april 2007 - 18:22 #2
men kan du give mig et eksempel på hvordan det skal gøres. jeg kan ikke lige finde vejen til at få det til et virke
Avatar billede kammeyer Nybegynder
05. april 2007 - 22:55 #3
Her er et eksempel - det virker hos mig.
 
Jeg har ændret i INI filen - med henblik på slåfejlene.



procedure TForm1.Button1Click(Sender: TObject);
var
  MyINI: TINIFile; // TINIFile objektet
  PathToINIFile: String;
begin
  PathToINIFile := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)))+'fa.ini';
  {Skab objektet}

  if OpenDialog1.Execute then
  try
    Image1.Picture.LoadFromFile(OpenDialog1.Filename);
    MyINI := TINIFile.Create(PathToINIFile);
    MyINI.WriteString('Baggrund', 'Baggrundsbillede',OpenDialog1.FileName);
    MyINI.Free;
  except
    on EInvalidGraphic do
      Image1.Picture.Graphic := nil;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  MyIni : TINIFile;
  mystring,PathToFile : String;
begin
  PathToFile := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)));
  MyINI := TINIFile.Create(PathToFile+'fa.ini');
  MyString := MyINI.ReadString('baggrund', 'baggrundsbillede', PathToFile + 'default.jpg');
  Image1.Picture.LoadFromFile(MyString);
end;
Avatar billede kammeyer Nybegynder
05. april 2007 - 22:58 #4
Glemte lige ... jeg har også ændret den streng der gemmes i INI filen i min Button1Click - det er nu OpenDialog1.FileName - og den ændres kun hvis du klikker OK i OpenDialog - altså den er med i Try blokken.

Jeg har også lagt et 'default.jpg' ind i min mappe med programmet - således at der altid er et "standard" billede hvis der ikke er dannet nogen INI fil. Det er i stedet for 'Ikke fundet' strengen.
Avatar billede hrc Mester
05. april 2007 - 22:59 #5
Har lige lavet et lille program der gør det du gerne vil have det til - på aller simpleste måde - og med fornuftige (hvis man ellers kan lide ... var det Ungarsk navngivningsnotation?) navne - og med konstanter. Åhh. ja. Du skal huske at frigive dine objekter igen (Kan ikke lade være med at moralisere).

unit FMain;

interface

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

type
  TfrmMain = class(TForm)
    opdBackground: TOpenPictureDialog;
    iBackground: TImage;
    pMain: TPanel;
    btnSetImage: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnSetImageClick(Sender: TObject);
  private
    fPath : string;
    fBackground : string;
    procedure SetBackground;
  public
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

uses
  IniFiles;

const
  IniFile = 'fa.ini';
  IniSection = 'Baggrund';
  IniValue = 'Billede';

procedure TfrmMain.btnSetImageClick(Sender: TObject);
begin
  SetBackground;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  fPath := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));

  with TINIFile.Create(fPath+IniFile) do
    try
      fBackground := ReadString(IniSection,IniValue,'');
    finally
      Free;
    end;

  if fBackground = '' then
    iBackground.Picture.Graphic := nil
  else
    iBackground.Picture.LoadFromFile(fBackground);
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  with TINIFile.Create(fPath+IniFile) do
    try
      WriteString(IniSection,IniValue,fBackground);
    finally
      Free;
    end;
end;

procedure TfrmMain.SetBackground;
begin
  opdBackground.Filename := fBackground;
  if opdBackground.Execute then
  begin
    fBackground := opdBackground.Filename;
    iBackground.Picture.LoadFromFile(fBackground);
  end;
end;

end.
Avatar billede delphiuser Mester
06. april 2007 - 10:42 #6
Jeg får denne fejl... som en warning når jeg jeg trykker på built project i project menuen

[Pascal Warning] Unit2.pas(131): W1002 Symbol 'IncludeTrailingBackslash' is specific to a platform
Avatar billede hrc Mester
06. april 2007 - 16:53 #7
Egentlig kan du bare ignorere den. I mit eksempel bruger jeg IncludeTrailingPathDelimiter der er platformuafhængig
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