Autor: Matěj Procházka
Poslední úpravy: 6.11.98
Tato stránka byla vytvořena jako pomůcka pro studenty třídy A2C Vyšší Odborné Školy Informačních Služeb
Program v Delphi. Co to vlastně je? K čemu to slouží? Co jsou to Delphi? To se budu snažit zodpovědět v následujících řádkách.
Co jsou to Delphi - Delphi jsou tzv. RAD (Rapid Application Developer). Je to nástroj, kterého se využívá při tvorbě aplikací pro prostředí Windows (95,98,NT a dříve i 3.x (Delphi 1.0)). Delphi jsou založeny na využívání komponent a následného propojení mezi nimi a přiřazení specifických funkcí daným komponentám.
Komponenty jsou to, co vidíte noahoře na tlačítkovém panelu. Jsou to předdefinované objekty, které mají (většinou) nějakou vizuální reprezentaci a navíc umějí obsluhovat události, které se s nimi dějí - např stlačení myši, přetažení myši nad objekt bez změna textu v objektu. K těmto událostem je potom třeba přiřadit kód, který bude specifikovat, co se při dané události má stát. Nejčastěji definujeme kód ke stlačení tlačítka. To je pro Delphi událost. V Object Inspectoru máme nahoře dvě záložky. Properties a Events. Podívejte se do obou u všech komponent, které využíváte. Jenom proto, abyste věděli co tam tak asi může být.
Properties (vlastnosti -můj překlad) jsou hodnoty, které si můžeme u dané komponenty definovat. Například je to vlastnost Visible. Ta určuje, zda uživatel komponentu na formuláři vůbec uvidí. Je to hodnota tpu boolean .
Events (události) - zde je jenom seznam událostí.
Co vlastně "programujeme"?
To, co píšeme jako programový kód v Delphi je to , jak se budou jednotlivé události obsluhovat. Tedy, kdybychom do události OnClick u komponenty Button napsali mezi begin a end slovo
Close;
, pak při kliknutí na toto talčítko dojde k ukončení aplikace.
Co vlastně lze v Delphi naprogramovat?
V Delphi jsou naprogramované například Delphi. Vážně. Beze srandy. Nejdřív udělali jenom kus a pomocí toho kusu dodělávali ten zbytek. Můžete vytvářet aplikace, které vypadají tak profesionálně, jako ty, které používáte. Zkuste si třeba naprogramovat program, který by uměl převádět rodné číslo na datum naropzení a ještě udal pohlaví. Přidejte k tomu obrázek. Že nevíte, jak to naprogramovat? Máte svoji hlavu a máte help. Nic víc nepotřebujete!
:= přiřazovací příkaz. Používá se, pokud chceme do proměnné vložit nějakou hodnotu
Př.
var a,b:integer; {vytvoří celočíselné proměnné a ,b}
begin {začátek programu}
a:=29; {do proměnné a vloží hodnotu 29}
a:=30; {do proměnné a vloží hodnotu 30 a tím přepíše původní obsah}
b:=a; {do proměnné b vloží hodnotu a (30)}
b:=b+1; {do proměnné b vloží hodnotu b zvětšenou o 1}
{hodnota b je tedy nyní 31}
end.
{konec programu}
var příkaz pro "deklaraci" proměnných. Tím, že je deklaruje,
vytvoří pro tyto proměnné v paměti místo a zároveň "řekne" programu, které
identifikátory reprezentují dané proměnné
SYNTAX
var identifikátor1,identifikátor2:typ proměnné;
kde:
var klíčové slovo
identifikátor1 název proměnné
identifikátor2 nepovinný. název 2. a dalších proměnných. Od sebe jsou identifikátory odděleny čárkou
typ proměnné viz dále For - to cyklus
Jedná se o další z velké množiny cyklů (jsou tři), které Delphi znají. Ty
další jsou
Je to můj nejoblíbenější cyklus, ale je naprosto zcestné používat ho, kdekoli to jen jde.
Umožňuje přesně (pomocí celého čísla, nebo proměnné) stanovit, kolikrát proběhne. Také není třeba používat žádná počítadle.
Myslím, že nejlepší bude uvést příklad:
procedure TForm1.Button1Click(Sender: Tobject);
{program bude pocitat x-tou mocninu yadaneho cisla}
var i,vysledek,cislo,x: integer;
begin
cislo:=StrToInt(Edit1.Text);
x:=StrToInt(Edit2.Text);
vysledek:=1;
for i to x do
vysledek:=vysledek*cislo;
Label1.Caption:=IntToStr(vysledek);
end;
Typy proměnných
typy promněnných jsou zvláštní identifikátory, které jsou buď definované tvůrci jazyka Object Pascal, který Delphi využívají, nebo je můžeme definovat my, jako programátoři.
Definováním vlastních typů se zatím zabývat nebudu.
Zde je přehled některých používaných typů tak, jak jsou předdefinovány
real reálné číslo
string řetězec znaků (prvků typu char) tento řetězec je možné si představit jako jednorozměnrné pole, kde jednotlivé znaky jsou seřazeny a očíslovány. Každému znaku řetězce proto náleží číslo. na to je potom možné se odkazovat. mějme například řetězec
retezec='muj retez'
potom
retezec[3]='j' retezec[6]='e'
nesmíme přitom zapomínat, že počáteční a koncové apostrofy se do řetězce nezapočítávají, zatímco mezery ANO!!!!!!!.
Operace s retezci:
Převádění řetězů- viz funkce pro převádění typů
Sčítání řetězců:
a,b,c:string cislo:integer a='ahoj' b='sasku' c='pocmaranej' cislo=56
| Vzorec | Výsledek |
a+b |
ahojsasku |
| a+' '+b | ahoj sasku |
| a+' '+b+' '+c | ahoj sasku pocmaranej |
| a+cislo | !!!!!!!!!!!!CHYBA!!!!!!! -ruzne typy!!!!! |
| a+IntToStr(cislo) | ahoj56 |
Některé funkce pro práci s řetězci:
Length - vrací délku řetězce
použití:
a:string
b:integer
a:='ahoj';
b:=length(a);
{b=4}
char jeden znak - je ordinálního typu, to znamená, že můžeme určovat pořadí hodnot. To znamená např., že:
A>B
Znak je v paměti reprezentován jako číslo. Technicky je to číslo typu integer o velikosti 0-256, ke kterému ovšem počítač přistupuje jako ke znaku.
Je možné potom převádět číslo na znak a opačně pomocí fcí chr a ord
boolean logická proměnná. Obsahuje buď hodnotu True nebo False.
Funkce pro převádění typů se používají tehdy, když potřebujeme např proměnnou typu integer převést na proměnnou typu string. Základní funkce:
StrToInt používá se pro převod řetězce na celé číslo
syntax:
StrToInt(promnena1:string):integer;
Použití:
var retezec:string;
cislo:integer;
begin
retezec:='56';{do promnene retezec se vlozi cislo 56, ale jako
retezec}
cislo:=StrToInt(retezec); {do promnene cislo se vlozi obsah
promnenne retezec prevedeny na cele cislo. Promnenna cislo tedy
obsahuje hodnotu 56}
end.
Syntax:
IntToStr(promnenna1:integer):string;
Použití:
var retezec:string;
cislo:integer;
begin
cislo:=56; {do promnenne cislo se vlozi hodnota 56}
retezec:=IntToStr(cislo); {retezec='56'}
end.
Syntax:
Použití:
StrToFloat
Syntax:
Použití:
Dvojice příkazů begin a a posloupnost příkazů mezi nimi vytváří "blok". Blok je možné použít téměř všude, kde je možné použít jeden příkaz. Zvláštní typ bloku je potom program, kde je ta zvláštnost, že po slovu end nenásleduje středník, ale tečka. Tato tečka signalizuje, že je to poslední end a dále už nic není.
Komponenta Edit je základní možností vstupu nějakých údajů od uživatele do programu (nedatabázového, ale to až o hodně později). Na obrazovce se reprezentuje jako obdélníkové okénko, do kterého lze vpisovat údaje.
Klíčové vlastnosti
Text:string Text je základní vlastností. Komponenty se většinou využívá pro vstup dat od uživatele.
Visible:boolean
Komponenta Button se využívá, pokud chceme, aby uživatel spustil nějakou akci. Nejspíše to bude spuštění výpočtu, opuštění programu, nebo něco podobného.
Klíčové vlastnosti
Caption:string Caption je nápis, který se objeví na grafickém znázornění tlačítka
Enabled:boolean Enabled je vlastnost, která určuje, zda bude tlačítko možno používat, či nikoli. To se potom projeví i na grafické podobě tlačítka
Klíčové události (events)
OnClick je událost, ke které dojde, jestliže uživatel "klikne" myší na tlačítku
Příklad obsluhy události: tlačítko při stisknutí ukončí program:
procedure TForm1.Button1Click(Sender: TObject); begin Close; end;
Konstrukce if-then-else se používá v Pascalu pro vyjádření české věty. Kdyby-tak-jinak.
Kdyby a bylo větší než b tak udělej krok A, jinak udělej krok B se zapíše jako:
if a>b then krokA else krokB;
Základní syntax příkazu je tedy následující:
If (logický výraz) then (příkaz) else (příkaz);
Program tedy pracuje následnovně:
Pokud je logický výraz vyhodnocen jako pravdivý, provede se příkaz za slovem then. Pokud je naopak vzhodnocen jako nepravdivý, provede se příkaz, následující za klíčovým slovem else.
Příkazy (oba, nebo jen jeden) mohou být nahrazeny složenými příkazy, ohraničenými begin a end. POZOR! Před slovem else nesmí být středník.!
Př.
If a>b then Edit1.Text:=' a je větší' else Edit1.Text:='b je menší nebo rovno a';
Program tento řádek vyhodnotí tak, že porovná a a b. Pokud je a větší,
vypíše , že a je větší, ale pokud není, vypíše, že b je větší nebo rovno a.
Pozor na to, že opakem a>b není b>a, ale b>=a!!
Logické výrazy jsou v Pascalu celkem obvyklé:
jsou buď jednoduché
a>b
nebo složené
(a>b) and (c=d)
povšiměte si, že oba jednoduché výrazy jsou v závorkách.
Je zásadní rozdíl mezi := a =. ':=' je přiřazovací příkaz,
zatímco '=' je znak rovnosti
Příklady:
a>b
Tak, co je to cyklus. Cyklus je část programu, která se provádí,
dokud je splněn nějaký logický výraz. Je
tedy možné, aby se něco opakovalo několikrát. While - do cyklus nemá vlastní
způsob, jak měnit hodnoty v tomto logickém výrazu a tak je nutné je měnit v těle
tohoto příkazu. Výhodou (někdy nevýhodou, ale to zjistíte až později) je, že se
logický výraz testuje na správnost ještě před prvním průchodem cyklu a pokud
není True, cyklus je přeskočen.
While - do můžeme volně přeložit jako DOKUD platí (logický výraz)
TAK DĚLEJ
syntax je tedy: Příkladem by mohlo být třeba vypisování čísel od 1 do 10 do
řetězce. Program předpokládá jeden Label pro výstup a jeden Button ke
spuštění Poznámka: U každého cyklu si musíte před spuštěním programu
ujasnit, co cyklus dělá a zda jeho formulace nepovede k tzv. "nekonečnému
cyklu", což je cyklus, který bude splňovat podmínku logického výrazu vždy.
Překladač tuto chybu většinou není schopen odhalit a dojde k "zatuhnutí"
počítače. Pokud se vám něco takového stane, zkuste v menu RUN v Delphi zvoli
Program Reset.
Příklad nekonečného cyklu: Repeat - until cyklus je cyklus, který se od while -
do cyklu odlišuje především tím, že proběhne minimálně jednou. Vyplývá to z
toho, že slovo repeat je na začátku, zatímco slovo until a logický výraz je
na konci.
Př:
{program pro pricitani peti do hodnoty, ktera tesne prevysuje
zadane cislo, ale minimalne5}
Základní struktura Pascalovského programu
výraz
význam
'='
rovno
'>'
je větší, než
'<'
je menší, něž
'>='
je větší nebo rovno, než
'<='
je menší nebo rovno, než
'<>'
není rovno
and
a zároveň
or
nebo
not
ne (negace)
a je větší, než b
a>=b
a je větší nebo rovno b
(a>b) and (c<d)
a je větší než b a zároveň je c menší, něž
d
(a<>0) or (a<>b)
a není nula nebo a není rovno b (výraz je
pravdivý pouze, pokud b=0)
Edit1.Text<>'ahoj'
Edit1.Text neobsahuje retezec
'ahoj'
Matematické operátory
DELPHI (pascal)
matematika
'+'
plus
'-'
minus
'/'
děleno
'*'
krát
25.5
25,5 -desetinná tečka!
div
celočíselné dělení
mod
zbytek po celočíselném
dělení
Sqrt()
odmocnina (číslo nebo proměnnou napíšeme do
závorek)
Abs()
Absolutní
hodnota Příklady:
10 mod 3=3
10/3=3.333333
10 mod 3= 1
Sqrt(4)=2
Abs(-5)=5
10+3=13
10-3=7
10*3=30
While {logicky vyraz} do
{prikaz}
procedure TForm1.Button1Click(Sender: Tobject);
var cislo:integer;
s:string;
begin
cislo:=1;
while cislo<=10 do
begin
s:=s+IntToStr(cislo);
cislo:=cislo+1;
end;
Label1.Caption:=s;
end;
var a,b:integer;
begin
a:=5;
while a>5 do
b:=b+1;
end;
Repeat - until
cyklus
procedure TForm1.Button1Click(Sender: Tobject);
var a,b:integer ;
begin
b:=StrToInt(Edit1.Text);
repeat
a:=a+5;
until a<=b;
end;
Comming soon
Příklady z programování v Delphi
Tady budou příklady, které mě napadnou. Pokud máte návrh na příklad, který by zde měl být, napište mi.
Předpokládám, že máme vytvořeny tři Edity a jeden Button. Edit1 a Edit2 jsou vstupy dvou čísel a Button1 obhospodařuje výpočet. Tzn. stlačením Buttonu1 dosáhneme toho, že v Editu3 se nám vypíše součet.
procedure TForm1.Button1Click(Sender: TObject);
var cislo1,cislo2,cislo3:integer {cislo 1 a 2 jsou vstupy, do cisla 3
potom budeme ukladat vysledek vypoctu}
begin
cislo1:=StrToInt(Edit1.Text); {Edit1.text prevedeme na cislo a
vlozime do promenne cislo1}
cislo2:=StrToInt(Edit2.Text); {To same pro Edit2}
cislo3:=cislo1+cislo2; {toto je vlastni soucet. Vsimnete si
toho, ze hodnota se uklada zprava doleva}
Edit3.Text:=IntToStr(cislo3); {cislo3 prevedeme na string a
vlozime do Edit3.Text}
end.
Doplňující úlohy:
Napište programy které:
1) vypočítají součin, rozdíl a celočíselný podíl dvou číse
Program předpokládá existenci tří komponent Edit a jedné Button. První dva Edity slouží jako vstup a poslední Edit jako výstup. Tlačítko potom slouží ke spuštění výpočtu.
procedure TForm1.Button1Click(Sender: Tobject);
var cislo1,cislo2:integer; {promenne pro vstupni cisla}
vysledek:real; {promenna pro vystup musi byt typu real, protoze
neni jiste, ze prumer bude cele cislo}
begin
cislo1:=StrToInt(Edit1.Text); {prvni edit prevedeme na cislo a
ulozime do promenne cislo1}
cislo2:=StrToInt(Edit2.Text); {to same pro edit2 a cislo2}
vysledek:=(cislo1+cislo2)/2; {provedeme vypocet}
Edit3.Text:=IntToStr(vysledek); {prevedeme vysledek na retezec a
vypiseme na Edit3}
end.
Napište programy, které:
1)Spočítají, která ze dvou úseček je delší. Vstupem budou čtyři body A,B,C,D - respektive jejich x-ové a y-ové souřadnice. Výstupem potom bude konstatování, která z úseček je delší nebo, že jsou obě stejně dlouhé.