Rozdział 12
[ Powrót ]
Napiszmy prostą przeglądarkę graficzną. Co Wy na to?
Uruchom Delphi; zmień wartość Caption formularza na 'Przeglądarka plików graficznych'; ustaw właściwość Forms Style na fsMdiForm.
Wybierz z menu plik 'New Form'. Zmień właściwość FormStyle nowego okna na fsMDIChild. We właściwości Name wpisz np. 'New'; umieść komponent Image - zmień jego wartość Stretch na True oraz wartość Aligin na alClient. Zapisz formularz pod nazwą 'NewWindow';
Zapisz wszytko; na głównym formularzu umieść komponent MainMenu. Kliknij na niego podwójnie - otworzy się nowe okno. W Inspektorze Obiektów w polu Caption wpisz 'Plik'. Naciśnij podwójnie na ten napis - powinno rozwinąć się menu.
W rozwiniętym menu w polu Caption wpisz np. 'Otwórz' i 'Zapisz jako'. Zamknij to okno.
Umieść na formularzu głównym komponent OpenPictureDialog i SavePictureDialog. Będą one odpowiedzialne jak zapewne się domyślasz za zapisywanie i otwieranie plików.
W formularzy głównym wybierz menu Plik -> Otwórz i uzupełnij je następującym kodem:
procedure TMainFrom.Open1Click(Sender: TObject);
var
NewWindows
: TNewWindow; //W moim przypadku tak nazywa się nowe okno, które
zrobiłem.
begin
if OpenPictureDialog1.Execute then begin
//Metoda Eecute wywołuje okno - w tym wypadku OpenPictureDialog1
NewWindow:=
TNewWindow.Create(Self); //utworzenie nowego okna - musi być przypisany wskaźnik
Self
with NewWindow.Image1.Picture do begin
LoadFromFile(OpenPictureDialog1.FileName); //Załadowanie
nowego pliku ze ścieżki jaką używa
//komponent OpenPictureDialog
NewWindow.ClientWidth:=Width;
//dopasowanie rozmiarów okna do rozmiarów obrazka
NewWindow.ClientHeight:=Height; //j/w
end;
NewWindow.Caption:=ExtractFileName(OpenPictureDialog1.FileName);
//patrz niżej w objasnieniach
NewWindow.Show; //pokazanie nowego okna
end;
end;
OBJAŚNIENIE: Polecenie ExtractFileName oddziela ścieżkę
dostępu do pliku od nazwy samego pliku. W tym wypadku na pasku stanu nowego
okna będzie widniała nazwa pliku. Istnieją jeszcze inne podobne funkcje:
ExtractFileDir - wyświetla pełną ścieżkę dostępu do pliku.
ExtractFileExt - wyświetla rozszerzenie pliku
ExtractFileDrive - wyświetla literę dysku
Wydaje mi się, że pozostałe polecenia nie wymagają objaśnień. Jeżeli coś wydaje sie Ci nie jasne - pisz: boduch@poland.com
Nadszedł czas, aby stworzyć polecenie dla menu: Plik -> Zapisz jako. Przyjrzyj się poniższemu kodowi, a później to objaśnie:
if SavePictureDialog1.Execute then
with ActiveMDIChild as TNewWindow
do
Image.Picture.SaveToFile(SavePictureDialog1.FileName);
OBJAŚNIENIE: Funkcja ActiveMDIChild oznacza aktywne okno. Nie bez powodu w formularzu głównym ustawialiśmy właściwość FormStyle na fsMDIFrm. Dzięki temu właśnie zachodzi możliwość otwierania kilku okien naraz.
W powyższej procedurze użyty został operator as. Jest to operator wiążący. Spróbuj napisać ten kod bez tego operatora - program się nie skompiluje gdyż kompilator nie wie czym jest Image. Trzeba połączyć to z TNewWindow, aby mieć dostęp do komponentu Image. Dalej następuje zapisanie obrazka do pliku, który wskazuje w oknie SavePictureDialog.
Teraz możesz już uruchomić program. Uwaga! Jeżeli program Ci się nie uruchomił a kompilator wskazuje błąd (nie wie co to jest TNewWindow) przejdź kursorem przed listę implementation i za nią dodaj taką linie:
uses TNewWindow;
Zostały jeszcze tylko drobne poprawki. Zauważ, że zaraz po uruchomieniu programu uruchamia się także nowe okno MDI. Nie chcemy żeby tak się działo więc z menu Project wybierz Options i kliknij na zakładkę 'Forms'. Kliknij na drugim formularzu MDI i naciśnij przycisk >
Zauważ również, że po otwarciu nowego okna i naciśnięciu krzyżyka okno się nie zamyka tylko minimalizuje. Przejdź do drugiego okna MDI i z Inspektora Obiektów wybierz zakładkę Events. Odszukaj polę OnClose i kliknij podwójnie. W edytorze kodu wpisz następująco linie:
Action := caFree;
Dzięki temu takie okno będzie się zamykało.
Nara!
[ Powrót ]