Jak uruchomić zewnętrzny program po wciśnięciu przycisku?

Jak uruchomić zewnętrzny program po wciśnięciu przycisku?
RIP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0

Witam
Jestem osobą początkującą i proszę o zrozumiałość.

Poszukuję osoby która mi pomoże stworzyć funkcje w programie (Delphi)

Chciałbym stworzyć taką funkcję że po naciśnięciu przycisku „Button” uruchamia się plik z ścieżki „/Folder/setup.exe” bez pośredni z plików który się znajduje program i obok folder o nazwie np. "Folder" w nim "setup.exe"

Będę wdzięczny za pomoc dzięki.

edytowany 3x, ostatnio: flowCRANE
katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
1

W zdarzeniu onClick przycisku wykonujesz: ShellExecute


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
RIP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0
katakrowa napisał(a):

W zdarzeniu onClick przycisku wykonujesz: ShellExecute

nie wiem czy to ta funkcja "ShellExecute" ponieważ tam trzeba podać pełna ścieżkę to pliku padając literę Dysku.

edytowany 1x, ostatnio: RIP
katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
1

No bez przesady! To brzmi jakbyś tego Delphi jeszcze nawet nie włączył.
Musisz przeciągnąć button na formularz, dwukrotnie kliknąć w button i przepisać z linka, który podałem składnię wywołania programu - to wszystko roboty na 45 sekund.

Jeśli tego nie ogarniasz proszę obejrzyj choć jeden tutorial o Delphi, których na Youtube i nawet po Polsku nie brakuje, np:


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 2x, ostatnio: katakrowa
RIP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0

wiem jak się wprowadza funkcję.

katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
0

Zatem czego nie wiesz?


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
RIP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0

Proszę napisz jak byś napisał tą funkcje używając "ShellExecute"

katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
1

A czy spróbowałeś już samodzielnie cokolwiek napisać? Jeśli tak to proszę pokaż co - wtedy zastanowimy się dlaczego nie działa.

https://www.google.com/search?q=ShellExecute+delphi+example


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 2x, ostatnio: katakrowa
RIP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0

Widzę że nie chcesz mi pomoc.
Tak próbuję.

Zrobiłem na innym programie niż Delphi

https://ibb.co/yQw0DBV

Tylko musiałem wybrać funkcję „OpenRunFile” i wprowadzić „File Name:” Ścieszkę którą widzisz na zdjęciu.

edytowany 1x, ostatnio: cerrato
katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
0
  1. Obejrzałeś tutorial?
  2. Czy masz Delphi?
  3. Czy utworzyłeś w Delphi nowy pusty projekt "WindowsForms" ?

Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
RIP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0
  1. Zostawię komentarz dla siebie.
  2. Tak mam posiadam program Delphi jak pan może zauważyć w tytule „Tworzenie funkcji - Delphi [Pomoc]” słowo „Delphi”
  3. Mogę stworzyć 100 nowych projektów pustych w klikając ikonkę Delpih.exe i potem klikam „File” a potem „New” potem „Windows VCL Application – Delphi”.
SV
  • Rejestracja:ponad 13 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:62
1

Przynajmniej człowiek jest grzeczny :)

Kod pod przyciskiem, który uruchomi program znajdujący się w podfolderze aplikacji "Delphiowej"

Kopiuj
procedure TForm1.Button1Click(Sender: TObject);
var mypath :string;
begin
  mypath := ExtractFilePath(Application.ExeName)+'Folder/setup.exe';
  ShellExecute(Handle, 'open', PChar(mypath), nil, nil, SW_SHOW);
end;

do uses jeszcze należy dodać Shellapi

edytowany 2x, ostatnio: flowCRANE
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Tuchów
  • Postów:12175
0

Można za pomocą ShellExecute, ale wygodniej za pomocą TProcess, który przy okazji daje sporo możliwości.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
WL
  • Rejestracja:ponad 21 lat
  • Ostatnio:25 dni
  • Postów:1083
2
furious programming napisał(a):

Można za pomocą ShellExecute, ale wygodniej za pomocą TProcess, który przy okazji daje sporo możliwości.

Chcesz go zabić? ;-)
Przecież w Delphi nie ma TProcess...
Ale pewnie o tym wiesz :D

flowCRANE
W sumie to… jest ten fork z LCL jakby co. :P
RIP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0

Dzięki @Svenson !
Ktoś normalny pomógł.
Wprowadziłem tą funkcje którą mi napisałeś do przycisku „Button” ale nie działa nie wiem czemu ?

Informuje, że jest błąd w

Kopiuj
ShellExecute(Handle, 'open', PChar(mypath), nil, nil, SW_SHOW);
edytowany 2x, ostatnio: RIP
Ktos
Jaki błąd? Zawsze pisz jaki błąd, bo inaczej ciężko zgadnąć gdzie jest problem :/
RIP
ok rozumiem.
RIP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0

Sorry nie zauważyłem że napisałeś jeszcze
"do uses jeszcze należy dodać Shellapi"

Działa.

Svenson Dzięki.

edytowany 2x, ostatnio: RIP
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Tuchów
  • Postów:12175
1
RIP napisał(a):

Ktoś normalny pomógł.

Nie „pomógł”, a „rzucił gotowca”, a to dwie różne sprawy. Poza tym większość ludzi jest tutaj „normalnych” – jak już prosisz o pomoc to bądź łaskaw nie obrażać użytkowników, którzy nie chcą poświęcać czasu na odwalanie roboty za Ciebie.

Zresztą tego typu gotowce leżą tonami w sieci, więc zamiast leserować i czekać aż ktoś się gotowcem zlituje, wystarczyło spojrzeć choćby do Kompendium w tym serwisie – wszystko ładnie wytłumaczone, po polsku. Więcej znajdziesz oczywiście w Google (już pierwszy link miażdży mnogością opisów i przykładów), ale oczywiście to za trudne – lepiej żebrać na forum.

Wprowadziłem tą funkcje którą mi napisałeś do przycisku „Button” ale nie działa nie wiem czemu ?

Bo drutujesz niezrozumiały kod, zamiast zabrać się za naukę podstaw. A bez znajomości choćby podstaw programowania w Delphi, żadnego programu nie napiszesz (i bez pomocy innych oraz nudzenia ich o prowadzenie za rączkę). A poza tym, będziesz tracił kupę czasu odświeżając forum i sprawdzając czy coś się pojawiło, czy nie. No ale powodzenia życzę.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
RIP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:9
0

Szanuję ludzi i szanuje tych którzy mi pomogli i poświęcili mi czas że mi pomóc.
Nikogo nie chciałem tutaj obrażać.
Rozumiem i przepraszam.

Mariusz Bruniewski
Mariusz Bruniewski
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Świecie
0
Svenson napisał(a):

Przynajmniej człowiek jest grzeczny :)

Kod pod przyciskiem, który uruchomi program znajdujący się w podfolderze aplikacji "Delphiowej"

Kopiuj
procedure TForm1.Button1Click(Sender: TObject);
var mypath :string;
begin
  mypath := ExtractFilePath(Application.ExeName)+'Folder/setup.exe';
  ShellExecute(Handle, 'open', PChar(mypath), nil, nil, SW_SHOW);
end;

do uses jeszcze należy dodać Shellapi

Zastanawia mnie ta linijka mypath := ExtractFilePath(Application.ExeName)+'Folder/setup.exe';
działasz na serwerze czy powinno być: mypath := ExtractFilePath(Application.ExeName)+'Folder\setup.exe';


Umysł pozytywny szuka sposobów, jak coś wykonać; umysł negatywny wyszukuje sposoby, by uzasadnić, że czegoś nie można zrobić.
~~ Napoleon Hill ~~
Mariusz Bruniewski
Mariusz Bruniewski
Bo w ten sposób żadnej aplikacji nie odpalisz.
Mariusz Bruniewski
Mariusz Bruniewski
zmienna lokalna w postaci mypath nie jest Tobie potrzebna , gdyż nie wybierasz aplikacji ze zmiennej globalnej. Co to oznacza. Oznacza to, że gdybyś chciał np. Wywoływać i wszystkie odpalać na zadanie. SW_SHOW i jest jeszcze SW_SHOWMODAL poczytaj czym się różnią.
Mariusz Bruniewski
Mariusz Bruniewski
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Świecie
0

Można prościej

Kopiuj

uses shellapi

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShellExecute(Handle, 'open', PChar(ExtractFilePath(Application.ExeName)+'Folder\setup.exe'), nil, nil, SW_SHOW);
end;

Umysł pozytywny szuka sposobów, jak coś wykonać; umysł negatywny wyszukuje sposoby, by uzasadnić, że czegoś nie można zrobić.
~~ Napoleon Hill ~~
edytowany 1x, ostatnio: Mariusz Bruniewski
Zobacz pozostałe 5 komentarzy
Mariusz Bruniewski
Mariusz Bruniewski
A nikt nie chce wycieków pamięci tylko przez zmienne !
TS
Przecież zmienna lokalna nigdzie nie wycieknie. Pamięć zostanie zwolniona jak dojdzie do end.
Mariusz Bruniewski
Mariusz Bruniewski
Jeśli TStringList korzysta z wielu zmiennych zamian otrzyma free można długo szukać wycieków pamięci nawet za pomocą modułu FastMM wiem, jeśli się pisze się wielkie projekty. Właśnie zmienne dokuczają a nie same free. Okazuje się , że klasy pozamykane ale broją zmienne globalne.
Mariusz Bruniewski
Mariusz Bruniewski
Dlatego jak najmniej zmiennych :-)
GS
gdzie tu widzisz zmienną globalną ??

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.