Jak każdy zapewne wie każda aplikacja napisana przy pomocy omegi posiada swój główny ekran (OmegaScreen) . A co jeśli będziemy chcieli wyświetlić coś poza tym ekranem bądź będziemy chcieli wydzielić sobie osobny fragment tego ekranu? Będziemy bawić się w dziesiątki a może nawet setki nowych współrzędnych, aby to wszystko poustawiać w głównym ekranie? Otóż nie, z pomocą przychodzi nam komponent OmegaSurface.
Na początek stwórzmy sobie szablon aplikacji, aby mieć na czym ćwiczyć. Wstawmy na formę OmegaScreen , OmegaTimer , Omega Font i zwykły Panel.
W OnCreate Formy stworzymy czcionkę oraz ustawimy inne podstawowe rzeczy :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
procedure TForm1.FormCreate(Sender: TObject); begin OmegaScreen1.SetHWnd(Panel1.Handle); OmegaScreen1.Init; OmegaFont1.Init; OmegaFont1.CreateFont('Arial',15,[fsBold]); OmegaFont1.Color :=OmegaColor(255,255,255); OmegaTimer1.Enabled:=True; end; |
Ok , będzie trzeba „okodzić” również Timer 😉 :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Procedure TForm1.OmegaTimer1Timer(Sender: TObject); begin OmegaScreen1.BeginRender; Omegascreen1.ClearScreen(0,0,0); OmegaFont1.Print(10,10,'Surface'); Omegascreen1.EndRender; end; |
Taki szablonik po uruchomieniu będzie wyświetlał tekst na ekranie. Teraz wrzućmy na formę komponent OmegaSurface a następnie w OnCreate formy ustawiamy właściwości OmegaSurface:
1 2 3 4 5 6 7 8 9 |
OmegaSurface1.SethWnd(Panel1.Handle); //uchwyt powierzchni OmegaSurface1.Width :=100; OmegaSurface1.Height :=100; // ustalamy wysokość i szerokość powierzchni OmegaSurface1.X := 60; OmegaSurface1.Y := 60; // Czyli współrzędne gdzie będzie się znajdować |
Jak łatwo zauważyć OmegaSurface jest bardzo podobna do OmegaScreen-a, mają bowiem wiele wspólnego. OmegaSurface jest „dzieckiem” OmegaScreena. Po stworzeniu pora zabrać się za renderowanie na OmegaSurface . Co tu dużo pisać… Pokaże kod i wszystko będzie już chyba jasne;)
1 2 3 4 5 |
OmegaSurface1.BeginRender; // rozpoczynanie rendowania na powierzchni omegascreen1.ClearScreen(255,255,255); omegaSurface1.EndRender; // koniec rendowania |
Ten kod wkładamy między bloki BeginRender i EndRender OmegaScreena , zatem nasz OmegaTimer będzie wyglądać tak:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Procedure TForm1.OmegaTimer1Timer(Sender: TObject); begin OmegaScreen1.BeginRender; Omegascreen1.ClearScreen(0,0,0); OmegaFont1.Print(10,10,'Surface'); OmegaSurface1.BeginRender; { miejsce na twoją reklamę ;-) } omegaSurface1.EndRender; Omegascreen1.EndRender; end; |
W blokach BeginRender i EndRender OmegaSurface następuje renderowanie na powierzchni (OmegaSurface1) , narysujmy coś zatem ;]
Miedzy bloki wpisujemy :
1 2 3 |
Omegascreen1.ClearScreen(255,255,255); // czyścimy ekran powierzchni OmegaFont1.Print(OmegaSurface1.X,OmegaSurface1.Y,'Surface1',0,0,0,255); |
Zapytacie: dlaczego czyszczony jest ekran główny (Omegascreen) a nie tylko powierzchnia ? a dlatego ze miedzy blokami begin i end render naszej powierzchni wszelkie zdarzenia dotyczą tylko i wyłącznie naszej powierzchni. Popatrzmy, jakie współrzedne wpisałem : Omegasurface1.X i Y, zrobiłem tak, dlatego ze są to wspólrzędne Omegascreen-a i jeżeli bym napisał 0,0 to odwołuje się do współrzędnych głównego ekranu a nie powierzchni.
Można wcisnąć F9 😉 Co widzimy ? Nasza aplikacja narysowała na głównym ekranie napis Surface a na powierzchni Surface1, może nie wygląda to z pozoru ciekawie, lecz kiedy będziecie robić jakiekolwiek GUI do swoich gier bądź cokolwiek podobnego, to zrozumiecie jak to ułatwia sprawę;)
Do tej pory nasze powierzchnie były wewnątrz ekranu głównego, stwórzmy sobie zatem druga, zewnętrzną.
Kładziemy na formę drugi komponent OmegaSurface i w OnCreate Formy dopiszmy :
1 2 3 4 5 6 7 8 9 |
OmegaSurface2.SethWnd(Form1.Handle); // Zmieniamy uchwyt na forme ! OmegaSurface2.Width :=50; OmegaSurface2.Height :=50; OmegaSurface2.X := 1; OmegaSurface1.Y := 1; |
Został zmieniony uchwyt powierzchni – wyświetlana jest ona na formie a główny ekran pozostał na panelu.
Następnie do timera dodajemy kod :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Procedure TForm1.OmegaTimer1Timer(Sender: TObject); begin OmegaScreen1.BeginRender; Omegascreen1.ClearScreen(0,0,0); OmegaFont1.Print(10,10,'Surface'); OmegaSurface1.BeginRender; Omegascreen1.ClearScreen(255,255,255); OmegaFont1.Print(OmegaSurface1.X,OmegaSurface1.Y,'Surface1',0,0,0,255); omegaSurface1.EndRender; OmegaSurface2.BeginRender; Omegascreen1.ClearScreen(255,255,255); OmegaFont1.Print(OmegaSurface2.X,OmegaSurface2.Y,'Surface2',0,0,0,255); omegaSurface2.EndRender; Omegascreen1.EndRender; end; |
Po skompilowaniu program powinien wyświetlić 3 napisy :
– na głównym ekranie
– na wewnętrznej powierzchni
– na zewnętrznej powierzchni
Jak mówiłem wcześniej, z pozoru wydaje się ze to w niczym nie pomaga – nic bardziej mylnego.
To chyba już wszystko w tym artykule, jest to mój pierwszy art wiec fale krytyki mile widziane;)
Pozdrawiam
Filuu