[ Passwd @ 19.09.2005. 13:04 ] @
najbolje prec na primjer odmah, znaci napravim neki program..i sad netko skine taj program i spremi ga na c:\ netko na c:\programi\ netko na d:\ ... i kako sad da program zna gdje se nalazi (putanju), da ne pretrazujem cijeli hard


poz
[ ivanho @ 19.09.2005. 13:26 ] @

ExtractFilePath(Application.ExeName)
[ Srki_82 @ 19.09.2005. 13:27 ] @
Ako koristis program koji koristi Forms unit onda mozes ovako
Code:
Application.ExeName

ako pravis neki programcic koji ne koristi Forms (neki konzolni) onda koristi ovo
Code:
ParamStr(0)

Ovaj drugi primer radi u svim aplikacijama (cak i u TP).
[ Passwd @ 19.09.2005. 13:42 ] @
Problem rijesen, sa formama je

hvala

poz..
[ Passwd @ 19.09.2005. 15:38 ] @
Evo da ne otvaram novu temu....

Ne znam vise zasto me zeza..

Program bi trebao ovo raditi:
netko skine program i spremi ga recimo na c:\ disk..pokrene program i sada program treba sebe skopirati u c:\windows\prog.exe [to je u redu], zatim se pokrene taj program iz c:\windows\prog.exe te pobrise program koji je njega pokrenuo...nadam se da razumijete o cem pricam


znaci:
pokrenut c:\moj_program.exe
putanja "c:\moj_program.exe" je spremljena u c:\windows\ pod imenom prog_put.txt
program_moj.exe je skopiran u c:\windows\ pod imenom prog.exe
program c:\moj_program.exe pokrece c:\windows\prog.exe
c:\windows\prog.exe je pokrenut i uzima string iz c:\windows\prog_put.txt te brise taj program

problem je u tome sto se nakon kopiranja u c:\windows\.. znaci ako pokrenem taj program on opet sebe pokusava napraviti (iako po kodu nebi trebao), i ne obrise program ciju je putanju ucitao iz fajla..


evo koda:

Code:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    putanja:string;
    x:integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var S, T: TFileStream;
begin

edit1.Text:=application.ExeName;

if application.ExeName<>'C:\WINDOWS\prog.exe' then
begin
S := TFileStream.Create( application.ExeName, fmOpenRead );
try
T := TFileStream.Create( 'c:\WINDOWS\prog.exe',
fmOpenWrite or fmCreate );
try
T.CopyFrom(S, S.Size );
finally
T.Free;
end;
finally
S.Free;
end;
memo1.Lines.Clear;
memo1.Lines.Add(application.ExeName);
memo1.Lines.SaveToFile('c:\windows\prog_put.txt');
winexec('c:\windows\prog.exe',sw_show);
end;



if application.ExeName='C:\WINDOWS\prog.exe' then
begin
try
memo1.Lines.Clear;
memo1.Lines.LoadFromFile('c:\windows\prog_put.txt');
deletefile(memo1.Text);
except
showmessage('Fajl je vec obrisan!');
end;

end;



end;



end.
[ Passwd @ 19.09.2005. 18:52 ] @
Problem rijesen!
[ Voodoo @ 19.09.2005. 20:48 ] @
Pretpostavka da se Windows nalazi u C:\Windows nije baš dobra programerska praksa...
Windowsov direktorijum možeš dobiti na sledeći način:

Code:
function DajMiWinDir: string;
var
  pwinpath: array[0..255] of char;
  winpath: string;
begin
  GetWindowsDirectory(pwinpath, sizeof(pwinpath));
  winpath := StrPas(pwinpath);
  if winpath[Length(winpath)] <> '\' then winpath := winpath + '\';
  result := winpath;
end;
[ Srki_82 @ 19.09.2005. 20:57 ] @
Pazi ovaj nacin
Code:
function WinFolder: String;
begin
  SetLength(Result, MAX_PATH);
  SetLength(Result, GetWindowsDirectory(PChar(Result), MAX_PATH));
  Result := IncludeTrialingBackslash(Result);
end;
[ Voodoo @ 19.09.2005. 22:34 ] @
u, advanced :)

koliko godina koristim delphi, a nisam znao za IncludeTrialingBackslash...