Delphi


Delphi. Trzecia RP

Na początek trzeciej części kursu małe ćwiczenie. Napisz program, który po wciśnięciu przycisku będzie ukrywał jakiś komponent i zmieniał napis na przycisku np. "Komponent ukryty". A gdy naciśnie się przycisk jeszcze raz, to komponent pokaże się i napis na przycisku zmieni się na "Komponent widoczny".

Jeżeli masz jakiś problem, to pokombinuj chwilę, zerknij do poprzednich części kursu lub napisz do mnie.

A teraz część właściwa kursu...

Ta część będzie nieco obszerna, ale nauczysz się PODSTAWOWYCH operacji na plikach. Jednak, żeby to zrobić, musisz nauczyć się deklarować zmienne i stałe. Więc zaczynamy:

I Deklaracje

1. Deklarowanie zmiennych

Czym są zmienne? Zmienne to jakby pewne obszary w pamięci komputera przechowujące pewne informacje. Jak sama nazwa wskazuje, te informacje mogą się zmieniać. Aby można było w Delphi używać jakiejś zmiennej, trzeba ją najpierw zadeklarować. Zmienne deklaruje się za pomocą słowa VAR. Jest wiele typów zmiennych. Nie musisz ich wszystkich pamiętać (bo pamięta się te najczęściej używane), jednak powinieneś mieć te typy wraz z ich opisami gdzieś szybko dostępne.

A więc teraz podam opisy typów zmiennych w Delphi:

Rozróżniamy jakby 2 typy zmiennych. Zmienne lokalne i zmienne globalne. Zmienne lokalne są widoczne tylko w obrębie danej procedury lub funkcji np:

procedure fajnaProcedura;
var
    zmiennaLokalna: integer;
begin
    //
end;

W tym wypadku zmienna zmiennaLokalna będzie widoczna tylko w tej procedurze. Jeżeli np. mielibyśmy dwie procedury:

procedure fajnaProcedura;
var
    zmiennaLokalna: integer;
begin
    //
end;

procedure drugaProcka;
begin
    zmiennaLokalna:=20;
end;

- wtedy pojawi się błąd: "Undeclared identifier: zmiennaLokalna".

Teraz słów kilka o zmiennych globalnych...

Zmienne globalne są widoczne w całym programie. Deklaruje się je poza wszystkimi procedurami np:

var
Form1: TForm;

Zauważ, że taka deklaracja występuje zawsze, gdy w projekcie mamy jakąś formę. Tu właśnie deklaruje się zmienne globalne. Są one widoczne wszędzie w programie. Pewnie zastanawiasz się, co stanie się, gdy jakaś zmienna globalna ma taką samą nazwę, jak zmienna lokalna? Ano nic takiego ciekawego. :) Po prostu pierszeństwo ma zmienna globalna.

2. Deklarowanie stałych

Stała to jakiś obszar w pamięci komputera, który też przechowuje pewne informacje. W stałych jako takich nie ma żadnych typów, ale przechowywana informacja nie może ulegać zmianie. Stałe również musimy zadeklarować przed ich użyciem. Deklarujemy je za pomocą słowa CONST. Również dzielimy je na stałe lokalne i globalne. Zasada jest taka sama, jak przy zmiennych.

Kiedyś się zastanawiałem po co używać stałych... Może też to robisz w tym momencie... Więc stałe czasem naprawdę ułatwiają życie. Powiedzmy, że na formie masz jakiegoś labela i musisz zmieniać mu właściwość caption, gdy coś się stanie... Możesz to zrobić tak:

const info1 = 'To jest informacja pierwsza. Ona się teraz własnie powinna wyświetlić, więc to robi';

info2 = 'A teraz powinna się wyświetlić informacja druga i ona też się wyświetla';

I teraz powiedzmy, że w jakiejś procedurze musisz zmienić napis na labelu:

label1.Caption:=info1;
.
.
.
label1.Caption:=info2;
.
.
.
label1.Caption:=info1;
.
.
.
label1.Caption:=info2;
- itd...

A teraz zrób to bez stałych. :) Trochę się napiszesz :) A jeszcze powiedzmy, że będziesz chciał jakoś zmienić treść któregoś z tych napisów...

I gdyby nie stałe, musiałbyś znaleźć i pozmieniać treści wszystkich tych napisów. A dzięki zmiennym, wystarczy, że zmienisz tylko treść zmiennej - oczywiście mówię o zmienianiu w trakcie pisania programu.

To tyle, co do zmiennych i stałych.

II Pliki tekstowe

1. Operacje na plikach tekstowych bez użycia komponentów

Ten, kto wie, jak się operowało na plikach w Pascalu, będzie miał łatwiej. Więc główną myślą jest: "Najpierw trzeba skojarzyć plik ze specjaną zmienną (no nie zawsze, ale o tym potem), a potem można robić z nim, co się tylko chce".

Zmienna skojarzona z plikiem tekstowym musi być typem: TextFile, np.:

var
plik: TextFile;

Mamy już zadeklarowaną zmienną. Teraz należy ją skojarzyć z plikiem, na którym chcemy przeprowadzać operacje:

assignFile(plik, 'C:\plik.txt');

Składnia assignFile:

(zmienna plikowa, plik na którym przeprowadzamy operacje)

Dobrze. Odczytajmy teraz pierwszą linijkę z pliku tekstowego:

procedure czytaj;
var
    plik: textFile;
    linia: string;

begin
    assignFile(plik, 'C:\plik.txt');
    reset(plik);
    readln(plik, linia);
    CloseFile(plik);
end;

Teraz objaśnienie:

reset(zmienna_plikowa) - otwiera plik do odczytu,
Readln(zmienna_plikowa, zmienna_do_ktorej_odczytujemy) - odczytuje linię / znak z pliku do zmiennej czyli, jeżeli np. mamy plik tekstowy o postaci:

To jest pierwsza linijka pliku tekstowego...
To jest druga linijka...
To jest trzecia....

- wtedy po wykonaniu powyższej procedury zmienna LINIA będzie zawierała tekst: To jest pierwsza linijka pliku tekstowego.

Jeszcze jedna ważna rzecz...

... różnica między read, a ReadLn

readln, po odczytaniu linijki jakby załamuje wiersz, czyli potem możemy odczytać kolejną linijkę, np.:

readln(plik, linia1);
readln(plik, linia2);

Natomiast read nie załamuje wiersza.

BARDZO WAŻNE JEST TO, ŻE PO WYKONANIU JAKIEJŚ OPERACJI NA PLIKU, NALEŻY GO ZAMKNĄĆ:

CloseFile(zmienna_plikowa);

Teraz zapis do pliku:

procedure zapis;
var
    plik: TextFile;

begin
    assignFile(plik, 'C:\plik.txt');
    rewrite(plik);
    writeln(plik, 'To jest jakaś linia w pliku o nazwie plik.txt');
    CloseFile(plik);
end;

Tutaj instrukcja REWRITE otwiera plik do zapisu. Jeżeli coś jest już w tym pliku, to wtedy zostaje to usuwane i zapisywane zostają informacje podane przez write / writeln. Jeżeli plik nie istnieje, to wtedy zostaje on tworzony i zapisywane są w nim informacje.

Jeżeli natomiast chcemy coś dopisać do pliku na jego końcu wystarczy użyć instrukcji APPEND zamiast REWRITE, np:

procedure zapis;
var
    plik: TextFile;

begin
    assignFile(plik, 'C:\plik.txt');
    append(plik); writeln(plik, 'Ta linia została dopisana do pliku');
    CloseFile(plik);
end;

2. Operacje na plikach tekstowych z użyciem komponentów

Komponenty zawsze ułatwiają życie. Również w pracy z plikami.

  • Połóż na formę komponent MEMO z karty STANDART i komponent Button
  • Zmień właściwość NAME komponentu memo na: MEMO
  • W zdarzeniu onClick Buttona wpisz taki kod:

memo.Lines.SaveToFile('C:plik.txt');

  • Uruchom program.

Teraz wpisz coś do komponentu memo (to jest komponent, do którego możemy wpisywać jakieś teksty. Może posłużyć w napisaniu np. prostego edytora tekstu).

Wciśnij teraz buttona i okaże się, że zawartość memo została zapisana do pliku C:\plik.txt. To właśnie dzięki metodzie SaveToFile.

Dzięki metodzie LoadFromFile możemy odczytać zawartość jakiegoś pliku i umieścić ją w memo(robi się to wszystko automatycznie).

To narazie tyle, jeżeli chodzi o pliki tekstowe. W następnej części pokaże jak posługiwać się innymi przydatnymi komponentami związanymi z plikami, a nawet może uda nam się napisać pierwszy większy projekt - prosty edytor tekstowy. :)

Jeżeli ktoś ma jakieś pytania, niech pisze...

Dodał: Adam​Jachocki
Dział: Delphi


 

ComputerSun.pl na FaceBooku
Polecamy lekturę:

Word 2007 PL. Pierwsza pomoc
# MAGAZYNY

Tańsze e-wydania:

e-prasa: PC World - e-wydanie

Zobacz wszystkie:
e-wydania: Internet i komputery