Okiełznać mysz w XNA + WF Podstawowym elementem zaznaczania jest ustalenie pozycji myszy na ekranie. Przy pracy nad tą funkcjonalnością pewien delikatny niuans sprawił, że zajęło to zdecydowanie dłużej, niż zakładałem.Mysz w XNA Dobranie się do pozycji myszy w czystym XNA jest niezmiernie łatwo. Służy do tego obiekt klasy MouseState, który wypełniamy bieżącymi informacjami fragmentem kodu: MouseState mouseState = Mouse.GetState(); Po wykonaniu takiej operacji obiekt mouseState zawiera aktualną pozycję m...
Konwertery to bardzo przydatny mechanizm WPF'a pozwalający, w czasie procesu bindowania, na konwersję pomiędzy różnymi typami wartości. Wcześniej czy później przyjdzie taki monent, że będziemy musieli/chcieli napisać swój własny konwerter. Możemy zrobić to na kilka sposobów. Poniżej postaram się przybliżyć rózne sposoby implementacji konwertera z ich zaletami i wadami. Jako przykład w poniższych rozważaniach posłuży DateConverter z MSDN'a. Podejście pierwsze (StaticResource)Realizacja konwertera polega ...
Od pewnego czasu odgrażałem się, że napiszę kilka zapytań przy użyciu NHibernate. Teraz nadszedł ten czas. Za materiał treningowy posłużą mi wcześniej opisywane statystyki. Metodyka pisania zapytań jest następująca: najpierw SQL, później zapytanie w NH. Ma to na celu pokazanie w jaki sposób można przekładać T-SQL na język zapytań NH (w tym przypadku Criteria API).
Pliki .chm to prosty sposób na help do programu, dodatkowo polecono mi programik Precision Helper (freeware), który ułatwia tworzenie dokumentacji. Niestety WPF nie ma wbudowanego mechanizmu do obsługi tych plików. Oczywiście można posiłkować się klasą Help z biblioteki System.Windows.Forms. Pozostaje tylko pytanie czy warto dołączać dużą (ok 5MB) bibliotekę, aby skorzystać z jednej klasy. Moim zdaniem nie warto. Postanowiłem napisać moduł, który zajmie się obsługą plików *.chm w WPF. Po kilku godzinach...
Korzystanie z interfejsu INotifyPropertyChanged podczas pracy z WPF to praktycznie codzienność. Za którymś razem jednak implementacja tego interfejsu w kolejnej klasie może już zbrzydnąć. Dlaczego, więc nie skorzystać z refleksji i extensions methods? Metodę wywołującą zdarzenie PropertyChanged napiszemy raz i będziemy z niej korzystać do woli. Implementacja tej metody w moim wykonaniu wyglą...
Dzisiaj coś zupełnie z innej beczki. SAP Business One (SB1) , czyli "program księgowy". Jakiś czas temu miałem okazję popracować trochę z tym programem i zapoznać się z DI API. DI API to zestaw metod, za pomocą których możemy zautomatyzować proces tworzenia dokumentów księgowych w SB1. Czyli wygenerować dokumenty z poziomu własnego programu, przy użyciu "odpowiednich bibliotek". Bardzo przydatne w sytuacji gdy integrujemy program księgowy z innymi systemami i chcemy zautomatyzować proces powstawania doku...
Standardowo gdy tworzymy projekt typu Class library, Visual Studio pozwala nam na dodanie elementów WinForm i dosłownie jednego (User Control) elementu z palety WPF. Oczywiście dla bibliotek z elementami WPF przeznaczony jest projekt WPF Custom Cortol Library, ale czasem istnieje konieczność dodania kontrolek WPF'owych do istniejącej biblioteki i właśnie taki przypadek zostanie tutaj rozpatrzony.
Niektóre aplikacje warto wyposażyć w Splash Screen. W przypadku WPF-a (który jest wykorzystywany w DesktopInfo) sprawa jest banalnie prosta. Wystarczy dodać plik png do projektu a następnie we właściwościach pliku wybrać SplashScreen
Wczoraj (a właściwie dzisiaj) pisałem o pobieraniu lokalizacji za pomocą wbudowanej w Windows 7 platformy sensorów. Poniżej kawałek kodu, który już powinien być zrozumiały – wykorzystujący LatLongLocationProvider LatLongLocationProvider location = newLatLongLocationProvider(100); if (location.ReportStatus == ReportStatus.Running) { location.LocationChanged += newLocationChangedEventHandler(location_LocationChanged); location.StatusChanged += newLocationProviderStatusChangedEventHandler(location_St...
Od dawna nosiłem się z zamiarem poznania wzorca MVVM (Model-View-ViewModel), na którym opiera się WPF, jednak im głębiej go poznawałem tym bardziej wydawał mi się on irytujący. Problem z MVVM jest taki, że jest to tylko wzorzec, opisujący jedynie podstawy działania i przedstawiający założenia do ogólnej koncepcji jaką należy przyjąć w projekcie. W teorii wygląda to bardzo ładnie, oddzielenie interfejsu od logiki biznesowej miały pozwolić na rozdzielenie pracy programisty i designera. Zachowujemy porządek...
Przeglądając istniejący kod i planując utworzenie kolejnych obiektów repozytoriów doszedłem do wniosku, że warto zaoszczędzić sobie trochę czasu i napisać uniwersalny (na ile to możliwe) obiekt bazowy repozytorium. Obiekt ten powinien zawierać podstawowe metody manipulacji i dostępu do danych. Dużym ułatwieniem jest to, że wszystkie obiekty dziedziny dziedziczą po obiekcie Entity (przed refaktoringiem BaseEntity), który zawiera pole Id z bazy danych oraz ważną z punktu widzenia NH implementacje metod E...
Przed przystąpieniem do właściwych prac związanych z zapowiadanymi w ostatnim wpisie statystykami chciałem napisać jeszcze jeden test związany z zapisem danych do bazy. Chodziło o zapis obiektów kadencji i sprawdzenie czy zapisywany jest cały graf obiektów, czyli kadencja > posiedzenia > głosowania itd. Myślałem, że będzie to tylko formalność, ale jak to zazwyczaj w takich sytuacjach bywa nie obeszło bez problemów. Na szczęście były to tylko przejściowe problemy. W przypadku NHibernate (Fluent NHibernate...
W tym wpisie omówione zostaną materiały (i nie chodzi tutaj o krawiectwo), jakie mogą być wykorzystane pokrywanie figur w scenie 3D.
W przyszłym tygodniu będę mocno zajęty dlatego już dziś opublikuję dwa posty jako konkursowe przyszłotygodniowe ;-). Mam nadzięję, że nie jest to wbrew zasadom. Dziś będzie krótki wpis na temat sposobu na zrobienie na zwykłym panelu FlowLayoutu. Bardzo użyteczna funkcja np. gdy nad Gridem chcemy mieć filtry i chcemy żeby filtry pływały w zależności od rozmiaru okna jeden za drugim. Albo np. do napisania p...
To jest kolejny wpis na przyszły tydzień ;-), albo jeśli ktoś woli niech tydzień blogowania zaczyna się od niedzieli ;-). Teraz napiszę o InteliGUI, nowym pomyśle na zastosowanie sieci Hopfielda. W całym przedsięwzięciu chodzi o to, żeby uzyskać inteligentne GUI tzn. takie które będzie się uczyć sekwencji jakich używamy i samo będzie proponować co chcemy zrobić na podstawie kilku kroków. Oczywiście to rozwiązani jakie opiszę...
Plik konfiguracyjny. Chcę, aby przy uruchomieniu programu utworzył się obiekt klasy Settings i aby wszystkie inne klasy z niego korzystały. Wyjścia są wg mnie trzy, ale tylko jedno jest dobre : utworzyć obiekt i przekazywać do niego referencje wszędzie tam, gdzie inny obiekt będzie z niego chciał skorzystać -- to dość toporne rozwiązanie, musimy pamiętać o referencjach i o tym, aby przypadkowo nie stworzyć innego obiektu. W moim przypadku nie byłoby z tym kłopotu, ale w projektach bardziej rozbudowanyc...
Zacznę kontrowersyjnie. Lubię jak aplikacja nie działa, tak jak powinna. To znaczy - niekoniecznie lubię sam fakt niepoprawnego działania, ale dzięki temu mam możliwość odpalenia debugger’a (lub innego użytecznego narzędzia – głównie SysInternals), aby dowiedzieć się dlaczego i spróbować to naprawić. Ostatniego czasu ciekawych wrażeń dostarcza(ło) mi IE8. Pewnego dnia, bez powodu, IE na moim laptopie zaczął raczyć mnie niniejszym błędem jeszcze nawet przed tym jak się dobrze uruchomił:
[XNA] Kamera FPP Bardzo ważnym elementem gry jest kamera. Można ją sobie rzeczywiście wyobrazić jako kamerę przekazującą obraz z konkretnego miejsca sceny, pod odpowiednim kątem i wysyłającą obraz na ekran. Pod spodem siedzi jednak kilka macierzy. Każdy wierzchołek jest przez te macierze mnożony, a finalnym wynikiem jest pozycja (ważne, dwuwymiarowa) na ekranie. Dziś krótko o podstawowej kamerze typu First Person Perspective. Oparta jest na pozycji oraz dwóch kątach, można spokojnie skojarzyć to sobie ze...
Od pewnego czasu stałem przed problemem synchronizacji danych znajdujących się w bazie danych i danych pobranych ze strony Sejmu. Założyłem sobie, że za każdym razem, przy imporcie danych będę pobierał i przetwarzał wszystkie dane ze strony Sejmu dla określonej kadencji, porównywał z tym co już mam w bazie danych i zapisywał tylko dane, które pojawiły się na stronie od czasu ostatniego importu. Wynikiem tych założeń były dwa obiekty kadencji (grafy obiektów), które trzeba ze sobą porównać, a różnicę zap...
Osadzanie XNA 4.0 w Windows Forms XNA 4.0 jest bardzo przyjemnym frameworkiem do programowania gier: ma bogatą bibliotekę matematyczną, kilka predefiniowanych efektów (shaderów), dzięki którym można po krótkiej chwili zobaczyć efekt swojej pracy na ekranie. Brakuje jej natomiast bardzo według mnie istotnego elementu, jakim jest biblioteka do obsługi graficznego interfejsu użytkownika (Graphica User Interface, dalej będę posługiwał się skrótem GUI). Z drugiej strony, pisząc już kilka lat aplikacje pod .NE...