wskazówki do napisania prog. w Borland C++

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
slawek55
Użytkownik
Posty: 475
Rejestracja: 16 sie 2005, 11:47
Lokalizacja: Szczecin

wskazówki do napisania prog. w Borland C++

Post autor: slawek55 » 08 lip 2006, 6:19

cześć.

Chciałem proić o pomoc.
Dawno nie pisałem nic w Borland Builder C++ a potrzebuję banalnie prosty program, który umieszcza swoją ikonę w Systray'u i po kliknięciu pokazuje się.
Program ma być banalnie prosty bo założenie jest takie aby odczas uruchamiania pokazywał się w Tray'u i jak pisałem po kliknięciu w ikone pokazywał się a ma służyć do automatycznego zamykania WinXp.

Prosze o pomoc bo niezabardzo więm jak się do tego zabrać zwłaszcza obsługa tray'a.
Bardzo bardzo dawno tego nie robiłem i mam pewien kłopot w tym.

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 08 lip 2006, 22:46

:mrgreen:
Trzy lineczki do poczytania do poduszki, czy jak tam lubisz....
o systemowej strukturze NOTIFYICONDATA, funkcji Shell_NotifyIcon() oraz takie ogólne...
:arrow: http://msdn.microsoft.com/library/defau ... fyicon.asp
:arrow: http://msdn.microsoft.com/library/defau ... ondata.asp
:arrow: http://msdn.microsoft.com/library/defau ... askbar.asp

A w załączniku programik demo...wydziergany w Builder 6 Personal
Jak go odpalisz, to on sobie zainstaluje ikonkę na systemowym podajniku,
jak ją kilkniesz lewą myszą to okno się schowa, a ikonka się zmieni
jak klikniesz ponownie to wróci jak było wcześniej, a jak zamkniesz program to ikonka
sie odinstaluje z systraya...
:roll:

no to miłego dziubania,
pa,
tasza
Załączniki
bcb6_systray.zip
(29.74 KiB) Pobrany 874 razy

slawek55
Użytkownik
Posty: 475
Rejestracja: 16 sie 2005, 11:47
Lokalizacja: Szczecin

Post autor: slawek55 » 09 lip 2006, 8:46

Dziękuję.
Już ktoś napisał że jetseś super, genialna, wielka ... więc.. nie będę się powtarzał ale przyzanaję że to prawda, święta.

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 10 lip 2006, 11:00

oj...no wiesz....ale dzięki za miłe słowa....

i sorki, że teraz dopiero a nie wieczorem, przy Elportalu miałam ubaw :roll:

w załączniku masz odpowiednio skomentowane pliki main.c oraz main.h
to co dopisałam ręcznie jest pomiedzy //++tasza....//--tasza
szablony handlerów zdarzeń OnCreate(), OnClose() wygenerował automat,
treść jest moja... OnSystemTrayMessage() napisany od zera....

aha, może kilka słów...
tak jak masz to napisane w main.h - powiązanie własnych komunikatów z metodami
do obsługi jest w takim super-makrze MESSAGE_MAP
tę mape deklaruje się wewnątrz klasy, kompilator sobie te makra rozwikła na odpowiedni kod w C++
ogólna zasada jest taka:
definiujesz własny identyfikator meldunku np.: MSG_TRAYICONCLICKED
a potem kojarzysz go z handlerem...

Kod: Zaznacz cały

BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER( identyfikator_komunikatu, TMessage, nazwa_handlera)
END_MESSAGE_MAP(TForm)
handler musi być zadeklarowany tak:

Kod: Zaznacz cały

void __fastcall nazwa_handlera ( TMessage &msg ) {
}
w msg dostaniesz referencję do obiektu klasy TMessage, w nim będzie zestaw
informacji właściwy dla danej akcji systemowej....

uff, no to wszystko chyba...
jak coś nie halo - pytaj proszę...

pozdrawiam,
tasza
Załączniki
main_c_h.zip
(2.64 KiB) Pobrany 784 razy

slawek55
Użytkownik
Posty: 475
Rejestracja: 16 sie 2005, 11:47
Lokalizacja: Szczecin

Post autor: slawek55 » 10 lip 2006, 11:07

Dzięki za odpowiedź.
Z miłą chęcią bym pytał ale nie mogę się ośmielić, ponieważ bym Cię chyba zameczył pytaniami.
U mnie jest tak że im w coś barzdiej sie wgłębiam tym mam więcej pytań wątpliwości, niejasności, które sie mnożą i mnożą. A jak sam próbuję szukać odpowiedzi w necie to czasami trafiam na takie sprzeczności, że coraz bardziej wtedy wariuję i mam juz taki mętlik że szkoda gadać.

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 10 lip 2006, 11:16

hmm, może chcesz to wszystko sobie przyswoić zbyt szybko....
i czasem właśnie jest takie wrażenie - zupełnego haosu i zagubienia...
ale głowa do góry, poukłada się...na to po prostu potrzeba troszkę czasu
więc pytaj proszę - BCB nie mam teraz pod ręką, ale jak coś - odpiszę Ci wieczorem
tasza

slawek55
Użytkownik
Posty: 475
Rejestracja: 16 sie 2005, 11:47
Lokalizacja: Szczecin

Post autor: slawek55 » 10 lip 2006, 11:30

To może na początek coś niby prostego.

ak to jest z używaniem funkcji WinAPI w BCB. Pytam o to ponieważ pisząc Visual Basicu 6 każdą funkcę API musiałem zadeklarować w sposób:
Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

A dlaczego w BCB nie robi sie tego. Przecież to też w pewnym sensie korzystanie z bibliotek dll Windowsa.
NIe załącza się też czasami pliku shellapi.h
Dla przykładu funkcja API: GetCursorPos W VB6 aby z tego skorzystać trzeba zadeklarować ją jak wyżej, a dlaczego w BCB tak nie jest

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 10 lip 2006, 22:15

no faktycznie, niby proste ale....
:roll:
Utwórz proszę nowy projekt, z jedną formą i jednym na niej guzikiem,
w handlerze Button1Click() zawołaj funkcję Win32 API o nazwie MessageBox()

Kod: Zaznacz cały

::MessageBox ( this->Handle, "komunikat", "tytuł", MB_ICONEXCLAMATION );
Jak już się nacieszysz tym messagebox-em to ustaw się kursorem
na linii #include <vcl.h> i wtedy PKM* potem "Open file at cursor"...
w vcl.h znajdź linię #include <basepch0.h> i to samo
potem #include <system.hpp> (odpowiednik system.pas z Delphi :idea: )
a potem #include <sysmac.h>, #include <windows.h>, #include <winuser.h>
w ten sposób otwierając kolejne wołające się pliki nagłówkowe doklikasz się
do miejsca gdzie siedzi sobie funkcja MessageBox (A to zwykła, W - to dla unicode)

Kod: Zaznacz cały

WINUSERAPI int WINAPI MessageBoxA( IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType);
a teraz zerknij na zrzutkę ekranu z załącznika...
wywołując polecenie 'Project Manager' z głównego menu 'View'
możesz sobie porozwijać to drzewko i tam znajdziesz całe stadko
plików nagłówkowych, które gdzieś tam po drodze się zainkludowały...
i ShellApi i WinUser i wiele wiele innych...

:mrgreen:

tasza

-----------------
* - PKM - prawy klawisz myszy
Załączniki
gdzie_jest_MessageBox.GIF
(43.35 KiB) Pobrany 728 razy

ODPOWIEDZ