190 likes | 291 Views
3 MPDI. Programowanie obiektowe. Memo Scrollbar StingGrid Grafika Shape Image Canvas. Obiekty. Pole edycji wielowierszowej – Memo. wartości wprowadzane z klawiatury lub programowo możliwość edycji wielowierszowej współpraca ze schowkiem.
E N D
3MPDI Programowanie obiektowe • Memo • Scrollbar • StingGrid • Grafika • Shape • Image • Canvas Obiekty
Pole edycji wielowierszowej – Memo • wartości wprowadzane z klawiatury lub programowo • możliwość edycji wielowierszowej • współpraca ze schowkiem wiersze tekstu – jak tablica (wektor) tekstów (numeracja od 0) • właściwości: • Lines: TStrings - cała lista wierszy • Lines[nr_w] - dostęp do wiersza • Lines[nr_w] := wyr_tekstowe - zmiana treści wiersza • Lines.Count: integer - liczba składowych listy 2
metody - dla Lines: - procedura clear; - zeruje - p. append( s: string ); - dodaje na koniec listy; - funkcja add( s: string ): integer; - podobnie wynik – zwraca nr wiersza (od 0) - p. insert( index: integer; s: string); - wstawia w pozycji index - p. delete( index: integer ); - usunięcie wiersza - p. loadFromFile( fileName: string );- dopisanie z pliku tekstowego - p. saveToFile( fileName: string); - zapisanie do pliku • Przykłady: Memo1.Lines.Add( 'Kowalski'); Edit1.Text:=IntToStr(Memo1.Lines.Append('Nowak')); Memo1.Lines[2] := Edit1.Text; Memo1.Lines.Insert( 5, 'Kowalski‘ ); Memo1.Font.Size := 14; Memo1.Clear; Memo1.SaveToFile('dane.txt');// w tym samym folderze co aplikacja 3
Przykład: Obliczenie najmniejszej z liczb w Memo – algorytm wyznaczania minimum (maksimum) procedure .... var min:real; k:integer; begin min:=StrToFloat(Memo1.Lines[0]);// założenie, że 1-sza //liczba najmniejsza for k:=1 to Memo1.Lines.Count - 1 do if StrToFloat(Memo1.Lines[k])<min then min:=StrToFloat(Memo1.Lines[k]);// szukanie mniejszej Edit1.text:=FloatToStr(min);// ta instrukcja wykonywana po //zakończeniu pętli end
Pasek przewijania (suwak) – scrollBar • samodzielny lub sprzężony z innym komponentem, np.:TMemo, TListBox • służy do wybierania wartości z pewnego przedziału przez zmianę pozycji suwaka: • wolną - kliknięciem w strzałki • szybką - kliknięciem w pasek przed lub za suwakiem • płynną - ciągnięcie suwaka • z klawiatury (up, down, right, left, pgUp, pgDn, home, end)
właściwości • kind - orientacja pozioma|pionowa (sbHorizontal, sbVertical) • min: integer - wartość odpowiadająca lewej skrajnej pozycji piktogramu suwaka • max: integer - wartość odpowiadająca prawej skrajnej pozycji piktogramu suwaka • position: integer - wartość odpowiadająca bieżącej pozycji piktogramu suwaka • smallChange: integer - wartość odpowiadająca wolnej zmianie pozycji piktogramu suwaka • largeChange: integer - wartość odpowiadająca szybkiej zmianie pozycji piktogramu suwaka
zdarzenia • onChange- procedura obsługi zmiany położenia piktogramu suwaka (ogólna zmiana dowolna) • onScroll- procedura obsługi użycia piktogramu suwaka wg scrollCode type TScrollCode = (scLineUp, scLineDown, scPageUp, scPageDown, scPosition, scTrack, scTop, scBottom, scEndScroll);//wyliczeniowy T<formularz>.<suwak>scroll(sender: TObject; scrollCode: TScrollCode; var scrollPos: integer); • scLineUp - przesuwanie wolne w górę (lewo) • scLineDown - przesuwanie wolne w dół (prawo) • scPageUp - przesuwanie szybkie w górę (lewo) • scPageDown - przesuwanie szybkie w dół (prawo) • scPosition - przesunięcie płynne i upuszczenie • scTrack - w trakcie przesuwania płynnego • scEndScroll - koniec płynnego przesuwania • scTop - początek po home • scBottom - koniec po end Przykład case scrollCode of scLineDown:edit1.Top:=edit1.Top+5; scLineUp: edit1.Top:=edit1.Top-5; end;
Edycja wielowierszowa TStringGrid informacja tekstowa zorganizowana w tabelę (wiersze, kolumny) • właściwości: ColCount, RowCount:integer - liczba kolumn i wierszy FixedCols, FixedRows :integer - liczba stałych (szarych) kolumn i wierszy Cells[nr_k, nr_w: integer]: string - zawartość komórki Rows, Cols[nr].ComaText:string - cały wiersz, kolumna (ciąg wartości) służy do programowego wpisywania tekstu ColWidths[nr] - szerokość w pikselach RowHeights[nr] - wysokość w pikselach Options - opcje (np. goEditing)
Przykłady: StringGrid1.Cols[0].CommaText := ', 1, 2, 3, 4'; StringGrid1.Rows[0].CommaText := ', Nazwisko, Imię, kwota'; StringGrid1.Rows[0].CommaText := ', " Nazwisko", " Imię", " kwota" '; StringGrid1.Cells[1,2]:= 'Kowalski'; StringGrid1.Cells[2,2]:= 'Jan'; StringGrid1.Cells[3,2]:= '123,00 zł'; StringGrid1.Options := StringGrid1.Options + [goEditing]; StringGrid1.Options := StringGrid1.Options + [goColSizing, goRowSizing]; Options jest typu zbiorowego Gdy goEditing ma wartość true - można edytować komórkę w czasie biegu programu
Shape – prosty kształt właściwości: Shape – typ wyliczeniowy shape1.shape:=stRectangle; Pen – obiektowy cechy konturu (color, style,width) shape1.pen.color:= rgb(….); shape2.pen.style := ps Solid; Brush – obiektowy cechy wypełnienia (color, style) shape1.brush.style:= bsHorizontal; metody- procedury: Hide BringToFront i inne
Image – obrazek właściwości: • Height, Width, Top, Left • Picture – typ obiektowy TBitmap • ma metody (procedury) • loadfromFile(adres obrazka: string) • Image1.Picture.LoadfromFile ('obrazki/s2.bmp'); • saveToFile( const fileName: string); • stretch • visible • i inne metody - procedury: Hide Show Repaint
Wykorzystanie tablic w grafice bitmapowej Niektóre komponenty (wizualne) posiadają właściwość obiektową Canvas (tło, płótno) komponent M N pixel Canvas posiada obiektowe pole pixels: Pixels [ N, M] która umożliwia dostęp do pikseli i modyfikację ich koloru. Możemy ją traktować jak dwuwymiarową tablicę o wymiarach współrzędnych komponentu, wypełnioną danymi typu TColor Przykład – dostęp do tablicy pikseli Form1.Canvas.Pixels[ 100, 100] :=clRed;
Inne pola obiektu Canvas: • Brush • Pen • itp. • oraz metody: • MoveTo (x, y) • LineTo (x, y) • Ellipse(x1, y1,x2 ,y2) • Rectangle(x1, y1, x2, y2)
Przykład - linia prosta var i:integer; begin for i:=1 to 85 do Form1.Canvas.Pixels[ 400+i, 400+2*i] :=clRed; end; współrzędne punktu
Przykład zagnieżdżania pętli - szachownica var w,k,w1,k1:integer; begin for w:=1 to 5 do for k:=1 to 5 do for w1:=1 to 25 do for k1:=1 to 25 do if ((w+k) mod 2 = 0) then Form1.Canvas.Pixels[ 100+(w-1)*25+w1, 100+(k-1)*25+k1] :=clRed; end; Można użyć standardowej funkcji rgb do modyfikacji koloru z argumentami zależnymi od liczników "pętli": Form1.Canvas.Pixels[ 100+(w-1)*50+w1, 100+(k-1)*50+k1] := rgb(120*w,20*(w+k),200*k);
Okienka wyboru pliku do otwarcia lub zapisuOpenDialog, SaveDialog • karta Dialogs biblioteki komponentów VCL • standardowe okna dialogu - wybór pliku do otwarcia lub zapisu • komponenty niewidzialne w runtime (tylko w projekcie), - 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
Okienka wyboru czcionki i koloru FontDialog właściwość Font:TFont ColorDialog właściwość Color:TColor
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;
Przykład 1 - operacji wybrania pliku i usunięcia go: • procedure TForm1.Button1Click(Sender: TObject); • var plik: textFile; • begin • openDialog1.title := 'Usuwanie pliku'; • openDialog1.filter := 'Delphi(*.pas, *.dpr)|*.pas;*.dpr'; • if openDialog1.executethen • begin • assignFile( plik, openDialog1.fileName ); • try • reset( plik ); • if MessageDlg( 'Usunąć ' + openDialog1.fileName + '?', • mtConfirmation, [mbYes, mbNo], 0) = mrYes then • begin • closeFile( plik ); • erase( plik); • end; • except • on eInOutError do • MessageDlg( 'Błąd operacji wej/wyj pliku.', mtError, [mbOk], 0 ); • end; • end; • end;