Avatar billede jgthb Nybegynder
26. juli 2006 - 16:44 Der er 14 kommentarer og
2 løsninger

startup, forkert datamappe

Hej

Jeg har nu lavet mit program færdigt og har så sat det til at starte, hver gang jeg logger på. Problemet er, at der kommer en meddelelse frem, der lyder, at den ikke kan finde datafilerne. Den angiver så adressen, hvor den ikke kan finde dem "C:\Documents and Settings\Jonathan\data\ordbog1.txt". Mit program ligger bare her nu: "C:\Programmer\Brenes Ordbøger\". Inden i programmet, hvor filerne skal hentes, har jeg skrevet "data\ordbog1" for eksempel. så jeg ville da umiddelbart bare tro, at den tjekkede i den mappe, hvorfra exe-filen køres, om sådan sti findes.

Er der nogen, der kan hjælpe?
Avatar billede martinlind Nybegynder
26. juli 2006 - 17:03 #1
if fileexists(ExtractFilePath(Application.Exename)+'data\ordbog1.txt) then
items.loadfromfile(ExtractFilePath(Application.Exename)+'data\ordbog1.txt);
Avatar billede kroning Nybegynder
26. juli 2006 - 17:34 #2
Kan det ikke være fordi du i den genvej der starter programmet har en forkert "start i" sti? Men ellers kan du i dit program skrive:

Extractfilepath(Paramstr(0))+'\data\ordbog1'

Paramstr(0) er den komplette sti+filnavn til dir program og Extractfilepath hiver så kun stien ud.
Avatar billede kroning Nybegynder
26. juli 2006 - 17:35 #3
Nå glem det, kan jo se at det er hvad martinlind allerede har svaret :)
Avatar billede jgthb Nybegynder
26. juli 2006 - 17:50 #4
hej. jeg er lidt usikker på, hvordan jeg skal indføje, det I foreslår. det er sådan, at jeg ved ikke, hvor mange filer jeg skal åbne, jeg søger faktisk efter filer, der hedder "data\ordbog*.txt". jeg giver jer lige koden:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, ComCtrls, shellapi;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    MainMenu1: TMainMenu;
    N11: TMenuItem;
    FindDialog1: TFindDialog;
    Memo1: TMemo;
    Ord1: TMenuItem;
    Memo2: TMemo;
    Sg1: TMenuItem;
    Luk1: TMenuItem;
    FindDialog2: TFindDialog;
    Opdater1: TMenuItem;
    Memo4: TMemo;
    Om1: TMenuItem;
    Udvikling1: TMenuItem;
    Vejledning1: TMenuItem;
    Memo3: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Redigerord1: TMenuItem;
    ilfjord1: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    ilfjordbog1: TMenuItem;
    Diverse1: TMenuItem;
    Skiftskriftstrrelse1: TMenuItem;
    Lille9101: TMenuItem;
    Mellem10111: TMenuItem;
    Stor11121: TMenuItem;
    Megetstor12131: TMenuItem;
    procedure ListBox1Click(Sender: TObject);
    procedure syn1Click(Sender: TObject);
    procedure Luk1Click(Sender: TObject);
    procedure SgShiftS1Click(Sender: TObject);
    procedure FindDialog2Find(Sender: TObject);
    procedure FindDialog2Close(Sender: TObject);
    procedure Opdater1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ListBox1Enter(Sender: TObject);
    procedure ordbogto1Click(Sender: TObject);
    procedure Vejledning1Click(Sender: TObject);
    procedure Udvikling1Click(Sender: TObject);
    procedure ordvalg(Sender: TObject);
    procedure Sg1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ilfjord1Click(Sender: TObject);
    procedure Redigerord1Click(Sender: TObject);
    procedure ilfjordbog1Click(Sender: TObject);
    procedure Lille9101Click(Sender: TObject);
    procedure Mellem10111Click(Sender: TObject);
    procedure Stor11121Click(Sender: TObject);
    procedure Megetstor12131Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
ordbog: string;
m: integer;

procedure FindAll (const Path: String;Attr:
Integer;List: TStrings);
var
  Res: TSearchRec;
  EOFound: Boolean;
begin
  EOFound:= False;
  if FindFirst(Path, Attr, Res) < 0 then
    exit
  else
    while not EOFound do begin
      List.Add(Res.Name);
      EOFound:= FindNext(Res) <> 0;
    end;
  FindClose(Res);
end;

procedure ordbogvalg;
begin
form1.listbox1.Items.LoadFromFile('data\ordbog'+ordbog+'.txt');
form1.memo1.Lines.loadfromfile('data\forklaringer'+ordbog+'.txt');
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
a: integer;
begin
memo2.Clear;
for a:=0 to listbox1.Count-1 do
if listbox1.itemindex=a then begin
memo2.Lines.add(memo1.Lines[a]);
end;
end;

procedure TForm1.syn1Click(Sender: TObject);
begin
ordbog:='1';
listbox1.Visible:=true;
memo3.Visible:=false;
memo2.Visible:=true;
memo2.Clear;
ordbogvalg;
memo2.Lines.add(memo1.Lines[0]);
end;

procedure TForm1.ordbogto1Click(Sender: TObject);
begin
ordbog:='2';
listbox1.Visible:=true;
memo3.Visible:=false;
memo2.Visible:=true;
memo2.Clear;
ordbogvalg;
memo2.Lines.add(memo1.Lines[0]);
end;

procedure TForm1.Luk1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.SgShiftS1Click(Sender: TObject);
begin
listbox1.Visible:=true;
memo2.Visible:=true;
memo3.Visible:=false;
FindDialog1.Execute;
end;

procedure TForm1.FindDialog2Find(Sender: TObject);
var
i, PosReturn: Integer;
begin
  for i:=m to listbox1.count-1 do
  begin
    PosReturn := Pos(' '+FindDialog2.FindText,listbox1.items[i]);
    if PosReturn <> 0 then
    begin
      listbox1.ItemIndex:=i;
      m:=i+1;
      Break;
    end;
  end;
end;

procedure TForm1.FindDialog2Close(Sender: TObject);
begin
m:=0;
end;

procedure TForm1.Opdater1Click(Sender: TObject);
begin
if ordbog='0' then exit;
ordbogvalg;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
men: TMenuItem;
i: integer;
begin
FindAll('data\ordbog*.txt',faAnyFile,form1.memo4.lines);
listbox1.Items.LoadFromFile('data\ordbog1.txt');
memo1.Lines.loadfromfile('data\forklaringer1.txt');
ordbog:='1';
for i:=1 to memo4.lines.count do
begin
Men:=TMenuItem.Create(MainMenu1);
n11.add(men);
men.Name:='valg'+inttostr(i);
case i of
1: men.Caption:='Synonymordbogen';
else
men.Caption:='Ordbog '+inttostr(i);
end;
men.Tag:=i;
men.OnClick:=ordvalg;
end;
BorderStyle := bstoolwindow;
end;

procedure TForm1.ListBox1Enter(Sender: TObject);
begin
memo2.Lines.add(memo1.Lines[0]);
end;

procedure TForm1.Vejledning1Click(Sender: TObject);
begin
label1.Visible:=false;
label2.Visible:=false;
edit1.Visible:=false;;
edit2.Visible:=false;
button1.Visible:=false;
memo3.Visible:=true;
listbox1.Visible:=false;
memo2.Visible:=false;
memo3.Clear;
memo3.Lines.loadfromfile('data\vejledning.txt');
end;

procedure TForm1.Udvikling1Click(Sender: TObject);
begin
label1.Visible:=false;
label2.Visible:=false;
edit1.Visible:=false;;
edit2.Visible:=false;
button1.Visible:=false;
memo3.Visible:=true;
listbox1.Visible:=false;
memo2.Visible:=false;
memo3.Clear;
memo3.Lines.loadfromfile('data\udvikling.txt');
end;

procedure TForm1.ordvalg(Sender: TObject);
begin
with Sender as TMenuItem do
ordbog:=inttostr(tag);
listbox1.Visible:=true;
memo3.Visible:=false;
memo2.Visible:=true;
edit1.Visible:=false;
edit2.Visible:=false;
button1.Visible:=false;
memo2.Clear;
ordbogvalg;
memo2.Lines.add(memo1.Lines[0]);
end;

procedure TForm1.Sg1Click(Sender: TObject);
begin
label1.Visible:=false;
label2.Visible:=false;
edit1.Visible:=false;
edit2.Visible:=false;
button1.Visible:=false;
listbox1.Visible:=true;
memo3.Visible:=false;
memo2.Visible:=true;
FindDialog2.Execute;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
NewList: tstringlist;
i: integer;
begin
NewLIst:=tstringlist.Create;
if edit1.text='' then exit;
if edit2.text='' then exit;
newlist.LoadFromFile('data\ordbog'+ordbog+'.txt');
newlist.Sort;
if newlist.Find(' '+edit1.Text,i)=true then
begin
showmessage('Ordet er allerede inde i databasen');
edit1.Clear;
edit2.Clear;
edit1.Visible:=false;
edit2.Visible:=false;
button1.Visible:=false;
listbox1.Visible:=true;
memo3.Visible:=false;
memo2.Visible:=true;
exit;
end;
newlist.Add(' '+edit1.text+'.');
newlist.Sort;
newlist.SaveToFile('data\ordbog'+ordbog+'.txt');
newlist.Clear;
newlist.LoadFromFile('data\forklaringer'+ordbog+'.txt');
newlist.Insert(i,edit2.text+'.');
newlist.SaveToFile('data\forklaringer'+ordbog+'.txt');
newlist.Free;
ordbogvalg;
edit1.Clear;
edit2.Clear;
edit1.Visible:=false;;
edit2.Visible:=false;
button1.Visible:=false;
listbox1.Visible:=true;
memo3.Visible:=false;
memo2.Visible:=true;
end;

procedure TForm1.ilfjord1Click(Sender: TObject);
begin
listbox1.Visible:=false;
memo3.Visible:=false;
memo2.Visible:=false;
edit1.Visible:=true;
edit2.Visible:=true;
button1.Visible:=true;
end;

procedure TForm1.Redigerord1Click(Sender: TObject);
begin
ShellExecute(Handle,'open',PChar('data\forklaringer'+ordbog+'.txt'),
pchar(''),pchar(''),SW_SHOWNORMAL);
ShellExecute(Handle,'open',PChar('data\ordbog'+ordbog+'.txt'),
pchar(''),pchar(''),SW_SHOWNORMAL);
end;

procedure TForm1.ilfjordbog1Click(Sender: TObject);
var
men: TMenuItem;
i: integer;
begin
memo4.Lines.Clear;
FindAll('data\ordbog*.txt',faAnyFile,form1.memo4.lines);
i:=memo4.Lines.Count;
memo4.Lines.Clear;
memo4.Lines.SaveToFile('data\ordbog'+inttostr(i+1)+'.txt');
memo4.Lines.SaveToFile('data\forklaringer'+inttostr(i+1)+'.txt');
Showmessage('Ordbog '+inttostr(i+1)+' er blevet tilføjet. Den vil være tilgængelig efter, at programmet har genstartet');
end;

procedure TForm1.Lille9101Click(Sender: TObject);
begin
listbox1.Font.Size:=9;
memo2.Font.Size:=10;
end;

procedure TForm1.Mellem10111Click(Sender: TObject);
begin
listbox1.Font.Size:=10;
memo2.Font.Size:=11;
end;

procedure TForm1.Stor11121Click(Sender: TObject);
begin
listbox1.Font.Size:=11;
memo2.Font.Size:=12;
end;

procedure TForm1.Megetstor12131Click(Sender: TObject);
begin
listbox1.Font.Size:=12;
memo2.Font.Size:=13;
end;

initialization
ordbog:='0';
m:=0;

end.
Avatar billede jgthb Nybegynder
26. juli 2006 - 17:51 #5
okay. hele koden var måske ikke nødvendig at give jer. :( undskyld
Avatar billede kroning Nybegynder
26. juli 2006 - 19:11 #6
FindAll(ExtractFilePath(Application.Exename)+'\data\ordbog*.txt',faAnyFile,form1.memo4.lines);
Avatar billede jgthb Nybegynder
26. juli 2006 - 19:42 #7
nej, det virker ikke. nu gør jeg ikke præcis, som i foreslår, så kan I lige se, om jeg har misforstået princippet?

procedure TForm1.FormCreate(Sender: TObject);
var
men: TMenuItem;
i: integer;
begin
sti:=ExtractFilePath(application.ExeName);
FindAll(sti+'data\ordbog*.txt',faAnyFile,form1.memo4.lines);
memo5.Lines.LoadFromFile(sti+'data\navne.txt');
listbox1.Items.LoadFromFile(sti+'data\ordbog1.txt');
memo1.Lines.loadfromfile(sti+'data\forklaringer1.txt');
ordbog:='1';
for i:=1 to memo4.lines.count do
begin
Men:=TMenuItem.Create(MainMenu1);
n11.add(men);
men.Name:='valg'+inttostr(i);
men.Caption:=memo5.Lines[i-1];
men.Tag:=i;
men.OnClick:=ordvalg;
end;
BorderStyle := bstoolwindow;
end;
Avatar billede kroning Nybegynder
26. juli 2006 - 19:45 #8
Hvordan virker det ikke? Nu sidder jeg ikke lige ved en Delphi putter men jeg mener at det skal være:
sti:=ExtractFilePath(application.ExeName)+'\';

dvs. du mangler en '\'
Avatar billede jgthb Nybegynder
26. juli 2006 - 20:44 #9
tak. nu virker det. du ligger bare et svar, kroning
Avatar billede kroning Nybegynder
26. juli 2006 - 20:50 #10
martinlind har svaret så giv ham points, han svarede først.
Avatar billede jgthb Nybegynder
26. juli 2006 - 21:23 #11
jeg har tænkt mig at give jer begge point. rigtig nok svarede han først, men du har hjulpet lidt mere, så jeg har tænkt mig at give 60 point til dig og 40 til ham.
Avatar billede kroning Nybegynder
26. juli 2006 - 22:06 #12
det med '\' kunne martinlind også have svaret på, jeg kom bare og blandede mig så giv alle points til martin så er jeg tilfreds :)
Avatar billede jgthb Nybegynder
26. juli 2006 - 22:26 #13
nu er det jo ikke en konkurrence på viden. det handler om, hvem som hjælper mest. martin er også hjælpsom, men du har trods alt hjulpet mig mest her.  vi kan godt sige, at I får lige mange point.
hvis du endnu engang insisterer på, at jeg skal give ham alle pointene, skal jeg nok gøre det, men jeg synes nu, det er mest rimeligt, hvis du også får nogle.
Avatar billede kroning Nybegynder
26. juli 2006 - 22:55 #14
Ok, så kommer der et svar her.
Avatar billede kroning Nybegynder
26. juli 2006 - 22:55 #15
næ, men så her da :)
Avatar billede martinlind Nybegynder
27. juli 2006 - 09:50 #16
IncludeTralingPathDelimiter();  Søger for at der er en backslass til sidst hvis den mangler :)
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