ROZDZIAŁ 17





Pamiętacie kiedy pisaliśmy program AVI Films Player? Teraz go trochę ulepszymy:
1. Najlepiej będzie jeżeli zaczniesz wszystko od początku. Stwórz więc nowy projekt i ustaw jego właściwość Height na 411. Właściwość Width zmień na 360.
2. W Inspektorze Obiektów rozwiń pole Border Icons i zmień właściwość biMaximize na False.
3. Umieść na formularzu komponent Panel i jego wymiary i położenie zmień według tu podanych: Height: 225, Left: 8, Top: 0, Width: 329. Zmień kolor tła Panelu na czarny, a kolor używanej czcionki na biały.
4. Umieść na formularzu komponenty: PopupMenu, MainMenu, Timer, OpenDialog, MediaPlayer, BitBtn, ScrollBar, Panel, TrackBar, Label, StatusBar.
o MediaPlayer: Width: 197, Height: 30, Left: 8, Top: 227; VisibleButtons: btRecord, btEject = False.
o BitBtn: Width: 115, Height: 30, Left: 222, Top: 227, Caption = Otwórz
o ScrollBar: Height: 17, Width: 331, Top: 261, Left: 6, Name = Scroll
o Panel: Name: Panel2, Left: 6, Top: 280, width: 331, Height: 27; kolor tła: czarny, kolor tekstu: biały
o TrackBar: Left: 224, Width: 113, Height: 29, Top: 312, Max: 5, TrickMarks: tmBoth, TrickStyle: tsAuto
o Label: Caption = Ustaw głośność; umieść go obok komponentu TrackBar (po jego lewej stronie).
5. Dobra, teraz program powinien już jakoś wyglądać. Kliknij na komponencie MainMenu. W rozdziale w którym pisaliśmy przeglądarkę omawiałem jak tworzyć menu więc nie będę się tutaj na ten temat rozpisywał. Stwórz menu 'Plik', a w nim pola: Otwórz, Zamknij, Zakończ. Następnie stwórz menu 'Widok', a w nim: Standardowy, Minimalny, wstaw poziomą linie (w pole Caption wpisz znak '-'), Pełny ekran, Zawsze na wierzchu.
6. Teraz zajmiemy się uzupełnianiem kodu. Zacznijmy od przycisku 'Otwórz':
//wywolanie okna dialogowego "Otworz"
if openDialog.Execute then begin
//przypisanie nazwy jakiej uzywa OpenDialog
Player.FileName:=OpenDialog.FileName;
//otwarcie pliku
PLayer.Open;
Player.Enabled := True;
//przypisanie obrazu panelowi
Player.Display:=Panel1;
Player.DisplayRect:=Panel1.ClientRect;
Panel1.Caption := ExtractFileName(OpenDialog.FileName);
Panel2.Caption := 'Stan: Film zatrzymany';
end;
Wydaje mi się, że ta procedura nie wymaga większych objaśnień.
7. Kliknij teraz dwukrotnie na komponencie MediaPlayer. Tereść procedury jest następująca:
{Komponentowi ScrollBar przypisywana jest długość filmu}
Scroll.Max := Player.Length;
{Dopasowanie pomocy i napisu na panelu}
Panel2.Caption := 'Trwa odtwarzanie ' + ExtractFileName(OpenDialog.FileName) + '...';
Panel1.Hint := 'Odtwarzanie filmu | Trwa odtwarzanie filmu: '+ ExtractFileName(OpenDialog.FileName);
if Button = btStop then begin
{Jezeli nacisniety zostanie przycisk Stop film zostanie zatrzymany dopasowane zostana napisy oraz Timer stanie sie nieaktywny}
Player.Stop;
Panel2.Caption := 'Stan: Film zatrzymany';
Timer1.Enabled := False;
end
else
Timer1.Enabled := True;
Panel2.Caption := 'Stan: Film uruchomiony';
if Button = btPlay then begin
{Jezeli film zostanie odtworzony - zmieni sie tresc napisu na panelu}
Panel2.Caption := 'Stan: Film uruchomiony';
end;
if Button = btStop then begin
{Zatrzymanie filmu zpowosuje zmiane napisu}
Panel2.Caption := 'Stan: Film zatrzymany';
end;
8. Uzupełnij tak procedurę OnScroll komponentu ScrollBar:
if Player.Enabled = False then
{Jezeli Player jest nieaktywny - nic sie nie dzieje..}
Exit;
{...jezeli film jest otwarty - jego pozycja jest przypisana pozycji komponentu ScrollBar}
Player.Position := Scroll.Position;
9. Teraz kliknij dwukrotnie na komponencie TrackBar. Będzie to regulacja głośności:
{Ustawienie glosnosci obu glosnikow na...}
case TrackBar1.Position of
1:
WaveOutSetVolume(0, $40004000);{4000}
2:
WaveOutSetVolume(0, $60006000); {6000}
3:
WaveOutSetVolume(0, $80008000); {8000}
4:
WaveOutSetVolume(0, $90009000); {9000}
5:
WaveOutSetVolume(0, $FFFFFFFF);{dzwkek na maxa}
end;


OBJAŚNIENIE: Tutaj zatrzymam się na chwilę, aby objaśnić tę funkcję. Użyta została tutaj instrukcja case. W przypadku gdy suwak ustawiony jest na pierwszym "ząbku" ustawiony zostaje dźwięk na obu głośników na wartość 4000. Dźwięk jest typu Integer, ale jego wartość musi mieć 4 cyfry. W tym przypadku głośność obu głośników jest jednakowa.
10. Kliknij dwukrotnie na komponencie Timer. Treść procedury wyglądać będzie następująco:
SCroll.Position := Player.Position;
11. Kliknij podwójnie na komponencie MainMenu; kliknij na zakładkę 'Widok'; kliknij na przycisku 'Standardowy' i zmień jego właściwość RadioItem na True oraz GroupIndex na 1. Zrób to samo z przyciskiem 'Minimalny'.
12. Kliknij podwójnie na przycisku 'Standardowy' i procedurę uzupełnij tak: Standardowy1.Checked := not Standardowy1.Checked;
if Standardowy1.Checked = True then
Label1.Visible := True;
TrackBar1.Visible := True;
Panel2.Visible := True;
{Pokazanie komponentow}
Form1.Height := 420;
{Zwiekszenie formy}
13. Kliknij dwukrotnie na przycisku minimalny i jego procedurę uzupełnij następująco:
Minimalny1.Checked := not Minimalny1.Checked;
if Minimalny1.Checked = True then begin
Label1.Visible := False;
TrackBar1.Visible := False;
Panel2.Visible := False;
Form1.Height := 350;
end;
14. Myślę, że do tej pory wszystko było jasne. Teraz nadszedł czas, aby uzupełnić procedurę 'Zawsze na wierzchu'.
Na_wierzchu.Checked := not Na_wierzchu.Checked;
if Na_wierzchu.Checked = True then
Form1.FormStyle := fsStayOnTop {Jezeli wlasciwosc jest prawdziwa wlaczona zostaje opcja "Na wierzchu"}
else
Form1.FormStyle := fsNormal;
15. Teraz nadszedł czas, aby stworzyć drugą formę. Zrób to, a na drugim formularzu umieść komponent Panel - zmień właściwość Align na alClient. Uzupełnij kod procedury 'Pełny ekran':
Form2.BorderStyle := bsNone;{ukrycie gornego paska}
Form2.WindowState := wsMaximized;{maximilizacja okna}
Player.Display := Form2.Panel1;{przypianie obrazu do Panelu na Formie drugiej}
Player.DisplayRect := Form2.Panel1.ClientRect;{dopasowanie rozmiaru filmu do rozmiarow Panelu}
Form2.PopupMenu := Form1.PopupMenu1;{Przypisananie Panelowi Menu rozwijalnego}
Form2.ShowModal;{ukazanie okna Form2}
OBJAŚNIENIE: Najpierw ukrywana zostaje "belka" formy, a formularz zostaje zmaksymilizowany - odnosimy wówczas wrażenie, że film wyświetlany jest na pełnym ekranie.
16. Kliknij teraz na komponencie PopupMenu. Stwórz w nim tylko jedno pole o nazwie: 'Pełny ekran'; zmień właściwość Checked na True.
{Ta procedura przywrca "normalny" rozmiar okna tj. zamyka zmaksymilizowany film}
Form1.Player.Display := Form1.Panel1;
Form1.Player.DisplayRect := Form1.Panel1.ClientRect;
Timer1.Enabled := True;
Form2.Close;
17. Program jest prawie skończony. Pozostało jeszcze tylko napisanie właściwości zamykającej film:
Player.Stop; {Zatrzymanie odtwarzania}
Player.Enabled := False;{dezaktywacja...}
Timer1.Enabled := False;
Scroll.Position :=0;
Panel1.Caption := 'Zamknięto film';{Przypisanie panelowi teksu}
Panel2.Caption := 'Stan: Zamknięto film';
18. Procedurę zamykająca program (Plik -> Zakmknij): Application.Termiante;
19. Mamy już napisaną procedurę otwierającą plik video, lecz ta procedura nie jest przypisana do menu: Plik -> Otwórz. Myślę, że sami potraficie to zrobić.

ROZDZIAŁ 18


Ten rozdział będzie całkowicie poświęcony dystrybucji sieciowej twoich programów.
Załóżmy, że masz program i chciałbyś, aby można go było umieścić na stronie tj. używać bezpośrednio na stronie WWW. Tak to jest możliwe. Przejdź do sekcji programy na tej stronie i wybierz program "Kółko i Krzyżyk". Zauważ, że oprócz przycisku "Pobierz" znajduje się również napis: "Uruchom ze strony". Naciśnij go - program "Kółko i Krzyżyk" uruchomi się bezpośrednio ze strony WWW. W tym rozdziale opiszę co zrobić, aby można było umieścić program na stronie WWW.
1. Wybierzcie z menu File polecenie New.
2. Kliknijcie na zakładkę 'Active X'.
3. Kliknijcie dwukrotnie na przycisk 'Active Form'.
4. Otworzy się okno które musicie wypełnić. W polu New ActiveX Name wpisz np. '
Main1stFormX'. Pozostałe pola zmieniły się - możesz zostawić tak jak jest. Nim klikniesz na przycisku 'OK' zaznacz pole Include Version Information. Delphi zbuduje formularz na którym możesz umieszczać komponenty jak na zwyczajnym formularzu. zrobimy przykładowy program np. jakiś mały przykładowy programik. Niech będzie to na przykład forma z przyciskiem. Po naciśnięciu program automatycznie tworzy losowo rozmieszczane komponenty Edit.
1. Stwórz przycisk i treść jego procedury OnClick uzupełnij następuąco:
var
Edit : TEdit; //Deklaracja zmiennych
Y,i : Integer;
X : Integer;
begin
for i:=0 to 5 do begin //zastosowanie petli For
Edit := TEdit.Create(Self); //Tworzenie komponentu Edit
Edit.Parent := Self; //Przypisanie rodzica kompoenntu
x:=Random(400); //Losowanie liczb...
Y:=Random(400);
Edit.Left := X; {Przypisanie wartości X i Y dla położenia kontrolek Edit
Edit.Top := Y;
Edit.Text := 'Kontrolka nr '+IntToStr(I); //Nadanie właściwości Text kontrolek
end;

OBJAŚNIENIE: Zastosowana zostaje tutaj pętla for dlatego, że stworzonych zostaje 5 kontrolek. Wyjaśnienia wymagają dwie kolejne linie. To dzięki nim następuje stworzenie kontrolek. Możliwe jest również tworzenie kontrolek we wnętrzu innych komponentów. Deklaracja taka wyglądałaby wówczas tak:
Edit := TEdit.Create(Self);
Edit.Parent := Memo;
W powyższym wypadku kontrolka Edit stworzona zostanie we wnętrzu komponentu Memo. W przypadku gdy zdeklarowany jest wskaźnik 'Self' rodzicem zostaje formularz. Następnie następuje losowanie liczb z zakresu od 0 do 399. Zmienne X i Y zostają przypisane położeniu kontrolek. Chciałbym także podkreślić znaczenie przedostatniej linii. Powoduje ona iż każdej kontrolce zostaje przypisany inny numer. Można by to było zrobić również tak:
Edit.Text:=Format('Kontrolka nr nr %d',[I]);
Znak " %d " informuje kompilator, że "w tym miejscu umieszczona zostanie zmienna typu Integer. Możliwe jest zastosowanie także znaku " %s " który informował by kompilator, że "w tym miejscu umieszczona zostanie zmienna typu String". Gdy już masz gotowy formularz zapisz go. Z menu Run wybierz Register ActiveX Server. Następnie zbuduj projekt (Project -> Bulid). Z menu Component wybierz Import ActiveX Control. Z listy, która się ukaże wybierz swoją kontrolkę. W polu Palette page wybierz ActiveX (Jeżeli nie posiadasz takiego pola - to je wpisz). Następnie kliknij na przycisku Install - pojawi się okno instalacji. W polu FileName powinna znajdować się nazwa DCLUSR50.BPl. Jeżeli tak nie jest wybierz ją z listy. Kliknij na przycisku Ok i potwierdź budowę (Yes). Ok, teraz mamy już gotową kontrolkę ActiveX.
Wybierz polecenie Project -> Web Deployment Options - jest to okno konfiguracji. W polu traget dir wpisz nazwę katalogu gdzie ma być skopiowana kontrolka po jej zbudowaniu. Traget URL służy do określenia gdzie na serwerze ma być zamieszczona kontrolka. W polu HTML Dir wpisujesz gdzie Delphi ma zapisać gotową stronę WWW z programem.
Zaznacz polę Use CAB file compression. Pole to określa czy program ma być skompresowany, czy też nie.
Pole Include file version information decyduje o tym, czy Delphi powinno włączać numer wersji. Niektóre przeglądarki nie załadują kontrolki jeżeli włączony jest numer wersji (NN).
Auto increment relase number - zaznaczenie tego pola powoduje, że za każdym razem przy rozpowszechnianiu zwiększany jest numer wersji. Czas abyś wreszcie zbudował kontrolkę. Kliknij na przycisku OK zamykając to okno. Z menu Project wybierz Web Deploy - kontrolka zostanie zbudowana. Przejdź do katalogu w którym postanowiłeś umieścić kontrolkę. Znajduje się tam strona WWW i plik *.cab z programem. Teraz pozostaje już uruchomienie strony w edytorze HTMLa i odpowiednie jej "upiększenie". Później możesz już opublikować stronę na serwerze.