Delphi OpenDialog Odpalenie ExE

0

Witam,
potrzebuję kod który po naciśnięciu buttona
otworzy opendialog i opendialog wymaga aby plik był exe i nazywał się plik i po zaznaczeniu pliku uruchamia go, i tworzy plik *.ini z którym zapisuje ścieżkę i jeśli jest plik ini z ścieżką to nie otwiera opendialoga tylko od razu exe

0

Prosiłem o gotowy kod, potrzebuję na szybko gotowca a nie uczyć się tego jezyka.

1

Zapewne zjawi się olesio albo jakaś inna dobra dusza i napisze pełny kod z komentarzami.

Panowie - nie róbcie TAK!

Niech albo się nauczy, albo płaci albo nie zda. Robicie im krzywdę, myśląc za nich.

0

madmike: nie pomoge tym razem, bo poza tym że poniższy cytat jest wprawdzie szczery, ale troszkę bezczelny.

Neo133T napisał(a)

Prosiłem o gotowy kod, potrzebuję na szybko gotowca a nie uczyć się tego jezyka.

Do pytającego, nie chce się samodzielnie robić to zleć to w dziale Offtopic - Praca. Forum jest po to aby raczej
naprowadzić na jakieś rozwiązanie, a naprowadzającą podpowiedź już dostałeś. Nie chce się Tobie nawet na ów
linki spojrzeć, to albo zapłać za gotowca albo zostaniesz z niczym. I koniec litującego się nad leniami olesia :P

0
Neo133T napisał(a)

Prosiłem o gotowy kod, potrzebuję na szybko gotowca a nie uczyć się tego jezyka.

a ja potrzebuję 200zł - widzisz analogię

0

Prosiłem o gotowy kod, potrzebuję na szybko gotowca a nie uczyć się tego jezyka.

Nie musisz się uczyć...A nie sorry...Jak nie uważałeś na lekcjach, nic nie wiesz nt.Delphi, to płać.
Właściwie kod mam już gotowy, za 199.99 będziesz miał go na kompie.

0
var
 OpenDialog1 : TOpenDialog;
begin
OpenDialog1:=TOpenDialog.Create(nil); 
MsgStr := 'Please point me to your gg exe!';
MessageDlg(PChar(MsgStr), mtInformation,[mbOK],0);
  OpenDialog1.Filter:='gg.exe';
  if Opendialog1.Execute then
  sciezka:=OpenDialog1.FileName;
  ZapisINI(plikini,sciezka);
  showmessage(sciezka);
  ShellExecute(Handle,'open',sciezka,'','',sw_Normal);
end;




function OdczytINI( zmienna : string ):string;
var
 INI : TIniFile;
begin
 INI := Tinifile.Create(IncludeTrailingBackslash(ExtractFilePath(Application.ExeName))+ 'Dane.INI');
 result:=INI.ReadString('SCIEZKI',zmienna,'');
 INI.Destroy;
end;

procedure ZapisINI(zmienna,wartosc : string);
var
 INI : TIniFile;
begin
 INI := Tinifile.Create(IncludeTrailingBackslash(ExtractFilePath(Application.ExeName))+ 'Dane.INI');
 INI.WriteString('SCIEZKI',zmienna,wartosc);
 INI.Destroy;
end;

no i czemu nie działa?

0

sciezka jest zdeklarowana jako string;
a błedy:
Undeclared identifier: 'ZapisINI'
Incompatible types: 'String' and 'PAnsiChar'

0

A to powinno już spełniać wszystko co chce:

var
 OpenDialog1 : TOpenDialog;
begin
if sciezka > 0 then begin
ShellExecute(Handle,'open',sciezka,'','',sw_Normal);
end else
OdczytINI(sciezka);
OpenDialog1:=TOpenDialog.Create(nil);
MsgStr := 'Please point me to your gg exe!';
MessageDlg(PChar(MsgStr), mtInformation,[mbOK],0);
OpenDialog1.Filter:='gg.exe';
if Opendialog1.Execute then
sciezka:=OpenDialog1.FileName;
ZapisINI(plikini,sciezka);
showmessage(sciezka);
ShellExecute(Handle,'open',sciezka,'','',sw_Normal);
end;
0

Incompatible types: 'String' and 'Integer'
Incompatible types: 'String' and 'PAnsiChar'
Undeclared identifier: 'OdczytINI'
Undeclared identifier: 'ZapisINI'
Incompatible types: 'String' and 'PAnsiChar'

0

Daj pełny kod unitu, z wcięciami!

0
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Buttons, MMSystem, ShellAPI, inifiles;

type
  TForm1= class(TForm)
    Buttonprog: TSpeedButton;
    OpenDialog1: TOpenDialog;
    procedure Buttonprog(Sender: TObject);
  private
   sciezka: string;
  MsgStr: string;
  public


procedure TForm1.Buttonprog(Sender: TObject);
var
 OpenDialog1 : TOpenDialog;
begin
if sciezka > 0 then begin
ShellExecute(Handle,'open',sciezka,'','',sw_Normal);
end else
OdczytINI(sciezka);
OpenDialog1:=TOpenDialog.Create(nil);
MsgStr := 'Please point me to your gg exe!';
MessageDlg(PChar(MsgStr), mtInformation,[mbOK],0);
OpenDialog1.Filter:='gg.exe';
if Opendialog1.Execute then
sciezka:=OpenDialog1.FileName;
ZapisINI(plikini,sciezka);
showmessage(sciezka);
ShellExecute(Handle,'open',sciezka,'','',sw_Normal);
end;




function OdczytINI( zmienna : string ):string;
var
 INI : TIniFile;
begin
 INI := Tinifile.Create(IncludeTrailingBackslash(ExtractFilePath(Application.ExeName))+ 'Dane.INI');
 result:=INI.ReadString('SCIEZKI',zmienna,'');
 INI.Destroy;
end;

procedure ZapisINI(zmienna,wartosc : string);
var
 INI : TIniFile;
begin
 INI := Tinifile.Create(IncludeTrailingBackslash(ExtractFilePath(Application.ExeName))+ 'Dane.INI');
 INI.WriteString('SCIEZKI',zmienna,wartosc);
 INI.Destroy;
end;
0

Jeden wielki bajzel, ale po kolei:

Co to jest: if sciezka > 0 then begin - ścieżka zadeklarowana jako string, a sprawdzasz czy np 'to jest string' > 0 ? Gdzie w ogóle przypisujesz jakąś wartość zmiennej ścieżka? Poprawisz, pojedziemy dalej...

0

Najpierw sprawdzam czy plik ini został wcześniej zapisany i czy ma w sobie już wpisana wartość jesli tak odpala program a jeśli nie otwiera open dialog każe wskazać i uruchomić.

0
Neo133T napisał(a)

Najpierw sprawdzam czy plik ini został wcześniej zapisany i czy ma w sobie już wpisana wartość jesli tak odpala program a jeśli nie otwiera open dialog każe wskazać i uruchomić.
Marzysz, że to robisz.

procedure TForm1.Buttonprog(Sender: TObject);
var
  OpenDialog1 : TOpenDialog;
begin
if sciezka > 0 then // czy zmienna sciezka (diabli wiedzą co jest w środku) jest większa od zera. Czy 'cukier' jest większy od 0? Gdzie tu sprawdzasz cokolwiek o pliku ini czy wartości w niej?
   begin
  ShellExecute(Handle,'open',sciezka,'','',sw_Normal);
  end
    else ..
0

Specjalnie dla pana Neo:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IniFiles, ShellApi; //dodaj mod...nieważne...

type
  TForm1 = class(TForm)
    Buttonprog: TButton;
    procedure ButtonprogClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Const Aplikacja = 'GG.EXE';
Var Form1  : TForm1;
    Ini    : TIniFile;
    Exists : Boolean;

implementation

{$R *.dfm}

procedure TForm1.ButtonprogClick(Sender: TObject);
Var Open: TOpenDialog;
Begin
 if (Exists) Then
  ShellExecute(Handle, 'open', PChar(Ini.ReadString('Plik', Aplikacja, '')), '', '', SW_Normal) Else
 Begin
  Open        := TOpenDialog.Create(Form1);
  Open.Filter := 'Plik '+Aplikacja+'|'+Aplikacja;
  MessageBox(Handle, PChar('Wybierz plik '+Aplikacja), '', MB_IconInformation);
  if (Open.Execute) Then
  Begin
   Ini.WriteString('Plik', Aplikacja, Open.FileName);
   ShellExecute(Handle, 'open', PChar(Open.FileName), '', '', SW_Normal);
  End Else
   ShowMessage('Zamknąłeś wybór pliku.');
 End;
end;

procedure TForm1.FormCreate(Sender: TObject);
Const Def = '<brak>';
Var S: String;
begin
 Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Dane.ini');
 S   := Ini.ReadString('Plik', Aplikacja, Def);
 if (S = Def) Then
  Exists := False Else
  Exists := True;
end;

end.

Tylko nie zapomnij powiedzieć, kto to za Ciebie wykonał.
Omg.zaczynam się zmieniać w Olesia :D

0

Panie Neo, nie ładnie:
http://www.elektroda.pl/rtvforum/topic1581129.html

Taki plagiat...

0

Patryk27, wiem, że w was aż buzuje altruizm i chęć pomocy innym za wszelką cenę. Ale...
Panowie - nie róbcie TAK! Robicie im krzywdę, myśląc za nich.

Jeśli nie chce im się myśleć i uczyć, niech idą do roboty łopatą. Budujemy tyle autostrad, że praca zawsze się znajdzie...

Patryk27, nieładnie jest pisać nie ładnie.

0

Dzieki za chęcie ale rozwiązałem to troche inaczej.

0

Podziel się rozwiązaniem - może się czegoś nowego nauczymy ;)

0

Zrobiłem na kodzie znalezionym na elektrodzie ale i tak nie działa, coś sie skopało nawet na kodzie od Patryka
tzn tak gdy do jednego pliku dodam kilka aplikacji np.
[gg]
sciezka
[notepad]
to jest git ale jak zrestartuje program, to program czytając pliki ini odpala program tak jak by z plików z puliptu czyli nie odpala wywala bład ten program co został odpalony. (gg/notepad)

var 
Open: TopenDialog

procedure TMainForm.btn1(Sender: TObject);
Var
S: string;
const
  Aplikacja = 'gg.exe';
  Def = '<brak>';
Begin
 Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'location.ini');
 S   := Ini.ReadString('gg-', Aplikacja, Def);
 ShowMessage(S); // dla testu co wychodzi z ini
  if (S = Def) Then
  Exists := False Else
  Exists := True;
 if (Exists) Then
 ShellExecute(Handle, 'open', PChar(Ini.ReadString('gg-', Aplikacja, '')), '', '', SW_Normal)  Else
 Begin
  Open        := TOpenDialog.Create(MainForm);
  Open.Filter := 'gg-'+Aplikacja+'|'+Aplikacja;
  MessageBox(Handle, PChar('Wskaż Lokalizację aplikacji '+Aplikacja), '', MB_IconInformation);
  if (Open.Execute) Then
  Begin
   Ini.WriteString('gg-', Aplikacja, Open.FileName);
   ShellExecute(Handle, 'open', PChar(Open.FileName), '', '', SW_Normal);
  End Else
   ShowMessage('Przerwano!');
 End;
end;

procedure TMainForm.cod2Click(Sender: TObject);
Var
X: string;
const
Aplikacja1 = 'notepad.exe';
Def = '<brak>';
Begin
 Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'location.ini');
 X   := Ini.ReadString('np-', Aplikacja1, Def);
if (X = Def) Then
  Exists := False Else
  Exists := True;
 if (Exists) Then
  ShellExecute(Handle, 'open', PChar(Ini.ReadString('np-', Aplikacja1, '')), '', '', SW_Normal) Else
 Begin
  Open        := TOpenDialog.Create(MainForm);
  Open.Filter := 'np-'+Aplikacja1+'|'+Aplikacja1;
  MessageBox(Handle, PChar('Wskaż Lokalizacje aplikacji '+Aplikacja1), '', MB_IconInformation);
  if (Open.Execute) Then
  Begin
   Ini.WriteString('np-', Aplikacja1, Open.FileName);
   ShellExecute(Handle, 'open', PChar(Open.FileName), '', '', SW_Normal);
  End Else
   ShowMessage('Przerwano!');
 End;
end;
0

Pomoże ktoś?

0

nie.

Neo133T napisał(a)

Prosiłem o gotowy kod, potrzebuję na szybko gotowca a nie uczyć się tego jezyka.

jestes leniwy i bezczelny a poza tym dostales juz dzialajacy kod.

0

Ten kod nie działa mistrzu,
Opisałem błąd,
W jednym pliki ini chce zapisywać lokalizacje do wielu program a z odczytem z ini teraz jest problem gdyż program jakby odpalany z ini gubi swoje pliki wywala jakieś błędy brakujących mu pllików, np próbując odpalić grę po restarcie programu z pliku ini nie dało się gdyż gdy program odpalił exe gry ona wysypała kilka linijek brakujących plików, a gdy normalnie odpalam za pierwszym razem poprzez opendialog bez ini jest dobrze. !? a kod wygląda poprawnie ?

0

Czy ktoś może mi pomóc? z tym błędem? Bo widzę "obeznanym" zabrakło języka w gębie.

1

taa... znajac zycie (i takich ludzi jak Ty) teraz bedziesz chcial nas sprowokowac zalosnymi tekstami w stylu ze "sie nie znacie", "tacy z was programisci" itd...
otoz nic z tego.
jak chcesz sie z tym uporać to naucz sie jezyka a nie licz na innych. jesli jestes inteligentny to poradzisz sobie sam.
wbij sobie do glowy ze nikt za ciebie tego robil nie bedzie, a juz na pewno nie wtedy gdy bezczelnie żądasz pomocy a nie o nia prosisz.

0

Hm....
Właściwie mógłbym napisać, ale:
1.Dostaniesz exe'ka.
2.Będę tam podpisany.

Zgadzasz się ? :D
Albo takie warunki:
1.Podasz nazwę szkoły i nauczyciela, a dostaniesz kod (oczywiście, po zweryfikowaniu tych danych)...

To się powoli staje perełką [green]

0

nie chce gotowego exe, to nie do szkoły proszę abyście wskazali mi błąd w kodzie dlaczego jak zrestartuję program to program próbuje jakoś dziwnie odpalić wskazany w ini exe, coś się krzaczy z ShellExecute? bo scieżka wczytana zini jest prawidłowa co sprawdziłem Showmessage(s);

0

próbowałem zmienic Pchar na PAnsiChar ale ciągle to samo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1