Wysyłanie komuniaktu

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Wysyłanie komuniaktu

Nowy postprzez meros » wtorek, 4 maja 2010, 21:27

Witam,
mam taki problem, tworze sobie gre szachy i funkcja obsługi kliknięcia przycisku wygląda mniej więcej tak :

Kod: Zaznacz cały
click()
{
   ruch gracza
   odÅ›wież szachownice
   if(poprawny_ruch)
   {
           wykonaj ruch kompa
            odÅ›wież szachownice
   }
}


"odśwież szachownice " to jest funkcja ktora modyfikuje wygląd elementów na formatce
(np. wywoluje "bg[0]->Picture->LoadFromFile("images/bg_l.jpg"); ")
Problem w tym, że zmiany są widoczne po wyjściu z "click()" a ja bym chciał aby zmiany były widoczne w momencie wywołania tej funkcji. Problem jest w przypadku ruchu komputera, zajmuje on sporo czasu i zmiana wyglądu formatki jest opóźniona.
I teraz pytanie jak to przerobić by nie było opóźnień w zmianie wyglądu.

Myslałem też. aby "wykonaj ruch kompa " umiescic w jakiejs funkcji np. klikniecia przycisku a w tym kodzie dac np PostMessage() do tego. Nie wiem czy takie rozwiązanie jest możliwe i czy da jakieś efekty, a jezeli tak, to jak to zaimplementowac ? (Z jakimi parametrami wywołać PostMessage() ?? )



============


Inne pytanie, w jaki sposób wgrać obrazek do projektu (wgrać, nie otwierać z zewnetrznego pliku za kazdym razem), tak jak to robi komponent TImage ? Tylko mi chodzi właśnie by nie używać formatki tylko w samym kodzie jakoś to zapisać. (obrazków jest dużo dlatego tworzenie ich z formatki nie wydaje mi sie dobrym rozwiązaniem)



pozdrawiam i licze na odpowiedz :)
Avatar użytkownika
meros
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): wtorek, 4 maja 2010, 21:10
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows XPOpera

Re: Wysyłanie komuniaktu

Nowy postprzez Cyfrowy Baron » Å›roda, 5 maja 2010, 07:06

Twój kod niewiele mówi o programie, ale za każdym razem gdy chcesz odświeżyć kolejkę komunikatów powinieneś wywołać funkcję Application->ProcesMessages(), np. po wczytaniu grafiki w funkcji "odśwież szachownice "

Kod: Zaznacz cały

  bg
[0]->Picture->LoadFromFile(ExtractFilePath(ParamStr(0)) + "images\\bg_l.jpg");

  Application->ProcesMessages();
 


Zmieniłem sposób zapisu ścieżki dostępu do pliku grafiki. Po pierwsze nie ukośnik / gdyż tego używa się dla adresów URL, lecz podwójny ukośnik \\. Po drugie zawsze należy podawać bezwzględną ścieżkę dostępu do pliku, lub względną względem programu. W przypadku plików znajdujących się w katalogu lub podkatalogu programu najpierw pobieramy ścieżkę do pliku programu (ParamStr(0) lub Application->ExeName) następnie ekstrahujemy z tej ścieżki, ścieżkę do katalogu programu (ExtractFilePath(ParamStr(0)) lub ExtractFilePath(Application->ExeName)).

Możesz też umieścić tą funkcję w funkcji Click:

Kod: Zaznacz cały

click
()
{
   ruch gracza

  Application
->ProcesMessages();

   odśwież szachownice

  Application
->ProcesMessages();

   if(poprawny_ruch)
   {
           wykonaj ruch kompa

           Application
->ProcesMessages();

           odśwież szachownice
   
}
}
 


Wysyłanie komunikatu PostMessage, czy też SendMessage niczego nie da, gdyż nie w tym leży problem.



Co się zaś tyczy drugiego pytania, to umieść grafikę w zasobach programu, możesz o tym przeczytać w serwisie Cyfrowy Baron w dziale: porady -> grafika, porady: umieszczanie grafiki w formacie JPEG w zasobach programu; umieszczanie bitmapy w zasobach programu. Polecam też dział: porady -> różne, poradę: Tworzenie pliku z zasobami i zapisywanie zasobów do pliku. W serwisie znajdziesz więcej informacji o umieszczaniu różnych zasobów w plikach programu.

W przypadku dużych grafik, jest to jednak niepraktyczne, gdyż każda grafika zwiększa rozmiar pliku aplikacji dokładnie o rozmiar pliku grafiki
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wysyłanie komuniaktu

Nowy postprzez meros » Å›roda, 5 maja 2010, 10:28

Cyfrowy Baron napisał(a):Twój kod niewiele mówi o programie


Chodziło mi bardziej o przybliżenie problemu, nie wiedziałem jak inaczej mam to przedstawić ;)


Cyfrowy Baron napisał(a):odświeżyć kolejkę komunikatów powinieneś wywołać funkcję Application->ProcesMessages()


I o to mi właśnie chodziło ! :D Nie wiedziałem, że taka metoda istnieje a brakowało mi jej (dopiero zaczynam zabawe z builderem)

Co do tych ukośników oraz pobierania ścieżki do pliku to również zastosowałem się do Twojej rady,

Wielkie dzięki ;)
Avatar użytkownika
meros
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): wtorek, 4 maja 2010, 21:10
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows XPOpera


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość