| Autor | Správa |
M.Valasek
 Zablokovaný užívateľ
 Založený: 08.10.2007 Príspevky: 70 Bydlisko: Myjava
 | Zaslal: Pi 07.08.09 21:24 |   |
Kde by sa dalo najst nieco ako zhrnutie vsetkych podporovanych prikazov pre DELPHI 7 ?
Pripadne aj ku kazdemu strucne vysvetlenie. |
| |
  |
 |
shiro
 Skúsený užívateľ
 Založený: 12.10.2006 Príspevky: 9660
 | Zaslal: So 08.08.09 10:48 |   |
v helpe k delphi samotnemu. |
_________________ AMD Phenom II 955 BE 3.2GHz, 4GB RAM DDR3-1333 A-Data, MB Gigabyte MA-770T-UD3P, Kingston SSDNow V 64GB 2.Gen., WD 640GB + WD 1TB, Gigabyte GeForce GTX275 896MB, 2xDVD+-RW NEC 7173, LCD BenQ G2400Wa 24", MS Wireless optical mouse 2.0A, Keyboard Prestigio, Creative SBS 380 2.1 | |
  |
 |
M.Valasek
 Zablokovaný užívateľ
 Založený: 08.10.2007 Príspevky: 70 Bydlisko: Myjava
 | Zaslal: Ne 09.08.09 11:15 |   |
| shiro napísal: | | v helpe k delphi samotnemu. |
Ale ja by som chcel nieco ako tabulku so vsetkymi prikazmi. |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Ut 11.08.09 20:26 |   |
Príkazy? Príkaz je aj x:= 10;
Zrejme si myslel funkcie. Bežne používaš API funkcie a potom funkcie z štandardných unitov (IntToStr, ShowMessage, a pod.) . Tieto funkcie (za funkcie považujem aj procedúry a properties zapuzdrené v triedach) sú, ako už shiro spomenul, v Delphi nápovede. API funkcie sa nachádzaju v súbore nápovedy C:\Program Files\Common Files\Borland Shared\MSHelp\WIN32.HLP. |
| |
   |
 |
martin.007
 Užívateľ
 Založený: 26.11.2006 Príspevky: 24 Bydlisko: Snina
 | Zaslal: Ut 11.08.09 22:30 |   |
|
  |
 |
M.Valasek
 Zablokovaný užívateľ
 Založený: 08.10.2007 Príspevky: 70 Bydlisko: Myjava
 |
| Fico napísal: | Príkazy? Príkaz je aj x:= 10;
Zrejme si myslel funkcie. Bežne používaš API funkcie a potom funkcie z štandardných unitov (IntToStr, ShowMessage, a pod.) . Tieto funkcie (za funkcie považujem aj procedúry a properties zapuzdrené v triedach) sú, ako už shiro spomenul, v Delphi nápovede. API funkcie sa nachádzaju v súbore nápovedy C:\Program Files\Common Files\Borland Shared\MSHelp\WIN32.HLP. |
No myslel som funkcie zo štandardných unitov, a v tej napovede su aj niekde zhrnute? |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: St 12.08.09 18:04 |   |
Je to riadne abecedný zoznam funkcií, dátových typov, kľúčových slov, direktív, atď. V Delphi len klikni na ikonu knižky a zadaj názov funkcie.
Ale toto isté nájdeš na stránke od martin.007 a myslím, že tam je to oveľa viac prehľadnejšie. Ďakujem aj ja za stránku, martin.007, to sa určite raz bude hodiť. |
| |
   |
 |
Draco
 Užívateľ
 Založený: 03.01.2008 Príspevky: 146
 |
Ahoj, nechcem kvoli tomuto zakladat novu temu. Mam zadane taketo prikazy, podmienky:
f := StrToInt (Edit1.Text);
if f > 10940 then
Application.Terminate;
Obmedzenie je tam kvoli tomu, ze pri vyssich cislach to velmi zatazuje CPU. Ked zadam do Edit1 cislo 12 000 tak sa program vypne. Ale ak zadam 100 000 tak zacne pocitat, respektive pracovat (a tam to uz zatazi procesor a samozrejme, ze to nereaguje a tak.)
Takze, preco pri tych 100 000 to zacne pracovat, ked sa ma vypat?
Osobne si myslim, ze kym sa vypne ten program, tak ono zacne uz pocitat a kedze to vtedy nereaguje tak sa to nevypne. Keby aspon nejaky prikaz, aby po tej podmienke pockalo 100ms  |
_________________ Moj PC: Intel core 2 duo (2,66 ghz), nvidia 8600 512mb, 2gb Ram 800Mhz Corsair, 500gb HDD | |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 |
Nepochopil som, aký je presne problém (trebalo dať viac kódu), ale skúsim odpovedať na niektoré otázky:
| Draco napísal: | | Ale ak zadám 100 000 tak začne počítať |
Tak toto mi akosi nepasuje. Podľa podmienky if to nepripadá v úvahu. Akého typu je premenná f ? Ak je číslo 100000 zadané korektne (bez medzier), tak sa program musí ukončiť.
| Draco napísal: | | nejaký príkaz, aby po tej podmienke počkalo 100ms |
API funkcia sleep:
procedure Sleep(MiliSecValue : cardinal);
Ešte jedna pomôcka: Ak sa v programe vykonáva operácia náročná na čas a kvôli nej aplikácia potom "zatuhne", zvykne sa do tejto operácie pridávať procedúru Application.ProcessMessages. |
| |
   |
 |
Draco
 Užívateľ
 Založený: 03.01.2008 Príspevky: 146
 | Zaslal: Ut 15.09.09 10:51 |   |
No tu je teda dlhsi kod
procedure TForm1.Button1Click(Sender: TObject);
var
cislo, pocet, y, f, i, x, j: Integer;
begin
f := StrToInt (Edit1.Text);
y := 10;
x := 10;
if f > 11000 then
Application.Terminate;
for cislo := 1 to f do
begin
A potom vlastne zacina pocet cyklov na zaklade toho cisla. Ak chces tak poslem aj cely kod, je to iba obycajny vyhladavac prvocisiel a potom ich vypisuje do plochy (ucim sa).
Ta procedura sleep sa ako pouziva? Napisem ju ako proceduru (ako si napisal) a potom ju pouzivam ako aj ine pomocne procedury? Napriklad, ze by som to umiestnil za tu podmienku asi v takomto tvare?: sleep(100);
Alebo, naco je dobra ta druha procedura? |
_________________ Moj PC: Intel core 2 duo (2,66 ghz), nvidia 8600 512mb, 2gb Ram 800Mhz Corsair, 500gb HDD | |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Ut 15.09.09 13:01 |   |
Áno, presne v takom tvare sa používa. Čiže ak treba čakať napríklad 200 ms, tak sa to zapíše takto:
Application.ProcessMessages spracuje správy windows (windows messages). To znamená, že počas výpočtu sa s oknom bude dať hýbať, stláčať tlačídlá atď. V skratke - zabráni sa zatuhnutiu počas počítania.
Skús upraviť svoj kód podľa tohto + pridaj si svoj výpočet, do ktorého je pridaný riadok Application.ProcessMessages:
| kód: | procedure TForm1.Button1Click(Sender: TObject);
var
cislo, pocet, y, f, i, x, j: integer;
begin
Button1.Enabled:= false;
try
f:= StrToInt (Edit1.Text);
except
ShowMessage('Nesprávne zadané číslo.');
Button1.Enabled:= true;
Exit;
end;
y:= 10;
x:= 10;
if (f > 11000) then begin
ShowMessage('Príliš veľké číslo!');
Exit;
end;
for cislo:= 1 to f do begin
(* ... výpočet ... *)
Application.ProcessMessages;
end;
// koniec procedury
Button1.Enabled:= true;
end; |
|
| |
   |
 |
Draco
 Užívateľ
 Založený: 03.01.2008 Príspevky: 146
 | Zaslal: Ut 15.09.09 13:33 |   |
Funguje to super, ked zadam velke cislo tak zobrazi tu spravu Tak pekne som si to ani nepredstavoval
Este som sa chcel spytat, ze kedy vypise tuto spravu, respektive kedy bude tato podmienka splnena? (aby som to vedel v buducnosti pouzit)
| kód: |
try
f:= StrToInt (Edit1.Text);
except
ShowMessage('Nesprávne zadané číslo.');
Button1.Enabled:= true;
Exit;
|
|
_________________ Moj PC: Intel core 2 duo (2,66 ghz), nvidia 8600 512mb, 2gb Ram 800Mhz Corsair, 500gb HDD | |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Ut 15.09.09 14:12 |   |
Try / except blok (prípadne try / finally) sa používa na ošetrenie chýb. Ak sa v bloku try vyskytne chyba, tak programátor môže pekne túto chybu ošetriť (napríklad zobrazením chybovej správy).
V našom prípade, ak dôjde k chybe počas konverzie reťazca na číslo (StrToInt), vykoná sa blok except. Môžeš skúsiť namiesto čísla napísať nejaký znak a vyhodí chybové hlásenie. Ak je konverzia úspešná, blok except sa nevykoná.
(Odporúčam stiahnuť seriál Umíme to s Delphi, ktorý je myslím skvelý na začiatok a sú v ňom pekne a zrozumiteľne vysvetlené základné funkcie a komponenty. Je tam aj spomenutý blok try/except) |
| |
   |
 |
Draco
 Užívateľ
 Založený: 03.01.2008 Príspevky: 146
 | Zaslal: Ut 15.09.09 14:29 |   |
To viem, avsak kedy je konverzia na cislo neuspesna? Pretoze, ak napisem do Edit1 napr. 100 000 (s medzerou) alebo nejaky text tak vyhodi systemovu chybu (alebo ako to nazvat). Avsak, podla mna by malo napisat, ze bolo Nespravne zadane cislo - teda vykonat except
(dakujem, skusim to stiahnut ) |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1052
 | Zaslal: Ut 15.09.09 14:40 |   |
Áno, vyhodí to systémovú chybu, ale iba ak spúšťaš projekt z Delphi. Potom ak stlačíš F9, program pokračuje a zobrazí sa naša chybová hláška. Ak spustíš priamo svoju aplikáciu z miesta, kde je skompilovaná (tzn nie z Delphi debuggera), tak sa zobrazí iba naša chybová hláška. |
| |
   |
 |
|