Magazyn NoName
Numer 6 (05/00)
http://www.noname.zum.pl

Menu:
  • Spis treści
  • Następny artykuł
  • Poprzedni artykuł
  • Prenumerata Magazynu NoName
    Więcej informacji...

    Delphi 5 - kurs programowania

    Witam ponownie, jak Wam idzie pisanie programów? Zapraszam na kolejną część kursów programowania w Delphi. Najpierw nieco Object Pascala, a później unowocześnianie programu "Kółko i Krzyżyk".

    Gdy zapiszecie swój program na dysku to zapewne zwrócicie uwagę na sporą liczbę plików powstałych wraz z programem. Oczywiście nie musisz dawać kumplom tych wszystkich plików - wystarczy tylko ten z rozszerzeniem *.exe.

    Jedna uwaga: Gdy dasz program koledze, który nie ma zainstalowanego Delphi, to program się nie uruchomi. Dzieje się tak dlatego, że twój kumpel nie posiada pliku vcl50.bpl. Oczywiście możesz dołączać ten plik do każdego programu, lecz z racji jego rozmiaru zalecane jest zrobić coś takiego:

    1. Z menu Project wybierz Options.
    2. Wybierz zakładkę Packages
    3. Zaznacz opcje Bulid with runtime packages
    4. Naciśnij OK i z menu Project wybierz Bulid

    Okno Options zawiera inne pożyteczne zakładki takie jak:

    • application - dzięki tej zakładce możemy wybrać ikonę i wpisać tytuł naszego pliku wykonywalnego.
    • version info - po zaznaczeniu opcji Include version information in project możesz sprawić iż do twojego pliku wykonywalnego w zakładce Właściwości pojawi się okno o wersji produktu. Możesz wpisać w nim podstawowe dane jak: Nazwa firmy, wersja, komentarz itd. Po zaznaczeniu opcji Auto-Increment bulid number wersja pliku będzie się zwiększała o jedną tysięczną przy każdym budowaniu (Bulid) programu.

    Teraz pora aby przejść do dalszej nauki Object Pascala.

    Operatory

    Spójrz na poniższy przykład:

    if (x>20) and (y>20) then
    {kod programu}

    Operatorami w powyższym przykładzie są: ">" i "and". Operatory to inaczej przypisanie, porównywanie jakiś wartości.

    Operator

    Opis

     := Przypisanie zmiennej jakiś wartości, np: x:=10
    = Znak równości, np. if x=10 then begin Gdybyś w tym przykładzie użył operatora przypisania to program nie skompilował by się i wygenerował by wyjątek ponieważ nie przypisujemy x wartości 10 lecz chcemy jedynie sprawdzić to wyrażeniem if
    <>     >     <     <=       >= Oznacza to kolejno: różny od (np. if  x<>10), większy niż, mniejszy niż, mniejszy równy niż, większy równy niż.
    and Od angielskiego: i Sprawdza warunek zawarty przed tym słowem jak i po tym słowie.
    or Od angielskiego: lub. if (x=10) or (x=20) then
    not Jeżeli nie. if not prawda then

    Instrukcja goto

    Instrukcja ta oznacza tyle co: idź do. Umożliwia ona skok do umieszczonej w kodzie etykiety poprzedzonej słówkiem Label, ale nie jest to komponent label.

    var
    label powtarzanie;

    begin
    powtarzanie;
    {kod instrukcji goto}
    {dalszy kod programu}
    if x<69 then
    goto powtarzanie;
    end;

    Jeżeli nie zostanie spełniony warunek, w tym wypadku, jeżeli x nie jest większe od 69 to następuje skok do słowa powtarzanie i tym samym wykonanie instrukcji po słowie powtarzanie.

     Instrukcja case

    Spójrz na poniższy przykład:

    case Ilosc_paliwa of
     
    0: paliwo:=0;
     10: paliwo:=1;
     50: paliwo:=3;
    end;

    Jeżeli Ilosc_paliwa przyjmie wartość 0, to wykonana zostanie funkcja paliwo:=0; Uwaga! Wynik musi być typu Integer, Byte itd., nie może być natomiast typu przecinkowego lub typu Srting. Nie możesz zapisać:

    case combobox1.itemindex of
     
    0: memo.lines.add('To nie przejdzie ponieważ jest to wartość typu String');

    Continue i Break

    Te dwie komendy używane są wraz z pętlami. Komenda Continue powoduje natychmiastowy skok do punktu stopu tj. do końca procedury.

    if speedbutton1.down=true then continue
    {tutaj wykonywany zostaje kod po komendzie contiunue}

    Komenda Break powoduje całkowite zakończenie działania pętli:

    if done=true then begin
    {kod}
    end else
    break;


    ____

    Na zakończenie tego rozdziału zrób prosty program, który będzie dodawał, odejmował i mnożył:

    1. Umieść na formularzu 3 komponenty Edit
    2. Umieść na formularzu przycisk i zmień jego właściwość Caption na OK
    3. Umieść na formularzu komponent RadioGroup; naciśnij w Inspektorze Obiektów właściwość Items i w oknie wpisz jeden pod drugiem: dodawanie, odejmowanie, mnożenie.
    4. Właściwosć Itemindex komponentu RadioGroup ustaw na 1.
    5. Uzupełnij procedure Button1Click następująco:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    case RadioGroup1.itemindex of
    0: edit3.text:=
    inttostr(strtoint(edit1.text)+(strtoint(edit2.text)));
    1: edit3.text:=
    inttostr(strtoint(edit1.text)-(strtoint(edit2.text)));
    2: edit3.text:=
    inttostr(strtoint(edit1.text)*(strtoint(edit2.text)));
    end;
    end; 

    Jeżeli program nie działa prawidłowo porównaj swój kod z moim.
    Teraz możecie już przejść do następnego rozdziału, w którym to zajmiemy się udoskonalaniem programu "Kółko i Krzyżyk"


    Ostatnim razem stworzyłeś program "Kółko i Krzyżyk". Teraz dodamy do niego grafikę muzykę.

    Potrzebne nam będą 3 rysunki: jeden z krzyżykiem, z kółkiem i pusty.

    1. Do stworzenia rysunków potrzebny nam będzie jakiś program graficzny (nam całkowicie wystarczy Paint)
    2. Rozmiary rysunków muszą być zbliżone do rozmiaru przycisków w twoim programie; rysunki muszą mieć także szare tło (takie jak kolor przycisków).
    3. Trzeci przycisk musi mieć jedynie szare tło; gdy stworzyłeś już przyciski to umieść je w katalogu z programem.
    4. Umieść przycisk, który będzie służył jako rozpoczęcie nowej tury; treść jego procedury zmodyfikuj następująco:
      procedure TMain1stGame.Button10Click(Sender: TObject);
      var
      Bitmap5:TBitmap;

      begin
      bitmap5:=TBitmap.create;
      bitmap5.LoadFromFile('nic.bmp');
      button1.glyph:=bitmap5;
      button2.glyph:=bitmap5;
      button3.glyph:=bitmap5;
      button4.glyph:=bitmap5;
      button5.glyph:=bitmap5;
      button6.glyph:=bitmap5;
      button7.glyph:=bitmap5;
      button8.glyph:=bitmap5;
      button9.glyph:=bitmap5;
      speedb.down:=true;
      speedb2.down:=false;
      end;
      Wyjaśnienie: Na samym początku deklarowana jest zmienna Bitmap5. Później następuje stworzenie bitmapy przy pomocy polecenia bitmap5:=TBitmap.create; Następnie następuje wczytanie uprzednio stworzonej bitmapy: bitmap5.loadfromfile('nic.bmp'); Kolejną funkcją jest przypisanie każdemu z przycisków bitmapę nic.bmp.
    5. Teraz musisz zastąpić starą procedure nową:
      procedure TMain1stGame.Button1Click(Sender: TObject);
      var
      Bitmap:TBitmap;
      Bitmap2:TBitmap;
      begin
      bitmap:=TBitmap.Create;
      bitmap.LoadFromfile('krzyzyk.bmp');
      bitmap2:=TBitmap.Create;
      bitmap2.LoadFromFile('kolko.bmp');
      if speedb.down then
      button1.glyph:=bitmap;
      if speedb2.down then
      button1.glyph:=bitmap2;

      end;
    6. Skopiuj ten kod i wstaw do pozostałych przycisków z tą różnicą, że w przedostatniej i czwartej od końca linii zastąp button1 na nazwę przycisku.

    Teraz możesz uruchomić program - działa! Fajnie by było gdyby program posiadał funkcje odtwarzania muzyki. Zróbmy więc to!

    1. Umieść komponent MediaPlayer (na palecie System ); zmień jego właściwość visible na False; nie ma potrzeby aby był widoczny.
    2. Umieść komponent CheckBox; zmień jego właściwość Caption na Włącz muzykę, a właściwość Name na muzyka.
    3. Kliknij podwójnie na komponent i uzupełnij procedure:
      if muzyka.checked=true then begin
      MediaPlayer.filename:='muzyka.mid';
      MediaPlayer.open;
      MediaPlayer.play;
      end else
      MediaPlayer.stop;

    Teraz umieść w katalogu z programem plik muzyczny i zmień jego nazwę na muzyka.mid.

    To już wszystko tym razem. W kolejnej części zajmiemy się dokończeniem programu Kółko i Krzyżyk i zaczniemy całkiem nowy program. Zapraszam następnym razem!

    Nie wahajcie się pisać: programowanie@poczta.onet.pl

    Adam Boduch
    e-mail: programowanie@poczta.onet.pl



    Początek artykułu



    Magazyn NoName

    Copyright (c) 1999 - 2000 NoName