Avatar billede jesperbirk Nybegynder
17. august 2001 - 12:56 Der er 8 kommentarer og
1 løsning

windir?

Hej..

Er der en måde man kan detecte windows install directory, som eks. DOS kommandoen %windir%

Kan nogen give mig et sourcecode eksempel på
label1.text = (windir, hvad sourcen end må være)?

Avatar billede martinlind Nybegynder
17. august 2001 - 12:58 #1
GetEnvvariable mener jeg, kig i api hjælpen der står det
Avatar billede delphi Nybegynder
17. august 2001 - 12:59 #2
Gå ind i Help -> Windows SDK

Søg efter GetWindow...  find her følgende:

LPSTR GetWindowsDir(LPSTR szBuf, INT cbBuf);

GetWindowsDir determines the name and path of the Windows directory.

Arguments

szBuff

Specifies the buffer you are providing for the storage of the typeface name.

cbBuff

Peter

Specifies the size of the buffer you are providing.

Return Value

The return value is the path name terminated with a backslash; for example, \"C:\\WINDOWS\\\".
Avatar billede delphi Nybegynder
17. august 2001 - 13:01 #3
Lille Demo:

procedure TfmMain.Button1Click(Sender: TObject);
Var
  WinDir : Array[0..200] Of Char;
begin
  GetWindowsDirectory(@WinDir, 200);

  ShowMessage(\'Windows dir = \'+String(WinDir));
end;

Peter
Avatar billede borrisholt Novice
17. august 2001 - 13:02 #4
Function  GetWindowsDirectory : String;
begin
SetLength(Result, MAX_PATH);
Windows.GetWindowsDirectory(PChar(Result), MAX_PATH);
SetLength(Result, Pred(Pos(#0,Result)));
end;


JEns B
Avatar billede jesperbirk Nybegynder
17. august 2001 - 13:06 #5
Jeg skal have en label1.text til at vise windir..

Avatar billede borrisholt Novice
17. august 2001 - 13:08 #6
label1.text := GetWindowsDirectory;

Jens B
Avatar billede delphi Nybegynder
17. august 2001 - 13:09 #7
HA! Jens:  For langsom! (for en gangs skyld)

JesperBirk> Se mit eksempel. 

Istedet for:

ShowMessage(\'Windows dir = \'+String(WinDir));

skriver du

Label1.Caption := String(WinDir);

Peter
Avatar billede delphi Nybegynder
17. august 2001 - 13:30 #8
borrisholt>

Med dit eksempel, hvor du skriver:

label1.text := GetWindowsDirectory;

(Jeg antager her at Label1 er på Form1 og at TForm1 er i Unit1)

Så risikerer du at compileren i visse tilfælde bliver forvirret og opfatter sagen som

label1.text := Windows.GetWindowsDirectory;

Kun hvis din \"GetWindowsDirectory\" er oprettet som (evt. private) metode under TForm1 eller som (global) rutine i Unit1, så kan man, med fuld sikkerhed, skrive som du gør.    Indrømmet, det kræver en lidt usædvanlig rækkefølge af unit navnene i uses sætningen, dvs. \"Windows\" efter navnet på den unit der indeholder GetWindowsDirectory, men det er set før.  I dette tilfælde ville man i givetfald få en compiler fejl, idet der er forskel på parametre mv.  Men hvis man nu i en (sub)unit oprettede en function eller procedure med samme navn og parametre typer som en standard, windows function eller procedure, så vil man løbe ind i en runtime error, der kan være hamrende svær at finde.

Indrømmet: Det er pedantisk! og giver sikkert aldrig problemer i praxis.

Peter
Avatar billede borrisholt Novice
17. august 2001 - 13:33 #9
delphi >> Burde du ikke sætte dig ned og læse lidt compiler teori ? Hvis en compiler finder flere funktioner med samme navn vil den altid tage den der er nærmest ! Altså mig ..

Udover det synes jeg at det er bedere at pakke den slags API kald ind i en funktion .. Det andet mindere mere om C++.

PS: Har du ikke en mail di skal have besvaret ?


Jens B
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