Rozdział 12

 [ Powrót ]

Napiszmy prostą przeglądarkę graficzną. Co Wy na to?

  1. Uruchom Delphi; zmień wartość Caption formularza na 'Przeglądarka plików graficznych'; ustaw właściwość Forms Style na fsMdiForm.

  2. 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';

  3. 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. 

  4. W rozwiniętym menu w polu Caption wpisz np. 'Otwórz' i 'Zapisz jako'. Zamknij to okno.

  5. Umieść na formularzu głównym komponent OpenPictureDialog i SavePictureDialog. Będą one odpowiedzialne jak zapewne się domyślasz za zapisywanie i otwieranie plików.

  6. 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!

Adam Boduch

 [ Powrót ]