Avatar billede mads-j Nybegynder
25. december 2001 - 12:53 Der er 31 kommentarer og
1 løsning

Hjælp?

Jeg er helt ny her på eksperten.dk, og vil gerne lige se om jeg kunne få noget hjælp til delphi her..:-)

Jeg har en opendialog, hvordan kan jeg åbne denne dialog i en bestemt folder, så den åbner det samme sted hver gang?

Jeg skal bruge dette til nogle templates i mit program, og når brugere trykker på template knappen, skal den åbne tep bibloteket, som er en mappe i programmets folder

mvh
mads-j

Hvor mange points skal man uddele på sådan noget her?

starter med 15: let er det ok?
Avatar billede nico26 Nybegynder
25. december 2001 - 12:57 #1
brug initialdir propertien
Avatar billede nico26 Nybegynder
25. december 2001 - 12:59 #2
OpenDialog1.IniitalDir := \'C:\\tep\';
if OpenDialog1.Execute then
  ...
Avatar billede mads-j Nybegynder
25. december 2001 - 13:00 #3
Nico> i object inspektoren right?
Akal jeg så bare skrive f.eks. /template eller hvad skal jeg gøre?
Avatar billede mads-j Nybegynder
25. december 2001 - 13:01 #4
kigger lige om det virker som det skal:-)
Avatar billede nico26 Nybegynder
25. december 2001 - 13:01 #5
Det nemmeste er selfølgelig at sætte den i object inspectoren. Du skriver bare hele stien
Avatar billede mads-j Nybegynder
25. december 2001 - 13:04 #6
oki:-) så er det hele lidt nemmere:-)

c:\\tep skal der være close dir på altså en \\
Avatar billede nico26 Nybegynder
25. december 2001 - 13:05 #7
nope - ikke nødvendigvis
Avatar billede mads-j Nybegynder
25. december 2001 - 13:07 #8
Får jeg så ikke et problem med udlandske personer der bruger mit program..

jeg har sat den til

c:\\programmer\\Tep\\

windows engelsk bruger jo programs, eller oversætter den mon selv det?
Avatar billede nico26 Nybegynder
25. december 2001 - 13:09 #9
nej-den oversætter ikke selv, men jeg mener at du kan finde stien på \"programmer\" mappen i registreringsdatabasen.
Avatar billede nico26 Nybegynder
25. december 2001 - 13:14 #10
Her kan du finde stien til mappen:

LocalMachine\\Software\\Microsoft\\Windows\\CurrentVersion - \"ProgramFilesPath\"
Avatar billede nico26 Nybegynder
25. december 2001 - 13:15 #11
Delphi har en klasse der hedder TRegistry (i registry uniten) der gør det nemt at læse/skrive reg db
Avatar billede mads-j Nybegynder
25. december 2001 - 13:23 #12
nico> nu er jeg ikke kommet så langt i delphi,at jeg er kommet til regdatabasen..

Skal jeg skrive LocalMachine\\Software\\Microsoft\\Windows\\CurrentVersion - \"ProgramFilesPath\"
eller er der noget jeg har misforstået?
Avatar billede nico26 Nybegynder
25. december 2001 - 13:27 #13
nej - Det jeg skrev er stien i db\'en. Du er nødt til at læse fra registreringsdatabasen for at hente navnet på stien.

Jeg laver lige en stump kode..
Avatar billede mads-j Nybegynder
25. december 2001 - 13:31 #14
mange mange tak, skal jeg sætte points op?
Avatar billede nico26 Nybegynder
25. december 2001 - 13:31 #15
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  Registry;

{$R *.DFM}

function ProgDir: string;
begin
  with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey(\'Software\\Microsoft\\Windows\\CurrentVersion\', False) then
        Result := ReadString(\'ProgramFilesPath\')
      else
        Result := \'\';
    finally
      Free;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(ProgDir);
end;

end.
Avatar billede nico26 Nybegynder
25. december 2001 - 13:35 #16
funktionen \"ProgDir\" finder navnet på \"Programmer\" mappen, og forudsat at du har en mappe der hedder \"tep\" kan du skrive følgende:

var
  Path: string;
begin
  Path := ProgDir + \'\\tep\';

  OpenDialog1.InitialDir := Path;
  if OpenDialog1.Execute then
    ...

end;

Du behøver ikke sætte pointene op, jeg er ligeglad med dem (de kan jo ikke bruges til noget).
Avatar billede nico26 Nybegynder
25. december 2001 - 13:37 #17
Du bør måske overveje at tjekke om mappen eksisterer, evt. når programmet starter op. Hvis så ikke den findes, kan du lave den.
Avatar billede mads-j Nybegynder
25. december 2001 - 13:38 #18
det vil sige, at jeg kan nøjes med dette stykke kode?var
  Path: string;
begin
  Path := ProgDir + \'\\tep\';

  OpenDialog1.InitialDir := Path;
  if OpenDialog1.Execute then
    ...

end;


Avatar billede nico26 Nybegynder
25. december 2001 - 13:39 #19
yep - men den funktion jeg skrev (\"ProgDir\") skal naturligvis også være der.
Avatar billede mads-j Nybegynder
25. december 2001 - 13:39 #20
den mappe skal være der, da den bliver installeret sammen med resten af programmer, som en del af en stort lib:-)
Avatar billede mads-j Nybegynder
25. december 2001 - 13:40 #21
function ProgDir: string;
begin
  with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey(\'Software\\Microsoft\\Windows\\CurrentVersion\', False) then
        Result := ReadString(\'ProgramFilesPath\')
      else
        Result := \'\';
    finally
      Free;
    end;
end;

ja den?

Avatar billede nico26 Nybegynder
25. december 2001 - 13:41 #22
ja den - og husk \"Registry\" i under uses
Avatar billede mads-j Nybegynder
25. december 2001 - 13:42 #23
jepz har jeg lige sat ind:-)
Avatar billede nico26 Nybegynder
25. december 2001 - 13:42 #24
kører det???
Avatar billede mads-j Nybegynder
25. december 2001 - 13:43 #25
nico> nu er jeg lidt i tvivl(igen,igen)

Jeg har min knap der hedder templates
skal jeg smidde hele koden ind under den knap, altså:function ProgDir: string;
begin
  with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey(\'Software\\Microsoft\\Windows\\CurrentVersion\', False) then
        Result := ReadString(\'ProgramFilesPath\')
      else
        Result := \'\';
    finally
      Free;
    end;
end;

Path: string;
begin
  Path := ProgDir + \'\\tep\';

  OpenDialog1.InitialDir := Path;
  if OpenDialog1.Execute then
    ...

end;


eller hvad? jeg er forholdvis nybegynder kan du nok se:-)

Avatar billede nico26 Nybegynder
25. december 2001 - 13:47 #26
Bare smid den udenfor men du kan også lave en lokal function.

Global funktion:

function ProgDir: string;
begin
...
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Path: string;
begin
  Path := ProgDir + \'\\tep\';

  OpenDialog1.InitialDir := Path;
  if OpenDialog1.Execute then
    ...
end;

Lokal funktion:

procedure TForm1.Button1Click(Sender: TObject);

  function ProgDir: string;
  begin
  ...
  end;

var
  Path: string;
begin
  Path := ProgDir + \'\\tep\';

  OpenDialog1.InitialDir := Path;
  if OpenDialog1.Execute then
    ...
end;
Avatar billede nico26 Nybegynder
25. december 2001 - 13:48 #27
Hvad du vælger afhænger lidt af hvor genanvendelig funktionen er.
Avatar billede mads-j Nybegynder
25. december 2001 - 19:07 #28
den laver en fejl i din første kode:-(

unknown directive path

hvad kan det være jeg har glemt, mangler?
Avatar billede nico26 Nybegynder
26. december 2001 - 01:55 #29
Så mangler du at skrive \"var\" der hvor du erklærer Path.

var
  Path: string;
begin
...
Avatar billede nico26 Nybegynder
26. december 2001 - 02:02 #30
Prøv at lav en ny application, og læg en knap og en opendialog på formen. Copy/paste dernæst nedenstående

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  Registry;

{$R *.DFM}

function ProgDir: string;
begin
  with TRegistry.Create do
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKey(\'Software\\Microsoft\\Windows\\CurrentVersion\', False) then
        Result := ReadString(\'ProgramFilesPath\')
      else
        Result := \'\';
    finally
      Free;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Path: string;
begin
  Path := ProgDir + \'\\tep\';
  OpenDialog1.InitialDir := Path;
  if OpenDialog1.Execute then
    ShowMessage(OpenDialog1.FileName);
end;

end.
Avatar billede mads-j Nybegynder
28. december 2001 - 00:24 #31
nico får points for alt hans hjælp..
mange tak du:-)

mads/
Avatar billede nico26 Nybegynder
28. december 2001 - 15:36 #32
tak - men fik du det til at virke
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