130 likes | 278 Views
Wykład 7. instrukcja with przykład tablicy rekordów okna dialogowe pliki - wstęp. Instrukcja wiążąca - with. dotyczy tylko zmiennych rekordowych (obiektowych). upraszcza zapis !!. opis : with lista_zmiennych_rekordowych do instrukcje. najczęściej begin . . . end.
E N D
Wykład 7 • instrukcja with • przykład tablicy rekordów • okna dialogowe • pliki - wstęp
Instrukcja wiążąca - with • dotyczy tylko zmiennych rekordowych (obiektowych) • upraszcza zapis !! • opis: withlista_zmiennych_rekordowych doinstrukcje najczęściej begin . . . end można tu używać nazw pól bez specyfikowania zmiennej rekordowej przykład: student.nazw :=’Kowalski’; student.imie[1] := ’Jan’; student.data_ur.rok := 1988; student.stypendium := 420.00; with student do begin nazw :=’Kowalski’; imie[1] := ’Jan’; data_ur.rok := 1988; stypendium := 420,00; end;
To samo dotyczy składowych (właściwości , metody) obiektów przykład: StringGrid1.Rows[1].CommaText := ' , "12,5", -8, "100,25", +4'; StringGrid1.Rows[2].CommaText := ' , "21,21", -10, 321, 4, "2,5", "‑56,99" '; StringGrid1.Cols[0].CommaText := ', suma, średnia, większe'; for k := 1 to10do StringGrid1.Cells[k, 0] := IntToStr(k); with StringGrid1 do begin Rows[1].CommaText := ' , "12,5", -8, "100,25", +4'; Rows[2].CommaText := ' , "21,21", -10, 321, 4, "2,5", "‑56,99" '; Cols[0].CommaText := ', suma, średnia, większe'; for k := 1 to10do Cells[k, 0] := IntToStr(k); end; związanie z StringGrid1
Przykład - w polu StringGrid dane o osobach - wprowadzamy do wektora rekordów - porządkujemy - wynik w drugim StringGrid
Kod programu: Deklaracje globalne (dla wszystkich procedur): const max = 10; // ograniczenie liczności danych type stud = record nazw,imie: string[10]; styp: real; end; var lba_danych: 1..max; x: array[1..max] of stud;
Operacje początkowe: procedure TForm1.FormCreate(Sender: TObject); var k: integer; begin with StringGrid1 do begin Options := Options + [goEditing]; ColCount := 4; RowCount := max; Rows[0].CommaText := 'L.p.," nazwisko"," imię",stypendium'; Rows[1].CommaText := '1,Nowak,Jan,132,00'; Rows[2].CommaText := '2,Bęben,Teresa,399,50'; Rows[3].CommaText := '3,Zając,Mateusz,212,00'; Rows[4].CommaText := '4,Kowalski,Adam,502,10'; end; lba_danych:=4; with StringGrid2 do begin ColCount := 4; RowCount := max; Rows[0].CommaText := 'L.p.," nazwisko"," imię",stypendium'; for k := 1 to max - 1 do Cells[0, k] := IntToStr(k); end; end;
Kopiowanie do wektora rekordów: procedure TForm1.zapamietajClick(Sender: TObject); var k, m: 1.. max; begin for k := 1 to max - 1 do with x[k],StringGrid1 do begin nazw := Cells[1, k]; if nazw = '' then break; imie := Cells[2, k]; styp := strtofloat(Cells[3, k]); lba_danych := k; end; end;
Porządkowanie wg stypendium: procedure TForm1.wg_stypClick(Sender: TObject); var k, m: 1.. max; pom: stud; begin for k := 1 to lba_danych - 1 do // porządkowanie – bąbelkowe skr. for m := 1 to lba_danych - k do if x[m].styp > x[m+1].styp then begin pom := x[m]; x[m] := x[m+1]; x[m+1] := pom end; for k := 1 to lba_danych do // pokazanie wyniku with StringGrid2 do begin Cells[1, k] := x[k].nazw; Cells[2, k] := x[k].imie; Cells[3, k] := FloatToStr(x[k].styp); end; end;
Porządkowanie wg nazwisk: procedure TForm1.wg_nazwiskClick(Sender: TObject); var k, m: 1.. max; pom: stud; begin for k := 1 to lba_danych - 1 do // porządkowanie – nieoptymalne for m := k to lba_danych do if x[m].nazw < x[k].nazw then begin pom := x[m]; x[m] := x[k]; x[k] := pom end; for k := 1 to lba_danych do with StringGrid2 do begin Cells[1, k] := x[k].nazw; Cells[2, k] := x[k].imie; Cells[3, k] := FloatToStr(x[k].styp); end; end;
Okienka wyboru pliku do otwarcia lub zapisuOpenDialog, SaveDialog,FontDialog, ColorDialog... • karta Dialogs biblioteki komponentów VCL • standardowe okna dialogu - wybór pliku do otwarcia lub zapisu • komponenty niewidzialne, - pojawiają się jako osobne okna, po wykonaniu metody - funkcji execute, - przyjmującej wartość typu logicznego: • - true, gdy użytkownik kliknął na zakończenie przycisk Otwórzlub Zapisz • - false, gdy użyto przycisku Anuluj. • właściwości • title: string - treść tytułu w pasku tytułowym okna • filter: string - wzorzec przeglądanych plików, np. ’*.txt’ • np. 'Delphi(*.pas, *.dpr)|*.pas;*.dpr' • fileName: string - dysk + ścieżka + nazwa wybranego pliku • metoda – Execute :funkcja typu Boolean
Schemat obsługi dialogu otwarcia pliku: wartość true po otwarciu dialogu • if OpenDialog1.Execute then • begin • //operacje, np. • Edit1.Text:= Opendialog1.fileName; • // i inne – skojarzenie, otwarcie, zapis, zamknięcie • end;
Obsługa plików Pojęcie i istota stosowania • składowe takiego samegodowolnego typu - prostego, strukturalnego - nie pliki • dostępsekwencyjny - operacje np.: czytaj pierwszy | czytaj następny zapisz na początku | zapisz na końcu • brak selektora (adresacji) • rozmiar dynamiczny • istnieje wewnętrzny wskaźnik elementu bieżącego, automatycznie modyfikowany po każdej operacji odczyt | zapis • fizycznie - w pamięci zewnętrznej: dysk, dyskietka, CD-ROM, - znakowe urządzenia wej/wyj: (monitor), drukarka
Uwagi: • Po otwarciu do odczytu wskaźnik ustawia się na początku pliku, każdy odczyt lub zapis przesuwa wskaźnik o jedną pozycję. • Otwarcie nowego (nieistniejącego) pliku powoduje utworzenie pustego pliku, jeśli plik istniał jego zawartość zostaje usunięta, • Można sprawdzić czy wskaźnik jest na końcu pliku • Można przewinąć wskaźnik na początek – jeśli wtedy stwierdzimy, że jesteśmy na końcu pliku to plik jest pusty, • Po przeczytaniu elementu następuje przesunięciewskaźnika do następnego elementu, • Zapis nowego elementu zalecany tylko na końcu pliku (w środku można ale zmienimy (nadpiszemy) wartość elementu). • Dopisanie „w środku” pliku wykonuje się przez etapowe przepisywanie do innego pliku.