Tworzenie aplikacji Windows Biblioteki DLL. Aplety panelu sterowania (Delphi)

Wielkość: px
Rozpocząć pokaz od strony:

Download "Tworzenie aplikacji Windows Biblioteki DLL. Aplety panelu sterowania (Delphi)"

Transkrypt

1 Jacek Matulewski Tworzenie aplikacji Windows Biblioteki DLL. Aplety panelu sterowania (Delphi) Ćwiczenia Toruń, 13 grudnia 2002 Najnowsza wersja tego dokumentu znajduje się pod adresem Źródła opisanych w tym dokumencie programów znajdują się pod adresem 1

2 I. Spis treści I. Spis treści... 2 II. Procedury i funkcje w bibliotekach DLL Tworzenie biblioteki DLL eksport procedur i funkcji Statyczne łączenie bibliotek DLL import funkcji Dynamiczne łączenie bibliotek DLL Powiadamianie biblioteki o załadowaniu jej lub usunięciu z pamięci... 6 III. Formy w bibliotece DLL... 8 IV. Wykorzystanie skompilowanych bibliotek Wykorzystanie biblioteki DLL w Visual Basic Uruchamianie funkcji z linii komend (RunDLL/RunDLL32) V. Aplet panelu sterowania

3 II. Procedury i funkcje w bibliotekach DLL 1. Tworzenie biblioteki DLL eksport procedur i funkcji Najprościej stworzyć bibliotekę DLL (ang. dynamic linked library) korzystając z kreatora ukrytego w menu New..., na zakładce New pod pozycją DLL Wizard (w starszych wersjach Buildera po prostu DLL). Dla naszych potrzeb nie trzeba zmieniać opcji w okienku dialogowym kreatora. Powstanie plik pas rozpoczynający się od słowa kluczowego library. W module możemy zdefiniować procedury i funkcje, a następnie wyeksportować je. Zdefiniujmy pięć najprostszych procedur i funkcji, których jedynym działaniem jest wyświetlanie komunikatów w stylu oto jestem (wywołanie funkcji ShowMessage wymaga dołączenia modułu Dialogs do sekcji uses): procedure Test1; ShowMessage('Test1 - Procedura znajduje sie w bibliotece DLL'); // procedure Test2; StdCall; ShowMessage('Test2 - Procedura znajduje sie w bibliotece DLL'); // procedure Procedura_wewnetrzna; ShowMessage('Procedura_wewnetrzna - Moze byc wywolana tylko przez inny skladnik DLLa'); procedure Test3; StdCall; ShowMessage('Test3 - Wywołanie procedury wewnętrznej'); Procedura_wewnetrzna(); // function Test4(argument :String) :Integer; StdCall; ShowMessage('Test4 - Wywołanie funkcji wewnętrznej'+chr(13)+ 'argument: "'+argument+'"'+chr(13)+'funkcja zwraca liczbe losowa'); Randomize(); Test4:=Random(10000); //zwraca liczbe pseudolosowa Dwie pierwsze procedury (Test1 i Test2) różnią się jedynie modyfikatorem StdCall. Jest on niezbędny gdy procedura ma być wykorzystana przy dynamicznym łączeniu biblioteki w innych platformach 3

4 programistycznych niż Delphi (np. w C++ Builderze) 1 lub gdy procedura przyjmuje jakieś argumenty. Test3 wywołuje funkcję wewnętrzną o nazwie Procedura_wewnetrzna. Procedura ta nie będzie wyeksportowana, a więc nie będzie dostępna z zewnątrz biblioteki, co nie przeszkadza w jej wywołaniu przez inne funkcje z tej samej biblioteki. Wreszcie Test4 jest przykładem wyeksportowanej funkcji przyjmującej argumenty (w naszym przypadku łańcuch) i zwracający wartość (tu będzie to liczba naturalna generowana pseudolosowo). Aby wyeksportować zdefiniowane funkcje należy dodać do kodu sekcję exports, w której umieszczamy listę eksportowanych funkcji. W naszym przypadku jest to: exports Test1 index 1, Test2 index 2, Test3 index 3, Test4 index 4; Po skompilowaniu biblioteki otrzymamy plik z rozszerzeniem DLL. Ważną własnością tego pliku jest jego uniwersalność można go bowiem wykorzystać nie tylko w projektach tworzonych w tym samym środowisku firmy Borland. Jest on zgodny ze specyfikacją bibliotek DLL Windows i może być np. wykorzystany w platformach programistycznych Microsoft Visual C++ lub Visual Basic, a nawet z linii komend za pomocą polecenia RunDLL Statyczne łączenie bibliotek DLL import funkcji Aby dołączyć bibliotekę DLL do aplikacji w sposób statyczny (biblioteka ładowana jest do pamięci zaraz po uruchomieniu aplikacji i pozostaje tam, aż do zakończenia działania programu) należy dodać do sekcji interface modułu aplikacji, w którym importowane funkcje mają być użyte deklaracje (dokładnie odpowiadające deklaracjom tych funkcji w bibliotece DLL): procedure Test1; procedure Test2; StdCall; procedure Test3; StdCall; function Test4(argument :String) :Integer; StdCall; W sekcji implementation zamiast definicji funkcji wystarczy wskazać odpowiednie wejście do biblioteki DLL: procedure Test1; external 'Project1.dll'; procedure Test2; external 'Project1.dll'; procedure Test3; external 'Project1.dll'; function Test4; external 'Project1.dll'; Widać, że słowo kluczowe external zastępuje kod... end implementujący funkcję. Konstrukcja importująca funkcję może być bardziej rozbudowana: procedure Nazwa_procedury; external 'Biblioteka.dll' name Nazwa_procedury_w_DLL index n; Funkcja może być wskazana przez nazwę lub przez indeks. Jeżeli nie korzystamy ani ze słowa kluczowego name, ani z index procedura lub funkcja jest pobierana przez nazwę identyczną jak nazwa zadeklarowanej w module funkcji czy procedury. W ogólności słowo kluczowe pozwala importować funkcję o innej nazwie niż zadeklarowana w module. 1 Dzieje się tak dlatego, że C/C++ nie posiada procedur, które nie pobierają argumentów funkcja C++, nawet jeżeli w kodzie nie pobiera argumentów, w rzeczywistości pobiera argument typu void. Zaś w przypadku procedur z argumentami różna jest kolejność ich przekazywania. 4

5 Stwórzmy nowy pusty projekt i zachowajmy go np. jako Projekt2. Następnie umieśćmy w module (Unit2.pas) powyższe deklaracje i importy funkcji. Możemy teraz bez ograniczeń wykorzystywać funkcje z biblioteki DLL tak, jakby znajdowały się w bieżącym projekcie. Można je na przykład uruchomić naciskając przycisk Button1: procedure TForm1.Button1Click(Sender: TObject); var wynik :Integer; Test1; Test2; Test3; wynik:=test4('przykładowy łańcuch'); ShowMessage('Wynik funkcji Test4: '+IntToStr(wynik)); 3. Dynamiczne łączenie bibliotek DLL Choć łączenie statyczne jest proste, to jednak nie wykorzystuje zalety bibliotek DLL pozwalającej oszczędzać zajmowaną ilość pamięci komputera. W łączeniu dynamicznym biblioteka jest ładowana tylko na czas wykorzystania jej zawartości, potem może być usunięta z pamięci. Łączenie dynamiczne zajmuje nieco czasu, więc nie powinno być wykonywane przed każdym wykorzystaniem często wywoływanej funkcji, bo w znaczący sposób spowolni to działanie programu. Łączenie dynamiczne jest nieco trudniejsze w realizacji, ale za to w pełni wykorzystuje zalety DLL. Jak już wspomniałem można bibliotekę DLL załadować do pamięci i przestrzeni adresowej aplikacji w dowolnym momencie działania tej aplikacji za pomocą funkcji WinAPI LoadLibrary(). Nazwa pliku biblioteki nie musi być znana w momencie kompilacji występuje w funkcji ładującej jedynie jako łańcuch. Każda wyeksportowana funkcja, którą chcemy wykorzystać musi być indywidualnie zaimportowana, a dokładniej aplikacja musi pobrać adres funkcji w swojej przestrzeni adresowej po załadowaniu biblioteki (służy do tego funkcja WinAPI GetProcAddress()). procedure TForm1.Button1Click(Sender: TObject); type //Typy funkcji z DLL DLLTestType = procedure; DLLTestType4 = function(argument :String) :Integer; StdCall; //Tu ma znaczenie StdCall bo pojawia sie argument var DLLHandle :THandle; ATest1,ATest2,ATest3 :DLLTestType; ATest4 :DLLTestType4; wynik :Integer; DLLHandle:=LoadLibrary('Project1.dll'); if (DLLHandle<>0) then ShowMessage('Wczytanie biblioteki udało się') else ShowMessage('Wczytanie biblioteki nie powiodło 'Test3'); if (@ATest1=nil) then ShowMessage('Uruchomienie Test1 nie jest możliwe') else ATest1; if (@ATest2=nil) then ShowMessage('Uruchomienie Test2 nie jest możliwe') else ATest2; 5

6 if then ShowMessage('Uruchomienie Test3 nie jest możliwe') else 'Test4'); if then ShowMessage('Uruchomienie Test4 nie jest możliwe') else wynik:=atest4('przykładowy łańcuch'); ShowMessage('Wynik funkcji Test4: '+IntToStr(wynik)); if (FreeLibrary(DLLHandle)) then ShowMessage('Usunięcie biblioteki z pamięci udało się') else ShowMessage('Usunięcie biblioteki z pamięci nie powiodło się'); Jak wspominałem wcześniej dynamiczne łączenie biblioteki realizowane jest przez funkcję WinAPI LoadLibrary() pobierającą nazwę biblioteki, a zwracającą, jeżeli połączenie się powiodło, uchwyt do tej biblioteki (uchwyt może być przechowywany w zmiennej typu THandle). Podanie samej nazwy biblioteki bez jego ścieżki jest wygodne, gdyż umożliwia to swobodne przemieszczanie pliku biblioteki między katalogiem aplikacji lub katalogiem bieżącym w trakcie jej projektowania aplikacji, a katalogiem systemowym (WINDOWS\SYSTEM), katalogiem głównym Windows lub wreszcie innym katalogiem wymienionym w zmiennej środowiskowej PATH po jej zainstalowaniu. Do trzech zmiennych proceduralnych 2 ATest1 ATest3 pobierane są adresy funkcji Test1 Test3. W przeciwieństwie do C++ Buildera w przypadku procedur nie pobierających argumentów modyfikator StdCall nie ma żadnego znaczenia w Delphi. Zmienna proceduralna wykorzystywana jest identycznie jak nazwa funkcji. Wstawienie jej do kodu spowoduje wywołanie przechowywanej przez zmienną procedury. Można w identyczny sposób jak w przypadku zwykłej funkcji podawać argumenty. Modyfikator StdCall musi się pojawić w deklaracji funkcji Test4 ze względu na argument. Brak modyfikatora spowoduje wywołanie wyjątku EAccessViolation. Zwolnienie biblioteki możliwe jest dzięki funkcji WinAPI FreeLibrary(), której argumentem jest uchwyt do biblioteki. 4. Powiadamianie biblioteki o załadowaniu jej lub usunięciu z pamięci Można sobie wyobrazić bardziej skomplikowane od naszego wykorzystanie bibliotek DLL, która na przykład przy jej załadowaniu musi zainicjować zmienne globalne, tworzyć obiekty itp. Niezbędna do tego jest funkcja inicjująca, analogiczna do konstruktora obiektu oraz odpowiednik destruktora przy usuwaniu biblioteki z pamięci. Zgodnie ze specyfikacją WinAPI w bibliotece może znajdować się funkcja zwrotna o nazwie DllEntryPoint, która będzie wywoływana przez system w momencie ładowania i usuwania biblioteki z pamięci. W Delphi realizuje się to jednak nieco inaczej. W module System zadeklarowana jest zmienna o nazwie DLLProc typu proceduralnego TDLLProc = procedure (Reason: Integer); przyjmująca jeden argument naturalny. Jeżeli do tej zmiennej przypisana jest procedura, to jest ona wywoływana w momencie usunięcia biblioteki z pamięci oraz podłączenia jej lub odłączenia od wątku. W trakcie podłączania biblioteki nie jest wywoływana, ale w obrębie biblioteki może znajdować się sekcja... end., w której można umieścić dowolny kod np. uruchomienie DLLProc z odpowiednim argumentem. Często deklaruje się procedurę przypisywaną do DLLProc pod nazwą DllEntryPoint, ale nie jest to konieczne. 2 Wygodnie jest, jak zrobiono w tym przykładzie, zdefiniować typy dla importowanych typów funkcji 6

7 Zatem na końcu pliku biblioteki Project1.pas między i end dodajemy przypisanie procedury do zmiennej DLLProc oraz wywołujemy tą procedurę z argumentem oznaczającym włączenie biblioteki do przestrzeni adresowej aplikacji: ShowMessage('Biblioteka Project1.dll (kod główny biblioteki)'); DLLProc:=@DllEntryPoint; DllEntryPoint(DLL_PROCESS_ATTACH); end. Argument reason może przyjmować cztery wartości określone przez następujące stałe: DLL_PROCESS_ATTACH / DLL_PROCESS_DETACH gdy biblioteka jest włączona/wyłączona z wirtualnej przestrzeni adresowej procesu 3. Zdarza się to przy uruchomieniu/zamknięciu aplikacji (przy włączeniu jeszcze przed pokazaniem formy), jeżeli biblioteka jest ładowana statycznie i przy każdym wywołaniu LoadLibrary()/FreeLibrary() w przypadku ładowania dynamicznego. DLL_THREAD_ATTACH / DLL_THREAD_DETACH analogicznie jak wyżej, ale po utworzeniu przez proces wątku. procedure DllEntryPoint(reason :Cardinal); case (reason) of DLL_PROCESS_ATTACH: ShowMessage('DllEntryPoint - DLL_PROCESS_ATTACH '); DLL_PROCESS_DETACH: ShowMessage('DllEntryPoint - DLL_PROCESS_DETACH '); DLL_THREAD_ATTACH: ShowMessage('DllEntryPoint - DLL_THREAD_ATTACH '); DLL_THREAD_DETACH: ShowMessage('DllEntryPoint - DLL_THREAD_DETACH '); Po zmodyfikowaniu biblioteki (Project1) możemy sprawdzić kiedy inicjowana jest biblioteka przy statycznym (Project2) i dynamicznym jej dołączaniu (Project3). Warto zauważyć, że po zmianie biblioteki, właściwa aplikacja nie musi być nawet przekompilowywana. 3 W Win32 każdy proces ma osobną wirtualną przestrzeń adresową o wielkości 4GB, w odróżnieniu od wspólnej przestrzeni adresowej Win16. 7

8 III. Formy w bibliotece DLL. Korzystając z TDiskInfoPanel i przykładu IV.3 w części WinAPI napiszemy i umieścimy w bibliotece DLL formę pokazującą informacje o dyskach zainstalowanych w komputerze. Skopiujmy plik DiskInfo.pas zawierająca definicję i deklarację klasy TDiskInfoPanel. Stwórzmy bibliotekę DLL (New..., DLL) i dołączmy do niej te pliki (do sekcji uses należy dodać DiskInfo). Wygodne będzie przechowywanie globalnego (w obrębie modułu) wskaźnika do formy, zadeklarujmy więc zmienną typu wskaźnika do TForm: var DIPForm :TForm; Niezbędne będzie dodanie do uses modułu Forms. Ponadto potrzebujemy dwóch procedur tworzącej formę i usuwającej ją z pamięci. Pierwsza procedura procedure DIP_CreateForm(modal :Boolean) tworzy formę bez właściciela: DIPForm:=TForm.Create(nil); i zapisuje ją do zmiennej globalnej DIPForm. Następnie wykonywany jest kod, który jest kopią poleceń z Unit1.pas znajdującego się w przywołanym wyżej przykładzie WinAPI.IV.3 (zastąpiono jedynie Form1 przez DIPForm). I wreszcie na koniec pokazywana jest forma w sposób zależny od argumentu całej funkcji (modalnie tzn. uniemożliwiając dostęp do aplikacji zanim nie zostanie zamknięte wywołane okno lub jako zwyczajne okno): if (modal) then DIPForm.ShowModal else DIPForm.Show; Druga funkcja DIP_DestroyForm() najpierw zamyka formę, a następnie usuwa ją z pamięci (DIPForm.Free();). Istotne jest też przypisanie na powrót wskaźnikowi wartości nil. Uwaga! Prototypy obu form zostały napisane tak, żeby możliwe było ich uruchomienie przy dynamicznym załadowaniu biblioteki. Równocześnie pozwala to na używanie biblioteki z tymi funkcjami w innych aplikacjach, a także uruchamianie ich bezpośrednio z linii komend (zob. poniższe paragrafy). Oto kompletny kod biblioteki DLL: library Project1; uses SysUtils, Classes, Forms, //potrzebne do TForm DiskInfo; //zawiera TDiskInfoPanel var DIPForm :TForm; //Tworzenie formy procedure DIP_CreateForm(modal :Boolean); StdCall; const drvletterno=ord('z')-ord('a')-1; margines=10; var litera :Char; n, drvno :Integer; DiskInfoPanel :array[0..drvletterno-1] of TDiskInfoPanel; 8

9 polozenie_ostatniego :Integer; if (DIPForm<>nil) then if (modal) then DIPForm.ShowModal else DIPForm.Show; Exit; DIPForm:=TForm.Create(nil); DIPForm.Caption:='Informacja o dyskach'; DIPForm.Position:=poScreenCenter; polozenie_ostatniego:=0; n:=0; drvno:=0; for litera:='a' to 'z' do DiskInfoPanel[n]:=TDiskInfoPanel.Create(DIPForm); DiskInfoPanel[n].Left:=margines; DiskInfoPanel[n].DriveLetter:=litera; if (DiskInfoPanel[n].Values.disk_accesible) then DiskInfoPanel[n].Parent:=DIPForm; DiskInfoPanel[n].Top:= margines+drvno*(diskinfopanel[n].height+round(1.5*margines)); polozenie_ostatniego:=diskinfopanel[n].top+diskinfopanel[n].height; DIPForm.ClientWidth:=DiskInfoPanel[n].Width; Inc(drvno); end else DiskInfoPanel[n].Free(); DiskInfoPanel[n]:=nil; DIPForm.ClientHeight:=polozenie_ostatniego+margines; if (modal) then DIPForm.ShowModal else DIPForm.Show; //Usuwanie formy procedure DIP_DestroyForm; StdCall; if (DIPForm<>nil) then DIPForm.Close(); DIPForm.Free(); DIPForm:=nil; exports DIP_CreateForm, DIP_DestroyForm; DIPForm:=nil; end. 9

10 Uwaga! Proszę zwrócić uwagę, że zamknięcie okna nie powoduje usunięcia go z pamięci. Po zamknięciu okna na i zniknięciu jego reprezentacji graficznej na ekranie (albo przez użytkownika, albo metodą DIPForm.Close()) obiekt formy istnieje i wskaźnik jest różny od NULL. Dlatego na samym początku procedury DIP_CreateForm umieszczono warunek: if (DIPForm<>nil) then if (modal) then DIPForm.ShowModal else DIPForm.Show; Exit; chroniący przed ponownym tworzeniem obiektu. Jeżeli forma istnieje jest po prostu pokazywana. Inaczej powstałaby nowa forma, której wskaźnik zostałby zapisany do DIPForm, a do starej stracilibyśmy dostęp. Teraz zajmiemy się aplikacją, która posłuży do przetestowania biblioteki (menu New Application). Zapiszmy ją do tego samego katalogu co bibliotekę DLL jako Project2 i Unit2. Z przyciskami zwiążemy funkcje wyeksportowane w bibliotece: procedure TForm1.Button1Click(Sender: TObject); DIP_CreateForm(CheckBox1.Checked); // procedure TForm1.Button2Click(Sender: TObject); DIP_DestroyForm; 10

11 IV. Wykorzystanie skompilowanych bibliotek Stworzona w poprzednim paragrafie biblioteka DLL posłuży teraz jako przykład przenaszalności skompilowanej biblioteki na inne platformy programistyczne. Należy pamiętać o jej skopiowaniu do katalogu projektów lub, czego raczej nie polecam, do katalogu Windows. 1. Wykorzystanie biblioteki DLL w Visual Basic Istotną zaletą skompilowanej biblioteki DLL jest możliwość wykorzystania jej w dowolnym innym kompilatorze. Warunkiem jest wykorzystanie modyfikatorów umożliwiających ładowanie dynamiczne wyeksportowanych funkcji przez funkcję LoadLibrary(). Dla przykładu wywołajmy funkcję z naszej biblioteki DIP_CreateForm() z aplikacji napisanej w Visual Basicu. Informacje o wykorzystywaniu bibliotek DLL w Visual Basicu 6.0 można znaleźć w MSDN 4 Na początku musimy zadeklarować importowane funkcje w sekcji General, Declarations: Private Declare Sub DIP_CreateForm Lib "Project1" (ByVal modal As Boolean) Private Declare Sub DIP_DestroyForm Lib "Project1" () Uwaga! W Visual Basicu, w przeciwieństwie do C++ istnieje rozróżnienie między funkcjami i procedurami/subroutinami. Wobec tego, ponieważ nasze funkcje nie zwracają wartości, muszą być zadeklarowane słowem kluczowym Sub, a nie Function. Zapomnienie o tym będzie powodowało zgłaszanie błędów i wadliwe działanie aplikacji. Teraz możemy wywołać je w procedurach związanych z naciśnięciem klawiszy (zawartość formy powinna być identyczna jak w poprzednim paragrafie): Private Sub Command1_Click() DIP_CreateForm Check1.Value End Sub Private Sub Command2_Click() DIP_DestroyForm End Sub 2. Uruchamianie funkcji z linii komend (RunDLL/RunDLL32) W katalogu systemowym Windows (WINDOWS\SYSTEM32) znajduje się program RunDLL32.exe umożliwiający uruchamianie programów umieszczonych w bibliotekach DLL. Ponieważ wykorzystuje on funkcję WinAPI LoadLibrary() funkcje muszą pozwalać na ładowanie dynamiczne, tzn. powinny być zadeklarowane z odpowiednimi modyfikatorami np.: extern "C" declspec(dllexport) void stdcall DIP_CreateForm(bool); Składnia tego programu jest następująca: RUNDLL.EXE <dllname>,<entrypoint> <optional arguments> 4 Odpowiedni paragraf: MSDN Home > MSDN Library > Visual Basic 6.0 > Component Tools Guide (Pro, Enterprise only) > Accessing DLLs and the Windows API > Using a DLL Procedure in Your Application 11

12 W naszym przypadku musimy napisać: RunDLL32.exe Project1.dll,DIP_CreateForm 0 12

13 V. Aplet panelu sterowania Mając gotową bibliotekę DLL zawierającą klasę formy lub, jak jest w naszym przypadku, tworzącą dynamicznie formę możemy w kilku krokach uzyskać aplet panelu sterowania. Aplet taki jest w istocie biblioteką DLL zawierającą wyeksportowaną funkcję zwrotną o nazwie CPlApplet() i zmienionym rozszerzeniem nazwy pliku na.cpl. To jest jedyna funkcja za pomocą której Panel sterowania kontaktuje się z biblioteką. Zastępuje ona standardowe wejście do biblioteki. Funkcja zwrotna CPlApplet() zadeklarowana jest w WinAPI jako LONG APIENTRY CPlApplet(HWND hwndcpl, UINT umsg, LONG lparam1, LONG lparam2); Tłumacząc to na standardowy język C++ można deklarację przepisać jako 5 long stdcall CPlApplet(THandle hwndcpl, unsigned umsg, long lparam1, long lparam2); Natomiast korzystając z typów zdefiniowanych w Delphi (a także w module CPl, który należy dodać do uses): function CPlApplet(hwndCPl :THandle; umsg :Cardinal; lparam1, lparam2 :LongInt) :LongInt; StdCall Należy pamiętać, że CPlApplet(), w przeciwieństwie do DllEntryPoint() z poprzednich paragrafów musi być wyeksportowana, tj. należy dodać ją do sekcji exports: exports DIP_CreateForm, DIP_DestroyForm, CPlApplet; W opisie funkcji posłużę się przykładami kodu, w którym zdefiniuję jeden aplet, wywołujący znane nam z poprzednich paragrafów okienko prezentujące informacje o dyskach w postaci pasków postępu z odpowiednimi opisami. Wykorzystamy napisane wcześniej funkcje DIP_CreateForm i DIP_DestroyForm. W cyklu życia apletu funkcja CPlApplet jest wywoływana wielokrotnie z różnymi argumentami w celu wymiany informacji między apletem a systemem. Typ i nazwa argumentów ma kojarzyć się z komunikatami Windows. Ich rodzaj zależy od żądanych od apletu informacji. Jako pierwszy wysyłany jest komunikat CPL_INIT, który jest czymś w rodzaju pytania od Panelu sterowania: Czy jesteś apletem?. Zwrócona wartość powinna być true, jeżeli chcemy, aby aplet został umieszczony wśród innych apletów Panelu sterowania i żeby wysyłane były kolejne komunikaty. function CPlApplet(hwndCPl :THandle; umsg :Cardinal; lparam1, lparam2 :LongInt) :LongInt; StdCall var lpcpli :^CPLINFO; case (umsg) of CPL_INIT: CPlApplet:=Ord(True); //potwierdzamy, ze jestesmy apletem Exit; 5 Modyfikator APIENTRY jest tożsamy z modyfikatorem WINAPI w kontekście bibliotek DLL, a ten ostatni dla środowiska 32-bitowego jest równoznaczny z stdcall, a więc oznacza standardowy sposób wywoływania funkcji i przekazywania do niej argumentów (ang. standard calling convention). W takim przypadku kompilator nie dodaje znaków podkreślenia przed nazwą funkcji, zachowuje wielkość liter, argumenty muszą być w zadeklarowanej ilości i bezwzględnie identycznego typu. 13

14 else CPlApplet:=0; Exit; Kolejny komunikat to CPL_GETCOUNT, który jest pytaniem o ilość apletów przechowywanych w bibliotece. Odpowiedzią powinna być zwrócona przez wartość funkcji równa ilości apletów, które chcemy udostępnić. Kolejne komunikaty przekazywane są tyle razy, ile zadeklarowaliśmy apletów. CPL_GETCOUNT: if (sm) then ShowMessage('CPL_GETCOUNT'); CPlApplet:=1; //ilosc okien dialogowych Exit; W następnych komunikatach CPL_INQUIRE i CPL_NEWINQUIRE Panel sterowania żąda informacji o ikonie, tytule i podpowiedzi (hint) apletu. W obu przypadkach do CPlApplet() przesyłane są wskaźniki do struktur umożliwiających zwrot odpowiednich informacji. Wygodniej jest wykorzystać CPL_NEWINQUIRE, ponieważ przekazywana do niego struktura jest wygodniejsza w obsłudze i nie wymaga dodawania plików zasobów. Na przekór lenistwu skorzystamy z trudniejszego w obsłudze CPL_INQUIRE. Parametry przesyłane z tą wiadomością są następujące: UNIT uappnum=(uint)lparam1; CPLINFO* lpcpli=(lpcplinfo)lparam2; Pierwszy to numer okna dialogowego / apletu komunikat jest wysyłany raz dla każdego zadeklarowanego apletu (numerowanych od 0). Drugi to wskaźnik do struktury CPLINFO, która zawiera trzy składniki int: idicon, idname, idinfo oraz jeden typu long ldata. Pierwsze trzy są numerami identyfikującymi elementy zasobów (zawartych w dołączonym do projektu pliku.res). Po kolei są to numery ikony apletu, tytułu i treści podpowiedzi. Ostatnia dana ldata to liczba którą przechowuje Panel sterowania i przekazuje w argumentach razem z komunikatami CPL_DBLCLK i CPL_STOP. Pomaga to czasami w programowaniu pozwalając na przechowanie informacji ponieważ biblioteka nie jest cały czas załadowana, jej zmienne lokalne mogą być usunięte. Stworzenie pliku zasobów nie jest zbyt dobrze wspierane przez Borland C++ Builder/Delphi. Obcecny w IDE Image Editor pozwala na umieszczanie w plikach.res ikon, bitmap i kursorów, ale nie wspiera umieszczania tam łańcuchów. A Windows pozwala na o wiele więcej (klawisze skrótów, okna dialogowe, kod HTML, menu i informacje o wersji aplikacji). Aby umieścić pozostałe informacje należy się posłużyć narzędziami linii komend BRCC32.EXE (Borland Resource Compiler) lub wygodnymi narzędziami konkurencyjnego Visual C++. Wybierzmy ponownie trudniejszą drogę i stwórzmy plik zasobów zawierających odpowiednie ikony i łańcuchy. Należy stworzyć plik o rozszerzeniu.rc (np. DiskInfo.rc), w którym wskażemy na pliki zawierające ikony i podamy łańcuchy z odpowiednimi identyfikującymi je numerami: STRINGTABLE { //tytul apletu 1, "Informacje o dyskach" //opis apletu (okienko podpowiedzi) 2, "Informacje o wielkości, ilości wolnego miejsca, typu FAT dysków lokalnych, CD-ROMów i dysków sieciowych" } //ikona jest wczytywana z pliku Project1.ico 101 ICON Project1.ico 14

15 a następne skompilować poleceniem brcc32.exe DiskInfo.rc. Powstanie plik DiskInfo.res, którego format jest zgodny ze standardem plików z zasobami. Uwaga! Linia zaczynająca się od 2, "Informacje o i następna powinna znajdować się w jednej linii. Mając plik zasobów res możemy włączyć go do projektu (Projet, Add to project...) i zareagować na komunikat CPL_INQUIRE: CPL_INQUIRE: lpcpli:=pointer(lparam2); //wskaznik do CPLINFO lpcpli.idicon:=101; lpcpli.idname:=1; lpcpli.idinfo:=2; lpcpli.ldata:=0; CPlApplet:=0; Exit; Ignorujemy pierwszy parametr przekazujący numer apletu, ponieważ w naszej bibliotece jest tylko jeden aplet (jeden zadeklarowaliśmy przy GET_COUNT) i ten komunikat będzie przekazany do biblioteki tylko jeden raz. Musimy wcześniej zadeklarować, najlepiej z zasięgiem ograniczonym do funkcji CPlApplet, wskaźnik var lpcpli :^CPLINFO;. Przypisanie do idicon, idname i idinfo wartości zdefiniowanej w stałej CPL_DYNAMIC_RES spowoduje wywoływanie CPL_NEWINQUIRE przy każdym wyświetleniu ikony. Jest to sposób umożliwiający zmianę ikony w zależności od stanu komputera. Niestety, jak twierdzi MS Win32 SDK, znacznie zwalnia to działanie Panelu sterowania 6. W praktyce korzysta się zazwyczaj z tego komunikatu zamiast CPL_INQUIRE, ponieważ nie wymaga on pliku zasobów (pozwala na podawanie tekstu tytułu i podpowiedzi w postaci zwykłego łańcucha i ikony poprzez uchwyt). Oba komunikaty powinny powodować zwracanie przez CPlApplet() wartość 0, co informuje Panel sterowania o powodzeniu. Po wysłaniu tych komunikatów funkcja CPlApplet() jest wywoływana dopiero wtedy, gdy użytkownik usiłuje otworzyć odpowiedni aplet klikając dwukrotnie na jego ikonę w Panelu sterowania. Wysyłany jest wówczas komunikat CPL_DBLCLK. Reakcja na niego powinna się wiązać z wywołaniem okienka dialogowego. My po prostu wywołamy zdefiniowaną w poprzednich paragrafach funkcję DIP_CreateForm(). CPL_DBLCLK: DIP_CreateForm(true); //musi byc true modalne CPlApplet:=0; Exit; Podobnie jak w poprzednim wywołaniu CPlApplet, jeżeli wszystko się powiodło informujemy o tym panel sterowania zwracając zero. Forma musi być wywołana modalnie inaczej po jej pokazaniu zostanie zaraz zamknięta nic nie zatrzymuje wysyłanie kolejnych komunikatów i usunięcia biblioteki z pamięci 7. I wreszcie, po zamknięciu formy przez użytkownika zostaną wysłane dwa komunikaty CPL_STOP i CPL_EXIT. Jeden z nich powinien dla porządku usunąć formę z pamięci (zamknięcie okna nie powoduje usunięcia jej obiektu, ale i tak usunięty zostałby przy odłączaniu biblioteki). CPL_EXIT: DIP_DestroyForm(); 6 Przy mocy dzisiejszych komputerów nie ma to chyba większego znaczenia. 7 Jeżeli nie tworzymy formy dynamicznie, a mamy klasę formy w bibliotece powinna mieć własność Visible ustawioną na false. Inaczej próba wywołania ShowModal() skończy się błędem. 15

16 CPlApplet:=0; Exit; Teraz trzeba skompilować projekt, a plik wynikowy Project1.dll przemianować na przykład na Project1.cpl. Ten plik należy skopiować do katalogu systemowego Windows (C:\WINDOWS\SYSTEM lub C:\WIN2000\SYSTEM32 w zależności od wersji systemu). Jeżeli nie popełniliśmy żadnego błędu w oknie Panelu sterowania pojawi się nowa ikona, której kliknięcie pokaże informacje o dyskach. 16

Tworzenie aplikacji Windows Biblioteki DLL. Aplety panelu sterowania (C++ Builder)

Tworzenie aplikacji Windows Biblioteki DLL. Aplety panelu sterowania (C++ Builder) Jacek Matulewski http://www.phys.uni.torun.pl/~jacek/ Tworzenie aplikacji Windows Biblioteki DLL. Aplety panelu sterowania (C++ Builder) Ćwiczenia Toruń, 13 grudnia 2002 Najnowsza wersja tego dokumentu

Bardziej szczegółowo

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ 1. Na dysku STUDENT we własnym folderze utwórz podfolder o nazwie: WarMax. 2. Uruchom program Delphi. 3. Zapamiętaj w folderze WarMax poszczególne pliki tworzące

Bardziej szczegółowo

Wprowadzenie do biblioteki klas C++

Wprowadzenie do biblioteki klas C++ Instrukcja laboratoryjna nr 7 Programowanie w języku C 2 (C++ poziom zaawansowany) Wprowadzenie do biblioteki klas C++ WxWidgets mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz dr inż. Wilk-Jakubowski

Bardziej szczegółowo

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych Jacek Matulewski, Sławek Orłowski http://www.phys.uni.torun.pl/~jacek/ Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych Wersja α Ćwiczenia Toruń, 20 grudnia 2005 Najnowsza wersja tego dokumentu

Bardziej szczegółowo

Delphi podstawy programowania. Środowisko Delphi

Delphi podstawy programowania. Środowisko Delphi Delphi podstawy programowania Środowisko Delphi Olsztyn 2004 Delphi Programowanie obiektowe - (object-oriented programming) jest to metodologia tworzeniu programów komputerowych definiująca je jako zbiór

Bardziej szczegółowo

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS www.informatyka.edu.pl

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS www.informatyka.edu.pl To jeden z ostatnich odcinków naszego kursu. Mam nadzieję, że pisanie własnego programu było ciekawym doświadczeniem. Zaproponowana w tym odcinku funkcja uatrakcyjni twój program. Stworzymy tak zwane okno

Bardziej szczegółowo

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5 Ćwiczenie 5 Aplikacja wielo-okienkowa 1. Opracuj aplikację realizującą obliczenia na podstawie danych wpisywanych w komponencie

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Zastanawiałeś się może, dlaczego Twój współpracownik,

Zastanawiałeś się może, dlaczego Twój współpracownik, Kurs Makra dla początkujących Wiadomości wstępne VBI/01 Piotr Dynia, specjalista ds. MS Office Czas, który poświęcisz na naukę tego zagadnienia, to 15 20 minut. Zastanawiałeś się może, dlaczego Twój współpracownik,

Bardziej szczegółowo

Tworzenie własnych komponentów

Tworzenie własnych komponentów Tworzenie własnych komponentów 1. Tworzenie nowego komponentu W tym celu należy wykorzystać menu Component. Interesujące są dwie opcje menu New Component i Install Component. Pierwsze polecenie służy do

Bardziej szczegółowo

WPROWADZENIE DO JĘZYKA JAVA

WPROWADZENIE DO JĘZYKA JAVA WPROWADZENIE DO JĘZYKA JAVA programowanie obiektowe KRÓTKA HISTORIA JĘZYKA JAVA KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny języka java. Pierwsza nazwa Oak (dąb). KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny

Bardziej szczegółowo

Informatyka II. Laboratorium Aplikacja okienkowa

Informatyka II. Laboratorium Aplikacja okienkowa Informatyka II Laboratorium Aplikacja okienkowa Założenia Program będzie obliczał obwód oraz pole trójkąta na podstawie podanych zmiennych. Użytkownik będzie poproszony o podanie długości boków trójkąta.

Bardziej szczegółowo

Wprowadzenie do systemu Delphi

Wprowadzenie do systemu Delphi 50 Rozdział 4 Wprowadzenie do systemu Delphi W niniejszym rozdziale zilustrujemy na prostych przykładach proces programowania wizualno-obiektowego w systemie Delphi. 4.1 Znajdowanie elementu maksymalnego

Bardziej szczegółowo

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch INFORMATOR TECHNICZNY WONDERWARE Informator Techniczny nr 60 04-12-2002 Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch Wstęp PoniŜsza dokumentacja oparta na przykładach stworzonych

Bardziej szczegółowo

2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej.

2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej. Formularze VBA Przykład1 INTERAKTYWNY FORMULARZ Program tworzący interaktywny formularz. Objaśnienie: w dowolnym momencie można wprowadzić wartość w polu tekstowym ID, Excel VBA wczytuje odpowiedni rekord.

Bardziej szczegółowo

Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk

Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk Nazwa implementacji: Kółko i krzyżyk w Lazarusie Autor: Piotr Fiorek Andrzej Stefaniuk Opis implementacji: Implementacja prezentuje środowisko Lazarus oraz prosty program w języku FreePascal. Na początku

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

Bardziej szczegółowo

Delphi Laboratorium 3

Delphi Laboratorium 3 Delphi Laboratorium 3 1. Procedury i funkcje Funkcja jest to wydzielony blok kodu, który wykonuje określoną czynność i zwraca wynik. Procedura jest to wydzielony blok kodu, który wykonuje określoną czynność,

Bardziej szczegółowo

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach. Nazwa implementacji: Gra w życie Autor: Piotr Fiorek Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach. Zaprojektuj prostą grę, której celem

Bardziej szczegółowo

Programowanie na poziomie sprzętu. Programowanie w Windows API

Programowanie na poziomie sprzętu. Programowanie w Windows API Programowanie w Windows API Windows API Windows Application Programming Interface (API) to zestaw funkcji systemu operacyjnego Windows, które umożliwiają aplikacjom korzystanie z wszystkich usług systemu.

Bardziej szczegółowo

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe. Programowanie Wizualno-Obiektowe (studia zaoczne - inżynieria komputerowa) Zajęcia z Delphi 5, program 1 Temat: Zadanie: Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków

Bardziej szczegółowo

Przygotowanie własnej procedury... 3 Instrukcja msgbox wyświetlanie informacji w oknie... 6 Sposoby uruchamiania makra... 8

Przygotowanie własnej procedury... 3 Instrukcja msgbox wyświetlanie informacji w oknie... 6 Sposoby uruchamiania makra... 8 Przygotowanie własnej procedury... 3 Instrukcja msgbox wyświetlanie informacji w oknie... 6 Sposoby uruchamiania makra... 8 Podstawy programowania makr w Excelu 1 Aby rozpocząć pracę z makrami, należy

Bardziej szczegółowo

Makropolecenia w PowerPoint Spis treści

Makropolecenia w PowerPoint Spis treści Makropolecenia w PowerPoint Spis treści Co to jest makro?... 2 Tworzenie prostego makropolecenia w PowerPoint... 2 Przypisywanie makropoleceń do wstążki.... 5 Zapisywanie prezentacji z makrem.... 7 ZADANIE...

Bardziej szczegółowo

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse... KORZYSTANIE Z KONTROLKI.NET LENDEVICERS232 DODAWANIE KONTROLKI DO ZBIORU KOMPONENTÓW DOSTĘPNYCH W PALECIE TOOLBOX (ŚRODOWISKA PROGRAMISTYCZNE FIRMY MICROSOFT) W środowisku programistycznym (Visual C++,

Bardziej szczegółowo

Cel: Zastosowanie okien pytającychwyświetlających pytania i komunikaty (MessageBox). Klub IKS www.informatyka.edu.pl

Cel: Zastosowanie okien pytającychwyświetlających pytania i komunikaty (MessageBox). Klub IKS www.informatyka.edu.pl Odcinek 15 Jeżeli przez przypadek klikniemy ikonę wychodzenia z program lub opcję Zamknij z menu plikplik, program po prostu zostanie zakończony i będziemy musieli ponownie go uruchomić. Aby temu zapobiec,

Bardziej szczegółowo

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka 1. Kompilacja aplikacji konsolowych w środowisku programistycznym Microsoft Visual Basic. Odszukaj w menu startowym systemu

Bardziej szczegółowo

Podstawy Programowania 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

Instrukcja laboratoryjna cz.3

Instrukcja laboratoryjna cz.3 Języki programowania na platformie.net cz.2 2015/16 Instrukcja laboratoryjna cz.3 Język C++/CLI Prowadzący: Tomasz Goluch Wersja: 2.0 I. Utworzenie projektu C++/CLI z interfejsem graficznym WPF 1 Cel:

Bardziej szczegółowo

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008. Dwiczenie 5. TEMAT: CEL: Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008. Celem dwiczenia jest poznanie możliwości VS 2008 w zakresie tworzenia i uruchamiania aplikacji z kodem mieszanym

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

ApSIC Xbench: Szybki start wydanie 1 2008-2015 Mariusz Stępień http://mariuszstepien.net/ http://www.facebook.com/mariuszstepien.

ApSIC Xbench: Szybki start wydanie 1 2008-2015 Mariusz Stępień http://mariuszstepien.net/ http://www.facebook.com/mariuszstepien. ApSIC Xbench jest darmowym i niezwykle przydatnym programem w pracy tłumacza pisemnego korzystającego z narzędzi CAT. Otóż pozwala on przeszukiwać posiadane pamięci tłumaczeniowe (TM) można szukać pojedynczych

Bardziej szczegółowo

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w obrębie skryptu. Wyrażenia include() i require() są niemal

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

5.2. Pierwsze kroki z bazami danych

5.2. Pierwsze kroki z bazami danych 5.2. Pierwsze kroki z bazami danych Uruchamianie programu Podobnie jak inne programy, OO Base uruchamiamy z Menu Start, poprzez zakładkę Wszystkie programy, gdzie znajduje się folder OpenOffice.org 2.2,

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 1 - Programowanie proceduralne i obiektowe Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?

Bardziej szczegółowo

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Zadanie polega na napisaniu pierwszego programu w języku C, jego poprawnej kompilacji i wgraniu na mikrokontroler. W tym celu należy zapoznać

Bardziej szczegółowo

KROK 17 i 18. Cel: Tworzymy oddzielne okno - O autorze. 1. Otwórz swój program. 2. Skompiluj i sprawdź, czy działa prawidłowo.

KROK 17 i 18. Cel: Tworzymy oddzielne okno - O autorze. 1. Otwórz swój program. 2. Skompiluj i sprawdź, czy działa prawidłowo. Odcinek 13 Dzisiaj zaprogramujemy okno O autorze. Dzisiaj programujemy okno - O autorze. Ppostaramy się włączyć do naszego projektu kkolejny, trzeci już formularz. Pamiętajcie, żeby aby za każdym razemzawsze

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Instrukcja obsługi aplikacji Karty Pojazdów dla Dealerów Samochodowych

Instrukcja obsługi aplikacji Karty Pojazdów dla Dealerów Samochodowych Instrukcja obsługi aplikacji Karty Pojazdów dla Dealerów Samochodowych ver. 0.6 1 Instalacja 1. Proces instalacji należy rozpocząć od sprawdzenia, czy w systemie MS Windows jest zainstalowana aplikacja

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

Delphi. Lazarus. Kompilatory Delphi. Linki do stron o Delphi

Delphi. Lazarus. Kompilatory Delphi. Linki do stron o Delphi Lazarus Programowanie w Delphi Delphi Delphi jest to język oparty na Pascal. Twórcą jego jest firma Borland. Pierwotnie nosił nazwę Object Pascal (do 2006). Jest to język prosty i popularny. Wykorzystuje

Bardziej szczegółowo

Rozpocznijmy ten odcinek od rozwiązania problemu postawionego w poprzednim odcinku:

Rozpocznijmy ten odcinek od rozwiązania problemu postawionego w poprzednim odcinku: Rozpocznijmy ten odcinek od rozwiązania problemu postawionego w poprzednim odcinku: Czy wiesz jak w oknie wyświetlającym pytania i komunikaty dodać opcję (przycisk) Anuluj? Jak przebudować kod? Czy udało

Bardziej szczegółowo

Ćwiczenia nr 2. Edycja tekstu (Microsoft Word)

Ćwiczenia nr 2. Edycja tekstu (Microsoft Word) Dostosowywanie paska zadań Ćwiczenia nr 2 Edycja tekstu (Microsoft Word) Domyślnie program Word proponuje paski narzędzi Standardowy oraz Formatowanie z zestawem opcji widocznym poniżej: Można jednak zmodyfikować

Bardziej szczegółowo

Kopiowanie, przenoszenie plików i folderów

Kopiowanie, przenoszenie plików i folderów Kopiowanie, przenoszenie plików i folderów Pliki i foldery znajdujące się na dysku można kopiować lub przenosić zarówno w ramach jednego dysku jak i między różnymi nośnikami (np. pendrive, karta pamięci,

Bardziej szczegółowo

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych Laboratorium OiOSE. Programowanie w środowisku MS Visual C++ 1 Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych Organizacja i Oprogramowanie Systemów Elektronicznych Michał Kowalewski

Bardziej szczegółowo

16) Wprowadzenie do raportowania Rave

16) Wprowadzenie do raportowania Rave 16) Wprowadzenie do raportowania Rave Tematyka rozdziału: Przegląd wszystkich komponentów Rave Tworzenie nowego raportu przy użyciu formatki w środowisku Delphi Aktywacja środowiska Report Authoring Visual

Bardziej szczegółowo

Ćwiczenie 1. Przygotowanie środowiska JAVA

Ćwiczenie 1. Przygotowanie środowiska JAVA Ćwiczenie 1 Przygotowanie środowiska JAVA 1. Wprowadzenie teoretyczne Instalacja JDK (Java Development Kit) NaleŜy pobrać z java.sun.com środowisko i zainstalować je. Następnie naleŝy skonfigurować środowisko.

Bardziej szczegółowo

Materiały do laboratorium MS ACCESS BASIC

Materiały do laboratorium MS ACCESS BASIC Materiały do laboratorium MS ACCESS BASIC Opracowała: Katarzyna Harężlak Access Basic jest językiem programowania wykorzystywanym w celu powiązania obiektów aplikacji w jeden spójny system. PROCEDURY I

Bardziej szczegółowo

Inwentarz Optivum. Jak wykorzystać kolektor danych do wypełniania arkuszy spisowych?

Inwentarz Optivum. Jak wykorzystać kolektor danych do wypełniania arkuszy spisowych? Inwentarz Optivum Jak wykorzystać kolektor danych do wypełniania arkuszy spisowych? Kolektor danych jest to urządzenie, które umożliwia automatyczną identyfikację kodów kreskowych. Program Inwentarz Optivum

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi.

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi. DCOM Aplikacje serwera i klienta DCOM, które zamierzamy stworzyć są podobne do tych zrobionych w ćwiczeniu dotyczącym TCP/IP. Aplikacja serwera będzie jedno wątkowa, a co za tym idzie będzie mogła obsłużyć

Bardziej szczegółowo

10.2. Udostępnianie zasobów

10.2. Udostępnianie zasobów Rozdział 10 t Praca w sieci równoprawnej Aby komputer mógł być widoczny wśród innych w otoczeniu sieciowym, musi mieć unikalną nazwę i przynależeć do grupy roboczej. Ustawienia te dostępne są poprzez aplet

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

Smarty PHP. Leksykon kieszonkowy IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK

Bardziej szczegółowo

Instalowanie VHOPE i plików biblioteki VHOPE

Instalowanie VHOPE i plików biblioteki VHOPE Instalowanie VHOPE i plików biblioteki VHOPE Krok 1. Zainstaluj aplikację VHOPE Przed rozpoczęciem korzystania z materiałów prezentacyjnych znajdujących się na tym dysku USB należy zainstalować na komputerze

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Instalacja i opis podstawowych funkcji programu Dev-C++

Instalacja i opis podstawowych funkcji programu Dev-C++ Instalacja i opis podstawowych funkcji programu Dev-C++ Przed rozpoczęciem programowania musimy zainstalować i przygotować kompilator. Spośród wielu dostępnych kompilatorów polecam aplikację Dev-C++, ze

Bardziej szczegółowo

Tablice, DataGridView

Tablice, DataGridView Tablice, DataGridView Gdy rośnie liczba danych do przechowywania w programie, a następnie ich obrobienia - pojawiają się nowe struktury danych (moŝna by powiedzieć pojemniki na dane) zwane tablicami. Tablica

Bardziej szczegółowo

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Wprowadzenie do projektu QualitySpy

Wprowadzenie do projektu QualitySpy Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować

Bardziej szczegółowo

Język programowania PASCAL

Język programowania PASCAL Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO

Bardziej szczegółowo

Przed przystąpieniem do instalacji certyfikatów należy zweryfikować czy są spełnione poniższe wymagania systemowe.

Przed przystąpieniem do instalacji certyfikatów należy zweryfikować czy są spełnione poniższe wymagania systemowe. INSTRUKCJA INSTALACJI CERTYFIKATU INTERNETOWEGO (U2A) Działania wymagane wskazano w punktach I.1 - I.4 Działania opcjonalne (zalecane) w punktach I.5-I.6. I.1. Wymagania systemowe Przed przystąpieniem

Bardziej szczegółowo

W oknie konfiguratora Importu/Exportu należy wprowadzić odpowiednie ustawienia poprzez zaznaczenie pól kursorem myszki przy poszczególnych opcjach.

W oknie konfiguratora Importu/Exportu należy wprowadzić odpowiednie ustawienia poprzez zaznaczenie pól kursorem myszki przy poszczególnych opcjach. Instrukcja korzystania z modułu Export/Import z poziomu programu Carwert Zawartość dokumentu: Dokument zawiera skróconą instrukcje obsługi modułu EXPORT/IMPORT w programie Carwert. Pierwsza część tego

Bardziej szczegółowo

Programowanie w Turbo Pascal

Programowanie w Turbo Pascal Skróty: ALT + F9 Kompilacja CTRL + F9 Uruchomienie Struktura programu: Programowanie w Turbo Pascal Program nazwa; - nagłówek programu - blok deklaracji (tu znajduje się VAR lub CONST) - blok instrukcji

Bardziej szczegółowo

Kancelaria instalacja programu

Kancelaria instalacja programu Kancelaria instalacja programu Program Kancelaria można zainstalować w wersji przeznaczonej na pojedynczy komputer (dane zgromadzone przez użytkownika nie będą udostępniane innym pracownikom firmy) lub

Bardziej szczegółowo

Visual Basic for Applications. Wstęp

Visual Basic for Applications. Wstęp Visual Basic for Applications Materiały źródłowe: http://www.vbamania.estrefa.pl 2008-01-14 Wstęp Visual Basic for Applications to język programowania, dołączony do wielu aplikacji. Wspierają go między

Bardziej szczegółowo

Załącznik 1 instrukcje instalacji

Załącznik 1 instrukcje instalacji Załącznik 1 instrukcje instalacji W poniższym załączniku przedstawione zostaną instrukcje instalacji programów wykorzystanych w trakcie tworzenia aplikacji. Poniższa lista przedstawia spis zamieszczonych

Bardziej szczegółowo

Expo Composer. www.doittechnology.pl 1. Garncarska 5 70-377 Szczecin tel.: +48 91 404 09 24 e-mail: info@doittechnology.pl. Dokumentacja użytkownika

Expo Composer. www.doittechnology.pl 1. Garncarska 5 70-377 Szczecin tel.: +48 91 404 09 24 e-mail: info@doittechnology.pl. Dokumentacja użytkownika Expo Composer Dokumentacja użytkownika Wersja 1.0 www.doittechnology.pl 1 SPIS TREŚCI 1. O PROGRAMIE... 3 Wstęp... 3 Wymagania systemowe... 3 Licencjonowanie... 3 2. PIERWSZE KROKI Z Expo Composer... 4

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

BIOS, tryb awaryjny, uśpienie, hibernacja

BIOS, tryb awaryjny, uśpienie, hibernacja BIOS, tryb awaryjny, uśpienie, hibernacja Wykład: BIOS, POST, bootstrap loader, logowanie, uwierzytelnianie, autoryzacja, domena, tryb awaryjny, stan uśpienia, hibernacja, wylogowanie, przełączanie użytkownika,

Bardziej szczegółowo

Działki Przygotowanie organizacyjne

Działki Przygotowanie organizacyjne Celem poniższego ćwiczenia jest nauczenie rozwiązywania zadań maturalnych z wykorzystaniem arkusza kalkulacyjnego. Jako przykład wykorzystano zadanie maturalne o działkach z matury w 2015 roku. Działki

Bardziej szczegółowo

Synchronizator plików (SSC) - dokumentacja

Synchronizator plików (SSC) - dokumentacja SZARP http://www.szarp.org Synchronizator plików (SSC) - dokumentacja Wersja pliku: $Id: ssc.sgml 4420 2007-09-18 11:19:02Z schylek$ > 1. Witamy w programie SSC Synchronizator plików (SZARP Sync Client,

Bardziej szczegółowo

Gdy z poziomu programu Delphi otworzysz folder pierwszy program, zauważysz tylko dwa pliki [rys.1]:

Gdy z poziomu programu Delphi otworzysz folder pierwszy program, zauważysz tylko dwa pliki [rys.1]: Odcinek 2 rozpoczniemy od omówienia typów plików, z jakimi możemy mieć do czynienia w programie Delphi. Szybko zauważysz, że przy konstruowaniu programu tworzone są nie tylko, jak wcześniej mówiliśmy,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 07 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami tworzenia aplikacji okienkowych w C#. Wprowadzenie teoretyczne. Rozważana w

Bardziej szczegółowo

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem. Podstawy programowania Wykład PASCAL Zmienne wskaźnikowe i dynamiczne 1 dr Artur Bartoszewski - Podstawy prograowania, sem. 1- WYKŁAD Rodzaje zmiennych Zmienne dzielą się na statyczne i dynamiczne. Zmienna

Bardziej szczegółowo

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których

Bardziej szczegółowo

Instrukcja konfiguracji programu Invoice.Exporter

Instrukcja konfiguracji programu Invoice.Exporter Instrukcja konfiguracji programu Invoice.Exporter Data dokumentu: 07.08.2012 Wdrożenie internetowej platformy B2B wspomagającej pracę biura rachunkowo - księgowego - projekt współfinansowany przez Unię

Bardziej szczegółowo

Windows 10 - Jak uruchomić system w trybie

Windows 10 - Jak uruchomić system w trybie 1 (Pobrane z slow7.pl) Windows 10 - Jak uruchomić system w trybie awaryjnym? Najprostszym ze sposobów wymuszenia na systemie przejścia do trybu awaryjnego jest wybranie Start a następnie Zasilanie i z

Bardziej szczegółowo

Visual Basic Debugging and Error Handling

Visual Basic Debugging and Error Handling Visual Basic Debugging and Error Handling Typy błędów 1. Compile-Time, (wykrywane w czasie kompilacji np. błąd w składni) 2. Run-Time, (pojawiające się podczas wykonywania programu, np. zły typ danych

Bardziej szczegółowo

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio Podstawy programowania Ćwiczenie Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio Tematy ćwiczenia algorytm, opis języka programowania praca ze środowiskiem, formularz, obiekty

Bardziej szczegółowo

NIEZAWODNE ROZWIĄZANIA SYSTEMÓW AUTOMATYKI. asix. Aktualizacja pakietu asix 4 do wersji 5 lub 6. Pomoc techniczna

NIEZAWODNE ROZWIĄZANIA SYSTEMÓW AUTOMATYKI. asix. Aktualizacja pakietu asix 4 do wersji 5 lub 6. Pomoc techniczna NIEZAWODNE ROZWIĄZANIA SYSTEMÓW AUTOMATYKI asix Aktualizacja pakietu asix 4 do wersji 5 lub 6 Pomoc techniczna Dok. Nr PLP0016 Wersja:08-12-2010 ASKOM i asix to zastrzeżony znak firmy ASKOM Sp. z o. o.,

Bardziej szczegółowo

PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA

PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA EGMONT INSTRUMENTS PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA EGMONT INSTRUMENTS tel. (0-22) 823-30-17, 668-69-75 02-304 Warszawa, Aleje Jerozolimskie 141/90 fax (0-22) 659-26-11

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Rozdział II. Praca z systemem operacyjnym

Rozdział II. Praca z systemem operacyjnym Rozdział II Praca z systemem operacyjnym 55 Rozdział III - System operacyjny i jego hierarchia 2.2. System operacyjny i jego życie Jak już wiesz, wyróżniamy wiele odmian systemów operacyjnych, które różnią

Bardziej szczegółowo

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Przeciążenie funkcji polega na użyciu funkcji z tą samą nazwą, które mają różne listy argumentów(różne typy, różna ilość lub to i inne).

Bardziej szczegółowo

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni, Baltie Zadanie 1. Budowanie W trybie Budowanie wybuduj domek jak na rysunku. Przedmioty do wybudowania domku weź z banku 0. Zadanie 2. Czarowanie sterowanie i powtarzanie W trybie Czarowanie z pomocą czarodzieja

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Nagrywamy podcasty program Audacity

Nagrywamy podcasty program Audacity Pobieranie i instalacja Program Audacity jest darmowym zaawansowanym i wielościeżkowym edytorem plików dźwiękowych rozpowszechnianym na licencji GNU GPL. Jest w wersjach dla systemów typu Unix/Linux, Microsoft

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Zaawansowane metody programowania Copyright c 2014 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania

Bardziej szczegółowo

Instrukcja instalacji oprogramowania Flow!Works na komputerze z systemem Windows 7

Instrukcja instalacji oprogramowania Flow!Works na komputerze z systemem Windows 7 Instrukcja instalacji oprogramowania Flow!Works na komputerze z systemem Windows 7 W celu zainstalowania oprogramowania należy: 1. Wyłączyć kontrolę konta użytkownika: Uwaga! Pominięcie tego kroku spowoduje

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

Bardziej szczegółowo