rapidsebuja Posted May 22, 2012 Report Share Posted May 22, 2012 Witam jestem nowy w tym temacie i dopiero co zaczynam. Nie wiem czy ten temat jest w odpowiednim dziale... W programie "Embarcadero RAD Studio XE2" chce stworzyc mala aplikacje pod windows 7 x64. Udalo mi sie cos takiego stworzyc: Nie wiem jak mam dodac polecenie cmd pod buttony. Tzn.: Kazdy button uruchamia pewne polecenie cmd. Nie wiem tez gdzie powinienem importowac / zapisac polecenia cmd wraz z aplikacjami ktore te polecenia maja uruchamiac... Fajnie by bylo jak by byl do tej aplikacji plik .ini w ktorym moglbym wpisac sciezki umiejscowienia polecen cmd dla buttonow... Prosze o wyrozumialosc nie znam zadnych jezykow programowania a zalezy mi bardzo na tym projekcie... Link to comment Share on other sites More sharing options...
sazian Posted May 22, 2012 Report Share Posted May 22, 2012 1) ShellExecute(0, nil, 'cmd.exe', '/C polecenie', nil, SW_HIDE); mam nadzieję że zadziała 2) nie bardzo rozumiem 3) var INI : TIniFile; begin INI := TINIFile.Create('C:\moj.ini'); try ShowMessage( INI.ReadString('Main', 'Klucz', 'Wartość domyślna') ); finally INI.Free; end; Link to comment Share on other sites More sharing options...
rapidsebuja Posted May 22, 2012 Author Report Share Posted May 22, 2012 2) chodzi o to ze np. w miejscu : C:\Windows\Specials\ beda 4 katalogi : "pierwszy" - a w nim polecenie .cmd i plik .exe (cmd wlancza tylko tryb silent) "drugi" - a w nimj .cmd i .reg "trzeci" - i tak dalej... Ogolnie 4 foldery i 4 buttony. W pliku ini chcialbym wpisywac sciezki docelowe do tych plikow cmd (kazdy ma inna lokalizacje bo bedzie umieszcony w oddzielnym folderze) i proslibym o wyjasnienie gdzie wkleic kod dotyczacy . ini.... " ShellExecute(0, nil, 'cmd.exe', '/C polecenie', nil, SW_HIDE); " wywala blad... Moze taki przyklad dla pierwszego buttona (prosze o napisanie kodu z nazwami uzytymi w przykladzie) Mam folder : C:\Windows\Specials\Button1 - w nim pliki : Directx.exe i Directx.cmd Aplikacja stworzona w tym programie znajdowala by sie w : C:\Users\Rapidsebuja\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Win7care - nazywala by sie "narzedziownia.exe" w folderze "Win7care" - pliki: "narzedziownia.exe" , "sciezki.ini" Jak powinno to wygladac? Link to comment Share on other sites More sharing options...
rapidsebuja Posted May 22, 2012 Author Report Share Posted May 22, 2012 tak wyglada kod: unit System7care; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs; type TForm1 = class(TForm) Button1: TButton; Brush1: TBrushObject; Button2: TButton; Button3: TButton; Button4: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); begin end; procedure TForm1.Button2Click(Sender: TObject); begin end; procedure TForm1.Button3Click(Sender: TObject); begin end; procedure TForm1.Button4Click(Sender: TObject); begin end; procedure TForm1.FormCreate(Sender: TObject); begin end; end. Link to comment Share on other sites More sharing options...
Blind Posted May 23, 2012 Report Share Posted May 23, 2012 Widze, że się nieźle namęczyłeś z tym programem. www.blinder.pl - Blog Link to comment Share on other sites More sharing options...
rapidsebuja Posted May 23, 2012 Author Report Share Posted May 23, 2012 to zrobilem w niecale 3 minuty.... Gorzej z kodem... W czoraj cos juz zrobilem ale nie wszystko dziala ..... Link to comment Share on other sites More sharing options...
rapidsebuja Posted May 23, 2012 Author Report Share Posted May 23, 2012 Juz rozkminilem:P unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, ShellAPI, FMX.Dialogs; type TAplikacja = class(TForm) Brush1: TBrushObject; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Aplikacja: TAplikacja; implementation {$R *.fmx} procedure TAplikacja.Button1Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'polecenie.cmd', nil, 'C:\Special\Aktualizacja DirectX', 0); end; procedure TAplikacja.Button2Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'gracz.cmd', nil, 'C:\Special\Tryb gracza', 0); end; procedure TAplikacja.Button3Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'uslugi.cmd', nil, 'C:\Special\Pozadkowanie uslug', 0); end; procedure TAplikacja.Button4Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'rejestr.cmd', nil, 'C:\Special\Optymalizacja rejestru', 0); end; end. u mnie tylko tak dziala, moze sie przyda innym Link to comment Share on other sites More sharing options...
rapidsebuja Posted May 23, 2012 Author Report Share Posted May 23, 2012 chce jeszcze zrobic pasek postepu dla uruchamianych rzeczy (jeden do wszystkiego) poniewaz beda sie uruchamiac niewidoczne Link to comment Share on other sites More sharing options...
rapidsebuja Posted May 23, 2012 Author Report Share Posted May 23, 2012 progressbar niby zrobilem ale nie dziala... unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, ShellAPI, FMX.Dialogs; type TAplikacja = class(TForm) Brush1: TBrushObject; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; ProgressBar1: TProgressBar; Procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure ProgressBar1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Aplikacja: TAplikacja; implementation {$R *.fmx} procedure TAplikacja.Button1Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'polecenie.cmd', nil, 'C:\Special\Aktualizacja DirectX', 0); end; procedure TAplikacja.Button2Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'gracz.cmd', nil, 'C:\Special\Tryb gracza', 0); end; procedure TAplikacja.Button3Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'uslugi.cmd', nil, 'C:\Special\Pozadkowanie uslug', 0); end; procedure TAplikacja.Button4Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'rejestr.cmd', nil, 'C:\Special\Optymalizacja rejestru', 0); end; procedure TAplikacja.Button5Click(Sender: TObject); begin ShellExecute(Handle, 'open', 'zwykly.cmd', nil, 'C:\Special\Tryb gracza', 0); end; procedure TAplikacja.ProgressBar1Click(Sender: TObject); begin with TForm.Create(self) do try ShowModal; finally Free; end; End; end. Link to comment Share on other sites More sharing options...
olesio Posted May 23, 2012 Report Share Posted May 23, 2012 A jak ma działać skoro nie masz żadnego kodu, który go oprogramowuje. Zachowanie TProgressBar zmieniasz ustawiając własności Position, Min i Max (wszystkie typu integer). Poza tym bez sensu zrobiłeś wywołanie tych polecen cmd, podając im "sztywne" ścieżki. Powinieneś to raczej zrobić poprzez albo wyszukiwanie plików lub katalogi i pobieranie do nich ścieżek lub jeżeli są one w katalogu, w którym znajduje się plik wykonywalny Twójego programu: ExtractFilePath(Application.ExeName) + 'cosiktam.cmd'. Pozdrawiam: olesio Link to comment Share on other sites More sharing options...
rapidsebuja Posted May 23, 2012 Author Report Share Posted May 23, 2012 Sciezki sa sztywno bo pierwszy raz w zyciu cos takiego robie... nie znam zadnych jezykow programowania i potrzebuje pomocy z tym paskiem reszta ma zostac bo jest mi tak wygodniej... Prosze kogos o dopisanie kodu pod progressbar post 7-my zawiera czysty kod bez bledow i potrzeba do niego dopisac progressbar... Niestety tego juz chyba nie przeskocze... Link to comment Share on other sites More sharing options...
olesio Posted May 25, 2012 Report Share Posted May 25, 2012 Ale nie bardzo rozumiem, co ma pokazywać ProgressBar, bo proces uruchamiania pojedyńczego procesu, o ile wiem przy użyciu ShellExecute raczej nie zwizualizujesz, bo jak niby można pokazać jak długo będzie się uruchamiał proces. Co określić jako Max. U każdego w zależności od prędkości dysku, komputera, zamulenia innymi procesami, programu antywirusowego w tle, fragmentacji dysku jak i za pewne jeszcze wielu innych czynników będzie inna. Natomiast jeżeli chcesz uruchomić te cztery buttony to rób to po każdym wywołaniu procedury ShowProgrss tak jak pokazałem to w kodzie na szybko ponizej. Kod poniżej jest przykładowy i poglądowy dla Ciebie żebyś wiedział co i jak. Nazwałem również formatkę Aplikacja, chociaż proponował bym stosować raczej anglo języczne nazwy i dodawać do ich słowo Form na przykład główną Formatkę nazwać MainForm. Jeśłi chcesz pokazywać Splashe czyli takie właśnie specjalne okienka pozwalające pokazywać się do póki nie zakończył się postęp jakiejś operacji to w google znajdziesz mnóstwo przykłądów i informacji jak robić SplashScreeny w Delphi. Oczywiście dla poprawności należało by zrobić to co poniżej w wątku, ale to byś musiał sobie o wątkach w Delphi poczytać. I fajnie, że coś sam działasz, ale staraj się nawet jak nie zamierzasz później napisać wielu programów, pisać swoje programy dobrze czyli nazewnictwo, formatowanie kodu, nie stosowanie ścieżek na sztywno i tym podobne przydadzą się zawsze żeby byś ze swojego dziełą zadowolonym i wiedzieć zę działą ok. Poza tym takie rzeczy co kombinujesz niekiedy wygodniej jest zrobić w pakietach instalacyjncyj jak NSIS (NullSofu) albo InnoSetup. Dokumentacji i przykładowych skryptów (a szczególnie do NSIS'a, z którego czasami korzystam do tworzenia instalek) na google jest mnóśtwo. Do Inno Setup też za pewne znajdziesz, tam piszesz kod w jęzku będący identycznym składniowo z Delphi czyli nieco łątwiej. Ok, oto przykłądowy kod. W razie pytań pisz, ale wszystko powinno być jasne. Na formatce umieść tylko TProgressBar o własności Name ProgrsssBar i TLabel o własności Name ProgressLabel i ułóż je łądnie. Mozesz również wyśrodkować formę przez własnośc Position oraz przez własnośc BorderStyle wyłączyć jej ramkę z między innymi "X" do zamykania aby wyglądało to na prawie pr0 SplashScreen EDIT: kod poniżej był ładnie sformatowany i powinien raczej wyglądac jak tutaj: http://pastebin.com/psHEEaZ4 ale coś go wstawiacz kodu na Unit1 niestety przeformatował i wygląda nie za ładnie. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TAplikacja = class(TForm) ProgressBar : TProgressBar; ProgressLabel : TLabel; procedure FormActivate(Sender : TObject); private public end; var Aplikacja : TAplikacja; ProgressCnt : Byte = 0; Progress_Arr : array[0..3] of string = ( 'Aktualizacja DirectX', 'Tryb gracza', 'Pozadkowanie uslug', 'Optymalizacja rejestru' ); implementation {$R *.dfm} procedure ShowProgress; begin with Aplikacja do begin ProgressLabel.Caption := Progress_Arr[ProgressCnt]; if ProgressCnt < Length(Progress_Arr) then begin ProgressCnt := ProgressCnt + 1; ProgressBar.Position := ProgressCnt; end; end; end; procedure TAplikacja.FormActivate(Sender : TObject); var I : integer; begin ProgressBar.Position := 0; ProgressLabel.Caption := ''; ProgressBar.Max := Length(Progress_Arr); ShowMessage('Rozpoczynamy pokazywanie postępu.'); for I := Low(Progress_Arr) to High(Progress_Arr) do begin ShowProgress; ShowMessage('Potwierdż OK aby wykonać kolejny krok.'); end; Close; end; end. I sorry za ewentualne literówki w powyższym teksrcie. Tekxt pisany po niepełnym odespaniu nocki w pracy oraz kilku piwkach, ale temat na tyle jest banalny że wszystko powinno być jasne, w razie czego pytaj. Pozdrawiam: olesio Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.