Strona Główna - Artykuły - Galeria - Szukaj - Dziennik Lekcyjny
Nawigacja
Portal
  Strona Główna
  Artykuły
  Galeria
  Kontakt
  Linki
  SZOK
  Szukaj

O nas
  Historia
  Kadra
  Kierunki kształcenia
  Patroni
  Polska i Litwa
  Prasa o szkole
  Projekty EFS

Dla uczniów
  Informatyka
  Konkursy
  Pedagog
  Pobierz
  Sport

Dla rodziców
  Dziennik Lekcyjny

Rekrutacja
  Kierunki kształcenia
  Nabór 2010

Różne
  WebGG

Reklama

Spacerkiem po Myśliborzu

Wirtualny Myślibórz

Matura z OPERONEM

Powiat Myśliborski

Wyższa Szkoła Integracji Europejskiej

Gimnazjum im. Dariusa i Girenasa w Kownie

Angielski
Wpisz wyrażenie polskie lub angielskie:

Niemiecki
Wpisz wyrażenie polskie lub niemieckie:

Delphi - cz 3

Delphi, cz. 3


Czy aby nie za szybko tłumaczę? Czy kurs jest dla Was zrozumiały? Jeżeli macie jakieś uwagi lub pytania to piszcie - postaram się je uwzględnić podczas pisania kolejnej części kursu.

Dzisiaj kolejne pętle:


Pętla "repeat"


Pętla ta sprawdza warunek zakończenia po wykonaniu pętli. Pętla ta jest często używana w Turbo Pascalu - w Delphi rzadziej. Na początek przykładzik, a później objaśnienie:


var

I : Integer;

begin

I := 10;

Memo1.Clear; // wyczysc zawartosc komponentu Memo

repeat

Sleep(500); // czekaj pol sekundy

Memo1.Lines.Add(' Pozostalo sekund do zakończenia programu: ' + IntToStr(i)); // dodaj ciag znakow

Dec(i); // zmniejsz wartosc I o jeden

until I := 0;  // warunek zakoczenia pętli: Jeżeli wartosc I wyniesie 0 to zakoncz dzialanie pętli....

Sleep(1000);  // ... odczekaj sekunde

Close;  // zamknij program

end;


 


Warunek zakończenia pętli następuje po słowie "until". W tym wypadku, jeżeli zmienna I osiągnie wartość 0 to zakończ działanie pętli. Funkcja "Dec" została już wcześniej omówiona ( zmniejsza zmienna "i" o jeden ). Funkcja "Clear" komponentu Memo czyści jego zawartosc.

Teraz cos trudniejszego z pętla "repeat" - wczytanie pliku tekstowego:

Umieść komponent "Button" na formularzu i kliknij na niego dwukrotnie ( zakładam, ze masz już na formie umieszczony komponent Memo? ). Wpisz taki kod po przeniesieniu do edytora kodu:


var

Plik : TextFile;  // nowa zmienna

S : String;

begin

 // otworz plik

AssignFile(Plik, 'C:\Moje dokumenty\plik.txt');

Reset(Plik);


    repeat // petla

Readln(Plik, S); // odczytaj plik

Memo1.Lines.Add(S); // dodaj linie do komponentu Memo

until S = ''; // jeżeli napotkasz na pusta linie zakończ działanie pętli

CloseFile(Plik); // zamknij plik


Taka metodę stosowali programiści Turbo Pascala. Pojawia się tutaj nowa zmienna, która umożliwia operacje na plikach. Na razie nie będziemy o tym mówić.

Na samym początku ze zmienna "Plik" zostaje skojarzony plik tekstowy ( "AssignFile" ). Później następuje jego otwarcie "Reset". Następnie działa pętla, która ma za zadanie wczytywać wszystkie linie pliku aż do miejsca, w którym napotka na pusta linie ( Readln ). Wszystkie linie pliku tekstowego są zapisywane w zmiennej "S", a następnie dodawane do komponentu Memo przy pomocy funkcji "Add". Na samym końcu ( po wykonaniu pętli ) następuje zamkniecie pliku tekstowego.

Oczywiście istnieje prostsza metoda otwarcia pliku, ale zajmiemy się tym w dalszych rozdziałach ( podczas pisania edytora tekstu ).


Pętla "while"


W odróżnieniu od pętli "repeat" pętla "while" sprawdza warunek jej zakończenia przed samym rozpoczęciem działania pętli. :) No cóż, oto kolejny przykład:


var

I : Integer;

begin

I := 10;

Memo1.Clear;

while i > 0 do

begin

Sleep(500);

Memo1.Lines.Add(' Pozostalo sekund do zakończenia programu: ' + IntToStr(i));

Dec(i);

end;

Sleep(1000);

Close;


Prawda, ze ta pętla podobna jest do "repeat". Praktycznie zostały zastąpione tylko dwie linie kodu. Pętla rozpoczyna się od słowa "while"; następnie następuje warunek ( w tym wypadku, jeżeli zmienna "i" jest większa od zera ), a następnie słowo "do" i "begin", które rozpoczynają działanie pętli. "Serce" pętli jest takie samo jak w przypadku pętli "repeat". Pętla kończy swoje działanie słowem "end".


Konwersja typów


Nim zajmiemy się omawianiem tego tematu napiszemy prosty programik mający za zadanie dodawanie liczb.

1. Stwórz nowa aplikacje ( "File" -> "New Application" ).

2. Na formularzu umieść dwa komponenty typu "Edit" ( na zakladce "Additional" ).

3. Umieść komponent "Button;

4. Umieść komponent "Label";

5. Teraz kliknij dwukrotnie na komponencie "Button". Wpisz w procedurze taki tekst. Tak powinna wyglądać cala procedura:


procedure TForm1.Button1Click(Sender: Object);

var

X, Y, Z : Currency; // typy zmienno-przecinkowe

begin

X := StrToCurr(Edit1.Text); // konwersja

Y := StrToCurr(Edit2.Text); // konwersja


  Z := X + Y; // dodanie 2-och zmiennych

Label1.Caption := CurrToStr(Z); // wyswietlenie wyniku

end;


Użyłem tutaj typów zmienno-przecinkowych, dlatego, ze możliwe będzie dodawanie cyfr po przecinku. Tak jak w poprzednim rozdziale mówiłem o funkcji "IntToStr", tak teraz powiem o "StrToCurr". Obie te funkcje są konwersja dwóch typów. Zmienne X i Y są typami "Currency", a tekst w komponencie "Edit" to typ "String". Konwersji typu "String" na "Currency" dokonuje funkcja "StrToCurr". Zmienna Z jest natomiast wynikiem dodawania dwóch typów: X i Y. Następnie wynik dodawanie wyświetlany jest na etykiecie "Label". Tutaj także należy dokonać konwersji gdyż wynik jest w postaci "Currency", a na Labelu tekst musi być wyświetlany w postaci zmiennej "String". Ufff, ale namotałem :) Mam nadzieje, ze wiecie, o co chodzi. Teraz możecie sprawdzić jak program będzie działał ( F9 ). W komponencie "Edit" możecie wpisywać typy zmiennoprzecinkowe - np.: 3,5 itp. Wynik dodawania zostanie przedstawiony na etykiecie.

Istnieją inne funkcje konwertujące:


StrPas                       konwertuje zmienna "PChar" na zmienna "String"

StrPCopy                   konwertuje "String" na "PChar"

XXXtoStr                    konwertuje XXX na "String", gdzie XXX to: Curr, Date, Time

StrToXXX                    konwertuje "String" na XXX, gdzie XXX to: Curr, Date, Time;


Tak możliwe jest tez wyświetlanie aktualnej godziny i daty. NP:


ShowMessage(

'Data: ' + DateToStr(Date) + ' Czas: ' + TimeToStr(Time));


Powyższe polecenie wyświetla okienko z informacja o dacie i czasie.


Teraz chciałem napisać o czymś innym. O operatorze kropki ( . ) Tak to tez operator! Podczas pisania poprzednich programów wielokrotnie go użyliśmy. Np. jeżeli chcesz zmienić tekst wyświetlany w komponencie "Label" piszesz:


Label1.Caption := 'Nowy tekst...';


Pole "Caption" widnieje również w Inspektorze Obiektów i możesz je modyfikować w trakcie pisania programu. Podczas pracy Twojej aplikacji także możesz zmieniać WSZYSTKIE parametry, które widnieją w Inspektorze Obiektów.


Label1.Font.Color := clBlue; // zmiana koloru czcionki na niebieski.


Jeżeli nie pamiętasz wszystkich tych właściwości możesz zastosować pewna "sztuczkę" :) Napisz nazwę komponentu, a następnie postaw kropkę, odczekaj chwile, a powinieneś ujrzeć listę wszystkich możliwych do zastosowanie właściwości. Możesz także skorzystać z pomocy Delphi. Wystarczy, ze klikniesz dwukrotnie na nazwę jakiejś funkcji i naciśniesz klawisz F1, a zobaczysz pomoc na temat zadanej funkcji lub właściwości.


Rzutowanie typów


W programowaniu ważną umiejętnością jest rzutowanie typów. Nie jestem pewien czy już teraz powinienem brać ten temat, ale...

Umieść na formularzu komponent "Button" i kliknij na niego dwukrotnie - wpisz poniższy tekst:


  MessageBox(Handle, 'Hej, jak tam!',  'Okno',  MB_OK);


Funkcja "MessageBox" także wyświetla okienko ( podobnie jak funkcja "ShowMessage" ), ale daje większe możliwości w operowaniu jego wyglądem. Pierwszym parametrem tej funkcji jest tzw. UCHWYT OKNA. Jest to pojecie dość skomplikowane wiec na razie nie zawracajcie sobie tym głowy ( omówię to kiedy indziej ). Powiedzmy, ze ma być to słowo "Handle". W kolejnym parametrze tej funkcji wpisujemy tekst, który ma być wyświetlany w oknie. Kolejny to tytuł okna, czyli tekst, który pojawi się na górnym pasku. Ostatnim parametrem będą przyciski, które wyświetlane będą w okienku. W tym wypadku jest to jedynie przycisk "OK". Oprócz tego może to być jeszcze:


MB_YES  - przycisk "Tak"; MB_NO - przycisk "Nie"; MB_CANCEL  - przycisk "Anuluj"; MB_YESNOCANCEL - przyciski "Tak, Nie, Anuluj",

Możesz przyciski ze sobą łączyć - np.: MB_YES + MB_NO itp., itd.


Dobra, ale nie o tym miałem mówić. Funkcja "MessageBox" jak już mówiłem wyświetla komunikat. A teraz wpisz taka linie:


var

Info : String;

begin

Info := 'Hej jak tam!';

MessageBox(Handle, Info, 'Okno', MB_OK);


Picas kompilacji ( "Project" -> "Build" ) wystąpi błąd: "Incompatible types: 'String' and 'PCHar'". Drugi parametr, czyli tekst jest typu PChar, a nasza zmienna, jest typu "String" stad ten błąd! Dla doświadczonego programisty nie stanowi on problemu ponieważ zastosuje rzutowanie typów:


var

Info : String;

begin

Info := 'Hej jak tam!';

MessageBox(Handle, PChar(Info), 'Okno', MB_OK);


Powyższy przykład się skompiluje i będzie działał poprawnie. Inaczej mówiąc rzutowanie to "oszukanie" kompilatora. A typ "PChar". To tez typ do przechowywania tekstu, lecz funkcjonuje on na innych zasadach dzięki czemu zajmuje on mniej pamięci. O tym typie powiem kiedy indziej.


Na tym kończę ten rozdział. Od następnego zaczniemy pisać już prawdziwe aplikacje. Te 3 rozdziały były jednak niezbędne, aby poznać język jakim operuje Delphi, czyli Object Pascal. W następnym rozdziale zaczniemy pisać już edytor tekstów. Tekst ten pisany jest w edytorze stworzonym w Delphi. Nie wierzysz? Odwiedź stronę:

www.programowanie.of.pl i ściągnij edytor tekstu o nazwie "Pad". Spróbuj odczytać za jego pomocą ten tekst, a zobaczysz, ze się uda :) Ty także taki edytor napiszesz już niebawem!

Dodane przez Root dnia marzec 08 2008 00:18:41 · 0 Komentarzy · 48 Czytań · Drukuj
Komentarze
Brak komentarzy.
Dodaj komentarz
Zaloguj się, żeby móc dodawać komentarze.
Oceny
Dodawanie ocen dostępne tylko dla zalogowanych Użytkowników.

Proszę się zalogować lub zarejestrować, żeby móc dodawać oceny.

Brak ocen.
Ulubione i Startowa
Licznik
25 czerwca

KONIEC ROKU SZKOLNEGO
Ostatnie Artykuły
Powtorka z gramatyki...
Powtorka z gramatyki...
Nauka jezyka Angiels...
Delphi - cz 18
Delphi - cz 17
Delphi - cz 16
Delphi - cz 15
Delphi - cz 14
Delphi - cz 13
Delphi - cz 12
Najchętniej pobierane
Delphi 7 Personal 567
C++Builder 6 Personal 560
Kalkulator okienkowy 529
Podstawy JavaScript 403
Kalkulator Konsolowy 367
Kalkulator w C# 314
Szyfrator 306
WebBrowser 2.0 Beta 297
Screenshots 290
Renamer v1.0 by David23 262
Zegar & Kalendarz
Logowanie
Nazwa Użytkownika

Hasło

Zapamiętaj mnie



Rejestracja
Zapomniane hasło?