BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











ReMinder v 1.0 – Jak to zrobić?

10-12-2004 17:22 | mat_sk
W artykule zostało opisane jak wykonać: dodanie ikonki naszego programu do paska zadań, animację ikonki znajdującej się na pasku zadań, animację pojawiającego się okienka na ekranie oraz jak wykonać prosty instalator, dzięki któremu nasza aplikacja będzie uruchamiała się wraz ze startem windowsa.

ReMinder v 1.0 – Jak to zrobić?

 

Wstęp:

 

Celem artykułu jest przedstawienie sposobu zaimplementowania kilku problemów:

  • dodania ikony naszej aplikacji do paska zadań (tray icon);
  • animacja pojawiającego się okienka z wiadomością;
  • animacja umieszczonej na pasku ikony;
  • wykonanie prostego instalatora do programu, który umieszcza informację o programie w rejestrze. Dzięki temu ReMinder będzie mógł uruchamiać się wraz ze startem windowsa.

Artykuł prezentuje realizację tych problemów na przykładzie dołączonej aplikacji ReMinder. Aplikacja ta jest bardzo prostym „przypominaczem”. Program składa się z dwóch okienek; jedno służy do dodawania wiadomości, natomiast drugie do wyświetlania ich. Użytkownik może do programu dodawać wiadomości oraz wybierać datę i godzinę ich wyświetlania. Wiadomości te są przechowywane w pliku w formacie XML. W programie, natomiast, są reprezentowane przez klasę Wiadomosc oraz kolekcję obiektów klasy Wiadomosc - klasę Wiadomosci.
Wygląd dołączonej aplikacji przedstawiają poniższe zrzuty ekranów:

  • Okno służące do dodawania wiadomości, o których użytkownik chce być powiadomiony w przyszłości:

  •  Okno służące do wyświetlania użytkownikowi przypomnień:

  • Widok ikonki programu na pasku zadań:

 

 

Jak dodać ikonę do paska zadań?

 

Może być wiele powodów, dla których chcielibyśmy umieścić ikonkę naszej aplikacji na pasku zadań. Na przykład firewall, program antywirusowy oraz wszelkiego rodzaju komunikatory, czyli głównie aplikacje, które działają w tle i są w każdym momencie dostępne dla użytkownika lub wykonują jakieś funkcję na określone zdarzenie np. czasowe.
W Visual Studio .Net mamy gotową kontrolkę - NotifyIcon, która reprezentuje ikonę na pasku zadań. Należy jeszcze dodatkowo odpowiednio ustawić kilka jej właściwości i dodać kilka funkcji, dzięki którym program będzie zachowywał się zgodnie z przyzwyczajeniami użytkowników. W poniższych krokach przedstawiam jak dodać ikonę aplikacji do paska zadań. Dokładniej mówiąc, omawiam postępowanie w przypadku aplikacji ReMinder:

  1. Z toolboxa wybieramy kontrolkę NotifyIcon i umieszczamy ją na formatce. Kontrolka otrzyma domyślną  nazwę: notifyIcon1. W razie potrzeby możemy ją zmienić w własnościach tej kontrolki.
  2. Następnie dodajemy do projektu z toolboxa menu kontekstowe (ContextMenu). Ustawiamy własności oraz wpisujemy opcje menu. W dołączonym do artykułu programie są to opcje: Pokaż, Schowaj, Koniec. Następnie musimy oprogramować zdarzenie kliknięcia na każdą z opcji menu;
  3. W własnościach stworzonej wcześniej notifyIcon1 ustawiamy własność ContextMenu na utworzone w punkcie 4 menu kontekstowe;
  4. Ustawiamy pozostałe własności obiektu notifyIcon1:
    Text - w własność tę wpisujemy tekst, który ma się pojawiać po najechaniu kursorem myszki na ikonkę na pasku zadań,
    Visible - ustawiamy na true, aby po uruchomieniu programu uwidoczniła się ikonka na pasku zadań;
    Icon – wybieramy ikonę, która ma być wyświetlana.
  5. Zmieniamy własność ShowInTaskbar w oknach aplikacji na false w celu nie wyświetlania informacji o nich na pasku zadań;
  6. Następnie musimy przeciążyć funkcję OnClosing dla głównego okna aplikacji, aby po naciśnięciu w nim na krzyżyk nie wyłączyła się cała aplikacja. Poniższy kod prezentuje jak tego dokonać:
    [Kod C#]

    protected override void OnClosing(CancelEventArgs e)
    {
        e.Cancel = true;
        this.WindowState = FormWindowState.Minimized;
        Hide();
    }

    W wyniku wykonania się powyższego kodu okno aplikacji zminimalizuje się.
  7. Teraz musimy stworzyć funkcję, która będzie wyświetlać zminimalizowane, ale nie widoczne na pasku zadań okno naszej aplikacji. W tym celu piszemy następującą funkcję:
    [Kod C#]

    public void Pokaz()
    {
        Show();
        this.WindowState = FormWindowState.Normal;
    }
  8. Można także dodać funkcję minimalizującą główne okno aplikacji: 
    [Kod C#]

    public void Minimalizuj()
    {
        this.WindowState = FormWindowState.Minimized;
        Hide();
    }
  9. Ostatecznie pozostaje nam już tylko obsłużyć zdarzenie DoubleClick dla stworzonego w pierwszych krokach obiektu notifyIcon1. Wówczas w wyniku podwójnego kliknięcia na ikonkę na pasku zadań pojawi się na ekranie okno główne tworzonej aplikacji. Realizujemy to następująco:
    [Kod C#]

    private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
    {
         if (FormWindowState.Minimized == WindowState)
              Pokaz();
    }
    Gdzie Pokaz() to zaimplementowana w punkcie 9. funkcja.

Mam nadzieję, że na podstawie powyższych wskazówek, każdy potrafi już umieścić ikonkę swojej aplikacji na pasku zadań.

 

Jak zrobić animację pojawiania i chowania się

okienka z wiadomością dla użytkownika?

 

Najpierw zastanówmy się jednak, czym jest animacja?


Animacja jest to szereg następujących po sobie kolejno klatek, zdjęć, obrazków w określonym interwale czasowym. Między kolejnymi klatkami powinny być jak najmniejsze różnice, a interwał czasowy powinien być dobrany w taki sposób, aby obserwator nadążał za animacją oraz żeby animacja nie "cięła się".

W programie ReMinder animacja okna z wiadomością polega na tym, że w określonym interwale czasowym wysuwa się z prawego dolnego rogu ekranu okno z wiadomością, a następnie po upływie 10 sekund okno chowa się przesuwając w dół. Do obsługi zdarzeń czasowych wykorzystałem w programie dwie kontrolki klasy Timer, odpowiednio ustawione na interwał czasowy: 10 i 3000 milisekund. Pierwszy timer ma na celu animowanie pojawiania się okienka oraz animowanie ikony znajdującej się na pasku zadań. Drugi timer, natomiast, zarządza pojawiającymi się wiadomościami. Do jego zadań należy kontrolowanie terminów pojawiania się wiadomości, usuwanie „przegapionych” oraz usuwanie tych, które były już wyświetlone. Przedstawię teraz w punktach sposób postępowania w programie ReMinder w celu zrealizowania omówionej animacji:

  1. Dodajemy do okna głównego aplikacji z toolboxa dwa obiekty typu Timer, ustawiamy ich własności Interval na odpowiednio wartości: 10 i 3000, oraz własności Enable odpowiednio w pierwszym na false, a w drugim na true.
  2. Następnie musimy obsłużyć zdarzenia Tick dla obu timerów. Nie umieszczam tutaj całego kodu tych funkcji, omówię tylko najważniejsze ich elementy w dwóch poniższych punktach.
  3. Aby nasza animacja wykonała się w dokładnie zamierzonym przez nas miejscu, czyli w prawym dolnym rogu ekranu, musimy pobrać z systemu rozdzielczość ekranu. Czynność tę wykonujemy następująco:
    [Kod C#]

    Screen screen = Screen.PrimaryScreen;
    Swidth=screen.Bounds.Width;
    Sheight=screen.Bounds.Height;

    Dzięki temu animacja pojawi się zawsze w tym samym miejscu, niezależnie od ustawionej rozdzielczości.
  4. Animacji okienka z wiadomością dokonują poniższe dwie linijki kodu wykonywane w zależności od położenia okienka na ekranie, etapu wykonania animacji oraz kierunku poruszania się okienka:
     Do pojawiania się okienka:   
    [Kod C#]

    okno.Location = new Point(okno.Location.X, okno.Location.Y - 1);
    Do chowania się okienka:
    [Kod C#]

    okno.Location = new Point(okno.Location.X, okno.Location.Y + 1);
    W celu przeanalizowania całego kodu funkcji obsługujących zdarzenie Tick dla opisywanych timerów, odsyłam czytelników do kodu dołączonej aplikacji.

Jak wykonać animację ikony znajdującej się na pasku zadań?

W programie ReMinder animację ikony rozumiemy jako wymienianie jej w określonym interwale czasowym. W tym celu wykorzystano trzy różne przedstawione poniżej ikony: 

         

zadaniem tych ikon jest animować obracający się znak zapytania. W aplikacji ReMinder ikona jest animowana tylko w czasie pojawiania oraz chowania się okienka z wiadomością dla użytkownika. Do obsługi tej animacji wykorzystano również powyżej opisane timery. Poniżej przedstawiłem funkcję wymieniającą ikonę aplikacji na pasku zadań:

[Kod C#]

 private void animujIkone()
 {
     if (obrot == 4)
         obrot = 1;
     else 
         obrot++;
     switch (obrot)
     {
         case 1: this.notifyIcon1.Icon = Icon1; break;
         case 2: this.notifyIcon1.Icon = Icon2; break;
         case 3: this.notifyIcon1.Icon = Icon3; break;
         case 4: this.notifyIcon1.Icon = Icon2; break;
     }
 }

gdzie zmienna obrot mówi, która klatka animacji ma być teraz wyświetlona.

Jak wykonać prosty instalator programu, który umieści

wpis do rejestru, dzięki któremu nasza aplikacja będzie

uruchamiała się wraz ze startem windowsa?

Opis tworzenia prostego instalatora do stworzonej przez siebie aplikacji został już opisany na CodeGuru w artykule pod tytułem: „Przygotowanie aplikacji do dystrybucji” autorstwa Waltera Łuszczyka. Wydaje mi się, więc zbędnym powtórne omawianie tego problemu. W większości kroków tworzenia programu instalacyjnego dla aplikacji ReMinder wykorzystałem wskazówki pana Waltera. Jedyne różnice pojawiły się w fazie dopisywania do rejestru. Dokładnie mówiąc, w programie ReMinder musimy dokonać takiego wpisu do rejestru, aby uruchamiał się wraz ze startem windowsa. Najpierw musimy przejść w projekcie instalatora do widoku rejestru (View -> Registry). Następnie postępujemy zgodnie z poniższymi wskazówkami.
Aby  osiągnąć wyżej postawiony cel musimy dodać do następującego klucza w rejestrze:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
poniższy wpis: [TARGETDIR]ReMinder.exe. Dzięki temu nasza aplikacja będzie uruchamiała się wraz ze startem windowsa wszystkim użytkownikom systemu.
Jeśli natomiast chcemy, aby aplikacja uruchamiała się przy starcie windowsa tylko użytkownikowi, który ją zainstalował, wówczas musimy dodać wpis: [TARGETDIR]ReMinder.exe  do klucza: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.

 

Podsumowanie:

 

Mam nadzieje, że wśród czytelników znajdą się takie osoby, które wykorzystają w swoich aplikacjach zaproponowane przeze mnie rozwiązania problemów:

  • dodania ikonki programu do paska zadań (tray icon);
  • animowania okienka;
  •  animowania znajdującej się na pasku zadań ikony programu;
  • dodania do rejestru wpisu, dzięki któremu aplikacja uruchamia się wraz ze startem windowsa.

Załączniki:

Komentarze 6

BeeKeeper
BeeKeeper
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Autor bardzo kompleksowo podszedł do zagadnienia. Mysle, że rozwiązał kilka problemów jak usprawnić działanie aplikacji. Podobało mi się!
jedrekwie
jedrekwie
5 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Calkiem calkiem.... Wlasciwie ten artykul moglby sie znalezc w sekcji "How to...", bo artykul w tym przypadku to chyba nazwa "zbyt dumna". Oceny nie poprawia tez kilka nieciekawych sformulowan typu "sposobu zaimplementowania kilku problemów". Jak mozna zaimplementowac problem...??
boho
boho
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
bardzo pozyteczna rzecz opisana w przystepny sposob i ze znakomitym przykladem. mysle, ze sila tego artykulu lezy w prostocie przedstawienia, a sam program doskonale obrazuje mechanizmy dzialania animacji ikony i okienka, tray icon oraz wpisow do rejestru.
BezPseudonimu
BezPseudonimu
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Artykuł bardzo ciekawie i treściwie opisuje temat. Drobne potknięcia językowe nie wpływają na to, że na pewno skorzystam z rozwiązania - opis zagadnień dodatkowych (animacje) wpływa pozytywnie na użyteczność artykułu.
User 79017
User 79017
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0

Artykuł dosyć prosty, ale mimo to może być dla wielu osób przydatny. Niestety przedstawione zagadnienia nie są zbyt dokładnie opisane – może warto byłoby trochę bardziej zagłębić się w szczegóły?

Drobne potknięcia językowe i edytorskie (nagłówki, wypunktowania) nie wpływają oczywiście na merytoryczną ocenę artykułu, ale niepotrzebnie utrudniają jego czytanie.

User 85938
User 85938
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
W tym rozwiazaniu jest jedna mala niedogodnosc, z ktora nie wiem jak sobie poradzic. Zeby wylogowac uzytkownika lub wylaczyc komputer trzeba najpierw wylaczyc recznie program. Moze ktos ma pomysl jak to poprawic? Chcialbym, aby przy zamykaniu systemu odpowiednia metoda sie wywolala, ale nic dzialajacego nie wymyslilem. Probowalem m.in. z ShutdownEventHandler, ale nic mi nie wyszlo. Wszelkie rady i pomysly mile widziane :)
pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.