Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00469 008265 11004458 na godz. na dobę w sumie
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty - książka
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty - książka
Autor: Liczba stron: 584
Wydawca: Helion Język publikacji: polski
ISBN: 83-7197-885-5 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> mysql - programowanie
Porównaj ceny (książka, ebook, audiobook).
MySQL jest szybkim, przenośny i -- co najważniejsze -- darmowym systemem bazodanowym, który zdobył ogromną popularność w zastosowaniach internetowych. Książka 'MySQL. Budowanie interfejsów użytkownika.' pokaże Ci jak używać tej bazy także poza Internetem. Nauczysz się z niej budowania atrakcyjnych interfejsów użytkownika współpracujących z tą bazą. W tym celu wykorzystana zostanie biblioteka GTK+.

Książka jest przeznaczona głównie dla programistów, którzy rozważają wykorzystanie Linuksa w tworzonych przez siebie rozwiązaniach, dla osób posiadających pewne doświadczenie w tworzeniu systemów opartych na architekturze klient-serwer (np. za pomocą Visual Basica i SQL Server). Aby w pełni skorzystać z informacji zawartych w książce, wystarczy znać język C i podstawy programowania baz danych.

'Do napisania niniejszej książki skłonił mnie brak podobnej pozycji, opisującej tworzenie aplikacji 'korporacyjnych' za pomocą integracji GTK+ i MySQL. Jeśli jesteś programistą lub pracujesz w firmie, w której rozważa się wykorzystanie systemu Linuks celem zmniejszenia kosztów działalności -- ta książka jest przeznaczona właśnie dla Ciebie.' -- Matt Stucky.
Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl MySQL. Budowanie interfejsów u¿ytkownika. Vademecum profesjonalisty Autor: Matthew Stucky T³umaczenie: Tomasz Miszkiel ISBN: 83-7197-885-5 Tytu³ orygina³u: MySQL Building User Interfaces Format: B5, stron: 582 Przyk³ady na ftp: 1098 kB MySQL jest szybkim, przenoġny i — co najwa¿niejsze — darmowym systemem bazodanowym, który zdoby³ ogromn¹ popularnoġæ w zastosowaniach internetowych. Ksi¹¿ka „MySQL. Budowanie interfejsów u¿ytkownika.” poka¿e Ci jak u¿ywaæ tej bazy tak¿e poza Internetem. Nauczysz siê z niej budowania atrakcyjnych interfejsów u¿ytkownika wspó³pracuj¹cych z t¹ baz¹. W tym celu wykorzystana zostanie biblioteka GTK+. Ksi¹¿ka jest przeznaczona g³ównie dla programistów, którzy rozwa¿aj¹ wykorzystanie Linuksa w tworzonych przez siebie rozwi¹zaniach, dla osób posiadaj¹cych pewne doġwiadczenie w tworzeniu systemów opartych na architekturze klient-serwer (np. za pomoc¹ Visual Basica i SQL Server). Aby w pe³ni skorzystaæ z informacji zawartych w ksi¹¿ce, wystarczy znaæ jêzyk C i podstawy programowania baz danych. • Poznasz mocne strony i zalety bazy MySQL • Nauczysz siê tworzyæ programy w systemie Linuks, a nastêpnie, korzystaj¹c z ich kodu ĥród³owego, kompilowaæ je w systemie Windows. • Dowiesz siê, w jaki sposób mo¿na instalowaæ programy korzystaj¹c ze skryptów lub pakietów RPM (RedHat Pakage Manager). • Nauczysz siê korzystaæ z interfejsu jêzyka C dla MySQL w aplikacjach, w których u¿yto bibliotekê GTK+. • Poznasz sposoby wyġwietlania danych pochodz¹cych z MySQL w obiektach GTK+. • Bêdziesz w stanie utworzyæ (w jêzyku C) aplikacje, które wygl¹dem i zachowaniem przypominaj¹ programy Windowsowe • Utworzysz aplikacje, które bêd¹ dynamicznie tworzyæ graficzny interfejs u¿ytkownika, dziêki czemu bêdziesz móg³ zmieniæ wygl¹d interfejsu bez koniecznoġci rekompilacji kodu ĥród³owego • Przeġledzisz krok po kroku proces powstawania kompletnej aplikacji korzystaj¹cej z MySQL. 5RKUVTGħEK 1#WVQTG   14GEGPGPVCEJVGEJPKEP[EJ   9RTQYCFGPKG   Dla kogo przeznaczona jest ta książka? ...................................................z..................... 12 Układ książki ...................................................z...................................................z....... 12 Konwencje przyjęte w książce...................................................z.................................. 13 úħè+ 5[DMKGYRTQYCFGPKGD 4QFKCđ /[53.FNCCFOKPKUVTCVQTÎYKWľ[VMQYPKMÎY#EEGUUK53.5GTXGT  Dlaczego właśnie MySQL? ...................................................z...................................... 17 Licencje ...................................................z...................................................z.............. 18 Porównanie typów danych MySQL z typami dostępnymi w Access 2000 i SQL Server 7 .................................................. 19 Czego brakuje w MySQL?...................................................z....................................... 21 MySQL, MYSQL i mysql — trzy podobne słowa, trzy różne znaczenia.......................... 27 Tylko dla użytkowników programu Access: demony i usługi.......................................... 29 Skąd pobrać pakiet instalacyjny MySQL?...................................................z.................. 30 Decyzja dotycząca metody instalacji — wszystkie za i przeciw ...................................... 31 Pliki potrzebne do instalacji RPM...................................................z............................. 33 Instalacja ...................................................z...................................................z............. 34 Pierwsze spotkanie z MySQL: tworzenie, wykorzystywanie i usuwanie bazy danych....... 38 Niestandardowe, unikatowe konstrukcje SQL wykorzystywane w MySQL (rozszerzenie standardu ANSI SQL92)...................................................z................... 40 Programy użytkowe w MySQL ...................................................z................................ 45 Interfejs API języka C dla MySQL ...................................................z........................... 53 4QFKCđ )6- FNCRTQITCOKUVÎYMQT[UVCLæE[EJ8KUWCN$CUKE  Dlaczego powinniśmy korzystać z GTK+? ...................................................z................ 60 Gdzie zdobyć GTK+ i jak dokonać jego instalacji?...................................................z..... 61 Licencje ...................................................z...................................................z.............. 61 Ogólny opis biblioteki GTK+...................................................z................................... 63 Pojemniki GTK+ jako odpowiedniki kontrolek zmieniających rozmiary.......................... 71 Podstawowe widgety w programie ...................................................z............................ 73 4QFKCđ 9KúEGLYKFIGVÎY)6-   Widget GtkCombo ...................................................z.................................................. 95 GtkProgressBar i GtkStatusBar ...................................................z................................ 99 GtkFrame i GtkAspectFrame...................................................z.................................. 106 Okna dialogowe i informacyjne, czyli obiekty GtkDialog, GtkFileSelection, GtkColorSelectionDialog i GtkFontSelectionDialog ................................................. 110 Systemy menu: obiekty menu, „fabryka elementów” i elementy menu kontekstowego.... 117 6 MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty 4QFKCđ CCYCPUQYCPGQDKGMV[)6-   GtkTable ...................................................z...................................................z........... 127 GtkTree i GtkCTree ...................................................z.............................................. 132 GtkFixed ...................................................z...................................................z........... 137 GtkLayout...................................................z...................................................z......... 140 GtkScrolledWindow ...................................................z.............................................. 142 GtkNotebook...................................................z...................................................z..... 144 GtkPaned ...................................................z...................................................z.......... 147 4QFKCđ )NCFGFNCRTQITCOKUVÎYMQT[UVCLæE[EJ8KUWCN$CUKE   Środowisko Glade ...................................................z................................................. 151 Pierwsze spotkanie z Glade: aplikacja WitajSwiecie ...................................................z. 153 Szczegółowa analiza wybranych plików projektu WitajSwiecie.................................... 162 Glade i widgety...................................................z...................................................z.. 170 Tworzenie projektu: trzeba poznać hierarchię obiektów ............................................... 173 Komunikacja pomiędzy oknami w projekcie utworzonym w Glade............................... 174 Zmienne o zasięgu globalnym a poprawne pisanie programów ..................................... 180 úħè++ 2TCYFKYGCRNKMCELG D  4QFKCđ 2TQLGMVQYCPKGKCUCFCFKCđCPKC CRNKMCELKRT[LúEKCCOÎYKGPKC  Projekt aplikacji ...................................................z...................................................z. 186 Interfejs użytkownika ...................................................z............................................ 189 Tworzenie bazy danych...................................................z......................................... 193 Wdrożenie aplikacji...................................................z............................................... 195 Modernizacja aplikacji...................................................z........................................... 199 4QFKCđ 7VYQTGPKGCRNKMCELKFQQDUđWIKCOÎYKGēFNC5 5+   Tworzenie interfejsu użytkownika za pomocą Glade ...................................................z 202 Funkcje aplikacji ...................................................z...................................................z 214 Połączenie interfejsu i funkcji wykonujących poszczególne zadania programu............... 248 Kompilacja programu ...................................................z............................................ 259 Uwagi dotyczące utworzonego programu ...................................................z................ 259 4QFKCđ #RNKMCELC9[PCECPKGRTQYKLKōRTQLGMVKCPCNKC   Przedstawienie problemu ...................................................z....................................... 264 Interfejs użytkownika ...................................................z............................................ 267 Baza danych, przygotowanie autoryzacji ...................................................z................. 271 Tworzenie bazy danych...................................................z......................................... 273 4QFKCđ -QPUVTWMELCCRNKMCELK2TQYKLG   Budowanie interfejsu użytkownika za pomocą Glade .................................................. 281 Kontrola wyświetlanych danych ...................................................z............................. 286 Funkcje tworzonej aplikacji...................................................z.................................... 289 Powiązanie funkcji „narzędziowych” z obiektami interfejsu użytkownika — funkcje zwrotne w pliku callbacks.c...................................................z................. 318 Uwagi dotyczące utworzonego programu ...................................................z................ 325 4QFKCđ +PUVCNCELCCRNKMCELK9[PCECPKGRTQYKLK   Kompilacja z wiersza poleceń...................................................z................................. 327 Korzyści płynące z zastosowania Make ...................................................z................... 328 Instalowanie aplikacji ...................................................z............................................ 330 Kompilacja programu dla Win32 za pomocą MS Visual C++....................................... 341 Spis treści 7 4QFKCđ 2TQLGMVCRNKMCELK4CRQTV[  Definicja problemu...................................................z................................................ 351 Interfejs użytkownika ...................................................z............................................ 352 Baza danych, uprawnienia użytkowników ...................................................z............... 356 Tworzenie bazy danych...................................................z......................................... 357 4QFKCđ -QPUVTWMELCCRNKMCELK4CRQTV[  Opis problemu ...................................................z...................................................z... 361 Aplikacja sterująca: Raporty...................................................z................................... 361 Raport 1. Tabela...................................................z...................................................z. 371 Raport 2. Wykres kołowy ...................................................z...................................... 377 Raport 3. Wykres liniowo-kolumnowy...................................................z.................... 387 Raport 4. Wykres punktowy...................................................z................................... 393 4QFKCđ -QORKNCELCKKPUVCNCELCCRNKMCELK4CRQTV[  Kompilacja i dystrybucja w formie pliku RPM ...................................................z........ 403 Kompilacja programów za pomocą MinGW dla Win32 ............................................... 408 úħè+++ 2T[MđCFD  4QFKCđ [PCOKEPGVYQTGPKGKPVGTHGLUWWľ[VMQYPKMCCRQOQEæ:/.  Jeszcze raz program „Witaj Swiecie” ...................................................z...................... 417 Komunikacja pomiędzy oknami...................................................z.............................. 422 Dokonywanie zmian w aplikacji bez konieczności ponownej kompilacji ....................... 430 QFCVMK D  QFCVGM# 2NKMKY[IGPGTQYCPGRTG)NCFGōCRNKMCELCFNC5 5+  interface.c...................................................z...................................................z.......... 435 sesi.glade...................................................z...................................................z........... 460 QFCVGM$ 2NKMKY[IGPGTQYCPGRTG)NCFGōCRNKMCELC2TQYKLG  interface.c...................................................z...................................................z.......... 499 prowizje.glade...................................................z...................................................z.... 516 QFCVGM  2NKMKY[IGPGTQYCPGRTG)NCFGōCRNKMCELC4CRQTV[   Pliki dla programu głównego...................................................z.................................. 547 Pliki dla programu tworzącego raport w formie tabeli .................................................. 551 Pliki dla programu tworzącego wykres kołowy ...................................................z........ 556 Pliki dla programu tworzącego raport w postaci wykresu liniowo-kolumnowego ........... 559 Pliki dla programu generującego raport w postaci wykresu punktowego........................ 562 5MQTQYKF   Rozdział 4. CCYCPUQYCPG QDKGMV[)6- W tym rozdziale opisano zaawansowane obiekty GTK+, służące do rozmieszczania i pre- zentacji innych elementów. Szczegółowo opisano tu następujące widgety:        )VM6CDNG, )VM6TGG i )VM 6TGG, )VM(KZGF, )VM.C[QWV, )VM5ETQNNGF9KPFQY, )VM0QVGDQQM, )VM2CPGF. )VM6CDNG Obiekt )VM6CDNG działa na zasadzie siatki, w której można umieszczać inne obiekty. Moż- na powiedzieć, że )VM6CDNG jest połączeniem dwóch prostokątnych pojemników (pozio- mego i pionowego). Na rysunku 4.1 przedstawiono obiekt )VM6CDNG, który utworzymy w przykładowym programie (listing 4.1). W )VM6CDNG można umieścić obiekt w kilku komórkach (poziomo lub pionowo). Przykładowy program przedstawia działanie obiektu )VM6CDNG. Pokazano tu również nowy trend tworzenia „programów w akcji”, gdzie w odpowiedzi na wystąpienie zda- rzeń tworzy się (lub niszczy) określone widgety. Należy pamiętać, że jeśli będziemy ko- rzystać z tej metody w tworzonych aplikacjach, to jednocześnie będziemy musieli zna- leźć sposób na przechowanie danych, które mają być przekazane tworzonym na nowo obiektom. Rysunek 4.1 przedstawia okno utworzonej aplikacji, której kod źródłowy znajduje się w listingu 4.1. 128 Część I  Szybkie wprowadzenie 4[UWPGM Uruchomiony przykładowy program .KUVKPIPrezentacja obiektu GtkTable KPENWFGIVMIVMJ )VM9KFIGV HTOAVCDNG )VM9KFIGV VDN  2QPKUGRT[EKUMKQUVCPCWOKGUEQPGY)VM6CDNG  YMQNWOPKG2KGTYU[PKEJDGFKGPCLFQYCNUKGYTGFKG  MQNWOP[FTWIKYTGFKGMQNWOP[KVCMFCNGL   )VM9KFIGV EOFAA )VM9KFIGV EOFAA )VM9KFIGV EOFAA )VM9KFIGV EOFAA )VM9KFIGV EOFAA )VM9KFIGV EOFAA )VM9KFIGV EOFAA )VM9KFIGV EOFAA )VM9KFIGV EJMA XQKFFGUVTQ[AOCKP  XQKFOCMGAVCDNGADWVVQPU  XQKFCVVCEJAYKFIGVU  XQKFEOFAAAENKEMGF  XQKFEOFAAAENKEMGF  XQKFEOFAAAENKEMGF  XQKFEOFAAAENKEMGF  XQKFEOFAAAENKEMGF  XQKFEOFAAAENKEMGF  XQKFEOFAAAENKEMGF  XQKFEOFAAAENKEMGF  IKPVOCKP IKPVCTIEIEJCT CTIX=? ] IVMAKPKV CTIECTIX  HTOAVCDNGIVMAYKPFQYAPGY )6-A9+0 19A612. 8 .  Rozdział 4.  Zaawansowane obiekty GTK+ 129 IVMAYKPFQYAUGVAVKVNG )6-A9+0 19 HTOAVCDNG 2TGGPVCELCVCDNKE[QDKGMVQY  IVMAUKIPCNAEQPPGEV )6-A1$, 6 HTOAVCDNG  FGUVTQ[ )6-A5+)0#.A(70 FGUVTQ[AOCKP  07..  OCMGAVCDNGADWVVQPU   +PKELCNKCELCRT[EKUMQYW[EKGOYCTVQUEKFQO[UNP[EJ   5MQT[UVCO[VWIVMAVCDNGACVVCEJAFGHCWNVU COKCUV  HWPMELKCVVCEJAYKFIGVU YEGNWFGOQPUVTCELKFKCNCPKC  HWPMELKIVMAVCDNGACVVCEJAFGHCWNVU    IVMAVCDNGACVVCEJAFGHCWNVU )6-A6#$. VDN EOFAA  IVMAVCDNGACVVCEJAFGHCWNVU )6-A6#$. VDN EOFAA  IVMAVCDNGACVVCEJAFGHCWNVU )6-A6#$. VDN EOFAA  IVMAVCDNGACVVCEJAFGHCWNVU )6-A6#$. VDN EOFAA  IVMAVCDNGACVVCEJAFGHCWNVU )6-A6#$. VDN EOFAA  IVMAVCDNGACVVCEJAFGHCWNVU )6-A6#$. VDN EOFAA  IVMAVCDNGACVVCEJAFGHCWNVU )6-A6#$. VDN EOFAA  IVMAVCDNGACVVCEJAFGHCWNVU )6-A6#$. VDN EOFAA  EJMAIVMAEJGEMADWVVQPAPGYAYKVJANCDGN 2T[EKUMY[DQTW  IVMAVCDNGACVVCEJAFGHCWNVU )6-A6#$. VDN EJMA  IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVCDNG VDN  IVMAYKFIGVAUJQYACNN HTOAVCDNG  IVMAOCKP  TGVWTP _ XQKFFGUVTQ[AOCKP ]IVMAOCKPASWKV  _ XQKFCVVCEJAYKFIGVU IKPVA126+105IKPVA2# -+0) ] IVMAVCDNGACVVCEJ )6-A6#$. VDN EOFAAA126+105A126+105A2# -+0) A2# -+0)  IVMAVCDNGACVVCEJ )6-A6#$. VDN EOFAAA126+105A126+105A2# -+0) A2# -+0)  IVMAVCDNGACVVCEJ )6-A6#$. VDN EOFAAA126+105A126+105A2# -+0) A2# -+0)  IVMAVCDNGACVVCEJ )6-A6#$. VDN EOFAAA126+105A126+105A2# -+0) A2# -+0)  IVMAVCDNGACVVCEJ )6-A6#$. VDN EOFAAA126+105A126+105A2# -+0) A2# -+0)  IVMAVCDNGACVVCEJ )6-A6#$. VDN EOFAAA126+105A126+105A2# -+0) A2# -+0)  IVMAVCDNGACVVCEJ )6-A6#$. VDN EOFAAA126+105A126+105A2# -+0) A2# -+0)  130 Część I  Szybkie wprowadzenie IVMAVCDNGACVVCEJ )6-A6#$. VDN EOFAAA126+105A126+105A2# -+0) A2# -+0)  IVMAVCDNGACVVCEJ )6-A6#$. VDN EJMAA126+105A126+105A2# -+0) A2# -+0)  _ XQKFOCMGAVCDNGADWVVQPU ] VDNIVMAVCDNGAPGY 647   2CTCOGVT[RQY[UGLHWPMELKVQTGF[MQNWOP[QPCEGPKGLGFPQTQFPQUEK   EOFAAIVMADWVVQPAPGYAYKVJANCDGN 9[RGNPKGPKGQDKGMVCOK  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAA  ENKEMGF )6-A5+)0#.A(70 EOFAAAENKEMGF  07..  EOFAAIVMADWVVQPAPGYAYKVJANCDGN 7UVCY PQRELG P(+..  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAA  ENKEMGF )6-A5+)0#.A(70 EOFAAAENKEMGF  07..  EOFAAIVMADWVVQPAPGYAYKVJANCDGN 9[DKGTQRELG5*4+0-  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAA  ENKEMGF )6-A5+)0#.A(70 EOFAAAENKEMGF  07..  EOFAAIVMADWVVQPAPGYAYKVJANCDGN 9[DKGT P1RELG P :2#0   IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAA  ENKEMGF )6-A5+)0#.A(70 EOFAAAENKEMGF  07..  EOFAAIVMADWVVQPAPGYAYKVJANCDGN 9[DKGT P1RELG P(+.. PK P5*4+0-  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAA  ENKEMGF )6-A5+)0#.A(70 EOFAAAENKEMGF  07..  EOFAAIVMADWVVQPAPGYAYKVJANCDGN 9[DKGT P1RELG P5*4+0- PK P :2#0   IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAA  ENKEMGF )6-A5+)0#.A(70 EOFAAAENKEMGF  07..  EOFAAIVMADWVVQPAPGYAYKVJANCDGN 9[DKGT PQRELG P(+.. PK P :2#0   IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAA  ENKEMGF )6-A5+)0#.A(70 EOFAAAENKEMGF  07..  EOFAAIVMADWVVQPAPGYAYKVJANCDGN 9[DKGTQRELG P(+.. :2#0 K5*4+0-  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAA  ENKEMGF )6-A5+)0#.A(70 EOFAAAENKEMGF  07..  EJMAIVMAEJGEMADWVVQPAPGYAYKVJANCDGN 2T[EKUMY[DQTW  _ Rozdział 4.  Zaawansowane obiekty GTK+ 131 XQKFEOFAAAENKEMGF ]  6WY[MQT[UVCO[RQTCRKGTYU[HWPMELGIVMAYKFIGVAFGUVTQ[  2QPCEKUPKGEKWRT[EKUMWRTGW[VMQYPKMCDGFKGO[  PKUE[EKVYQT[EQFPQYCECNCVCDNKEGQDKGMVCOK  /WUKO[VCMRQUVCRKEDQQDKGMV)VM6CDNGPKGRQUKCFCHWPMELK   AUGVA     0CYGVIF[D[VCMCKPUVTWMELCKUVPKCNCOQPCD[KVCMY[MQT[UVCE  QOCYKCP[URQUQD9RKU[YCPKGRQFQDP[EJHWPMELKFNCMCFGIQRT[EKUMW  LGUVRTQEGUGOOWFP[OCNGLGUNKUCOQFKGNPKGY[MQPCO[OKCP[  TQOKGUEGPKCQDKGMVQYYKPVGTHGLUKGVQPCWE[O[UKGCTCFCE  RQYKGTEJPKCVCDNKE[KDúFKGO[OKGEPCFPKCRGNPCMQPVTQNG   IVMAYKFIGVAFGUVTQ[ VDN  OCMGAVCDNGADWVVQPU  CVVCEJAYKFIGVU   IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVCDNG VDN  IVMAYKFIGVAUJQYACNN HTOAVCDNG  _ XQKFEOFAAAENKEMGF ] IVMAYKFIGVAFGUVTQ[ VDN  OCMGAVCDNGADWVVQPU  CVVCEJAYKFIGVU )6-A(+..  IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVCDNG VDN  IVMAYKFIGVAUJQYACNN HTOAVCDNG  _ XQKFEOFAAAENKEMGF ] IVMAYKFIGVAFGUVTQ[ VDN  OCMGAVCDNGADWVVQPU  CVVCEJAYKFIGVU )6-A5*4+0-  IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVCDNG VDN  IVMAYKFIGVAUJQYACNN HTOAVCDNG  _ XQKFEOFAAAENKEMGF ] IVMAYKFIGVAFGUVTQ[ VDN  OCMGAVCDNGADWVVQPU  CVVCEJAYKFIGVU )6-A :2#0   IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVCDNG VDN  IVMAYKFIGVAUJQYACNN HTOAVCDNG  _ XQKFEOFAAAENKEMGF ] IVMAYKFIGVAFGUVTQ[ VDN  OCMGAVCDNGADWVVQPU  CVVCEJAYKFIGVU )6-A(+..^)6-A5*4+0-  IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVCDNG VDN  132 Część I  Szybkie wprowadzenie IVMAYKFIGVAUJQYACNN HTOAVCDNG  _ XQKFEOFAAAENKEMGF ] IVMAYKFIGVAFGUVTQ[ VDN  OCMGAVCDNGADWVVQPU  CVVCEJAYKFIGVU )6-A5*4+0-^)6-A :2#0   IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVCDNG VDN  IVMAYKFIGVAUJQYACNN HTOAVCDNG  _ XQKFEOFAAAENKEMGF ] IVMAYKFIGVAFGUVTQ[ VDN  OCMGAVCDNGADWVVQPU  CVVCEJAYKFIGVU )6-A(+..^)6-A :2#0   IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVCDNG VDN  IVMAYKFIGVAUJQYACNN HTOAVCDNG  _ XQKFEOFAAAENKEMGF ] IVMAYKFIGVAFGUVTQ[ VDN  OCMGAVCDNGADWVVQPU  CVVCEJAYKFIGVU )6-A5*4+0-^)6-A(+..^)6-A :2#0   IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVCDNG VDN  IVMAYKFIGVAUJQYACNN HTOAVCDNG  _ )VM6TGGK)VM 6TGG Obiekty )VM6TGG i )VM 6TGG służą do prezentacji drzewa elementów. Litera „C” w na- zwie )VM 6TGG oznacza „kolumny” (C pochodzi od angielskiego słowa Columns); moż- na powiedzieć, że )VM 6TGG jest skrzyżowaniem dwóch, znanych z VB kontrolek: kon- trolki prezentującej dane i kontrolki drzewa (rysunek 4.2, listing 4.2). W GTK+ obiekt )VM QPVCKPGT jest obiektem nadrzędnym dla )VM.KUV, )VM .KUV i )VM6TGG. )VM 6TGG po- chodzi od )VM .KUV, ale podobny związek nie istnieje pomiędzy )VM6TGG i )VM.KUV. 4[UWPGM Drzewa elementów, czyli GtkTree i GtkCTree W tym programie porównano cechy i wygląd widgetów )VM6TGG (po lewej stronie okna) i )VM 6TGG (po prawej stronie okna). Główną różnicą pomiędzy tymi obiektami jest fakt, że )VM 6TGG akceptuje tylko mapy pikselowe i tekst, a w )VM6TGG można umieścić dowol- ne widgety potomne. Rozdział 4.  Zaawansowane obiekty GTK+ 133 .KUVKPIGtkTree i GtkCTree KPENWFGIVMIVMJ )VM9KFIGV HTOAVTGGU )VM9KFIGV VTGGANGHV EVTGGATKIJV )VM9KFIGV UWDVTGGAKVGO )VM9KFIGV UWDVTGGAKVGO )VM9KFIGV UWDVTGGAYKFIGVU XQKFFGUVTQ[AOCKP  XQKFEOFAE[ENGANKPGAUV[NGAENKEMGF  XQKFEOFAE[ENGAGZRCPFGTAENKEMGF  IKPVOCKP IKPVCTIEIEJCT CTIX=? ] )VM9KFIGV JDQZAOCKP XDQZANGHV XDQZATKIJV )VM9KFIGV NXNAKVGO NXNAKVGO )VM9KFIGV YKFIGVUAKVGO )VM9KFIGV NCDGNAYKFIGV DWVVQPAYKFIGV EJGEMADQZAYKFIGV )VM9KFIGV KVGOAKVGO KVGOAKVGOAKVGO )VM9KFIGV NCDGNAKVGO DWVVQPAKVGO EJGEMADQZAKVGO )VM9KFIGV EOFAE[ENGANKPGAUV[NG EOFAE[ENGAGZRCPFGT )VM 6TGG0QFG TQQVAPQFGA )VM 6TGG0QFG TQQVAPQFGA )VM 6TGG0QFG TQQVAPQFGA  2QPKGLYRKUGO[PCINQYMKMQNWOPYQDKGMEKG VTGG  5GTQMQUEMQNWOP[LGUVQMTGUNQPCRTGNKEDGNKVGTPCY[  PCINQYMCCPKGRTGFCPGLCMKGCYKGTC   IEJCT EQNWOPAVKVNGU=?]2Q[ELC+PHQTOCELC_ IEJCT TQQVAFCVC=?]TQQVVGUV_ IEJCT TQQVAFCVC=?]TQQV6GPRQUKCFCYGN[RQFTGFPG_ IEJCT TQQVAFCVC=?]2QFYGGN2QFYGGN_ IVMAKPKV CTIECTIX  HTOAVTGGUIVMAYKPFQYAPGY )6-A9+0 19A612. 8 .  IVMAYKPFQYAUGVAVKVNG )6-A9+0 19 HTOAVTGGU 2TGGPVCELCYKFIGVQYFTGY  IVMAUKIPCNAEQPPGEV )6-A1$, 6 HTOAVTGGU  FGUVTQ[ )6-A5+)0#.A(70 FGUVTQ[AOCKP  07..  JDQZAOCKPIVMAJDQZAPGY 647   XDQZANGHVIVMAXDQZAPGY 647   XDQZATKIJVIVMAXDQZAPGY (#.5    )NQYPCTQPKECRQOKGF[)VM6TGGC)VM 6TGG  LGUV VCMUCOQLCMOKGF[)VM.KUVC)VM .KUV HCMVG  )VM6TGGCMEGRVWLGYU[UVMKGYKFIGV[ 134 Część I  Szybkie wprowadzenie  C)VM 6TGGV[NMQOCR[RKMUGNQYGKVGMUV   VTGGANGHVIVMAVTGGAPGY    TGYQPKGLGUVRT[FCVP[OQDKGMVGOLGUNKPKEPKGCYKGTC  0CUEGUEKGFQFCYCPKGPQY[EJGNGOGPVQYFQFTGYCLGUVDCTFQRTQUVG   NXNAKVGOIVMAVTGGAKVGOAPGYAYKVJANCDGN 2QKQO NGOGPV  NXNAKVGOIVMAVTGGAKVGOAPGYAYKVJANCDGN 2QKQO NGOGPV  IVMAVTGGACRRGPF )6-A64 VTGGANGHV NXNAKVGO  IVMAVTGGACRRGPF )6-A64 VTGGANGHV NXNAKVGO   0CTCKGPCUGFTGYQRT[RQOKPCDCTFKGLRQNGNKUV[   CNGV[FTGYCDGFCDCTFKGLYKFQEPGIF[WOKGUEKO[YPKO  RQFFTGYQ2QFFTGYCFQFCLGUKGVTQEJGKPCEGLQFYGNQY  KYUMCPKMQYMVQTGCRGYPKCLCUVTWMVWTGRQFFTGYC   0KGDGFKGO[WOKGUECEFTGYCYFTGYKGNGEFQFCO[  FTGYQFQGNGOGPVWFTGYC   UWDVTGGAKVGOIVMAVTGGAPGY  KVGOAKVGOIVMAVTGGAKVGOAPGYAYKVJANCDGN 2QKQO NGOGPV  IVMAVTGGACRRGPF )6-A64 UWDVTGGAKVGO KVGOAKVGO  IVMAVTGGAKVGOAUGVAUWDVTGG )6-A64 A+6 / NXNAKVGO UWDVTGGAKVGO   6GTCVTGDCLCYPKGRQMCCEGNGOGPV[RQFFTGYC   ,GUNKW[VMQYPKMCPCE[GNGOGPV[RQFFTGYCCPCUVGRPKGYKPKG  LGIQICNCVQVGGNGOGPV[PCFCNDGFCCPCEQPG   IVMAYKFIGVAUJQY KVGOAKVGO  UWDVTGGAKVGOIVMAVTGGAPGY  KVGOAKVGOAKVGOIVMAVTGGAKVGOAPGYAYKVJANCDGN 2QKQO NGOGPV  IVMAVTGGACRRGPF )6-A64 UWDVTGGAKVGO KVGOAKVGOAKVGO  IVMAVTGGAKVGOAUGVAUWDVTGG )6-A64 A+6 / KVGOAKVGO UWDVTGGAKVGO  IVMAYKFIGVAUJQY KVGOAKVGOAKVGO  YKFIGVUAKVGOIVMAVTGGAKVGOAPGYAYKVJANCDGN 9KFIGV[  IVMAVTGGACRRGPF )6-A64 VTGGANGHV YKFIGVUAKVGO  UWDVTGGAYKFIGVUIVMAVTGGAPGY  IVMAVTGGAKVGOAUGVAUWDVTGG )6-A64 A+6 / YKFIGVUAKVGO UWDVTGGAYKFIGVU    QFCLO[MKNMCYKFIGVQYFQFTGYC   0CLRKGTYWVYQT[O[GV[MKGVG    Rozdział 4.  Zaawansowane obiekty GTK+ 135 NCDGNAKVGOIVMAVTGGAKVGOAPGY  NCDGNAYKFIGVIVMANCDGNAPGY 6QLGUVGV[MKGVC  IVMAEQPVCKPGTACFF )6-A 106#+0 4 NCDGNAKVGO NCDGNAYKFIGV  IVMAVTGGACRRGPF )6-A64 UWDVTGGAYKFIGVU NCDGNAKVGO  IVMAYKFIGVAUJQY NCDGNAYKFIGV  IVMAYKFIGVAUJQY NCDGNAKVGO   0CUVGRPKGWOKGUEKO[YFTGYKGRT[EKUM   DWVVQPAKVGOIVMAVTGGAKVGOAPGY  DWVVQPAYKFIGVIVMADWVVQPAPGYAYKVJANCDGN 6QLGUVRT[EKUM  IVMAEQPVCKPGTACFF )6-A 106#+0 4 DWVVQPAKVGO DWVVQPAYKFIGV  IVMAVTGGACRRGPF )6-A64 UWDVTGGAYKFIGVU DWVVQPAKVGO  IVMAYKFIGVAUJQY DWVVQPAYKFIGV  IVMAYKFIGVAUJQY DWVVQPAKVGO   #VGTCRQNGY[DQTW   EJGEMADQZAKVGOIVMAVTGGAKVGOAPGY  EJGEMADQZAYKFIGVIVMAEJGEMADWVVQPAPGYAYKVJANCDGN 6QLGUVRQNGY[DQTW  IVMAEQPVCKPGTACFF )6-A 106#+0 4 EJGEMADQZAKVGO EJGEMADQZAYKFIGV  IVMAVTGGACRRGPF )6-A64 UWDVTGGAYKFIGVU EJGEMADQZAKVGO  IVMAYKFIGVAUJQY EJGEMADQZAYKFIGV  IVMAYKFIGVAUJQY EJGEMADQZAKVGO   2QTQYPCLO[VQFTGYGO 6TGG   EVTGGATKIJVIVMAEVTGGAPGYAYKVJAVKVNGU EQNWOPAVKVNGU  TQQVAPQFGAIVMAEVTGGAKPUGTVAPQFG )6-A 64 EVTGGATKIJV 07..07..TQQVAFCVC 07..07..07..07..(#.5 647  TQQVAPQFGAIVMAEVTGGAKPUGTVAPQFG )6-A 64 EVTGGATKIJV 07..07..TQQVAFCVC 07..07..07..07..(#.5 647  TQQVAPQFGAIVMAEVTGGAKPUGTVAPQFG )6-A 64 EVTGGATKIJV TQQVAPQFGA07.. TQQVAFCVC 07..07..07..07..(#.5 647   -QPUVTWMELCFTGYC 6TGGLGUVPCEPKGRTQUVUC  9[UVCTE[WVYQT[ELGFGPGIGORNCTVGIQYKFIGVWCPCUVGRPKG  VYQT[EYGN[KNCE[ELGYGNCOKYFTGYKG1VQ  RCTCOGVT[FNCHWPMELKIVMAEVTGGAKPUGTVAPQFG   EVTGG1DKGMV 6TGG  RCTGPV1PCECYGGNPCFTGFP[07..FNCYGNCINQYPGIQ  UKDNKPI1PCECYGGNUKQUVTCP[07..VQCMQPEGPKGICNGK  VGZV6CDNKECYCTVQUEKCOKRQUEGIQNP[EJMQNWOP  NKEDCYCTVQUEKLGUVTQYPCNKEDKGMQNWOP  WOKGUEQP[EJYEVTGG  URCEKPI.KEDCRKMUGNKRQOKGF[UVTWMVWTCFTGYC  CVGMUVGO  RKZOCRAENQUGF  DKVOCUMAENQUGF 1FRQYKGFPKGKMQP[Y[UYKGVNCPG  RKZOCRAQRGPGFIF[YGGNLGUVTQYKPKGV[NWDYKPKGV[  DKVOCUMAQRGPGF  KUANGCH9CTVQUENQIKEPCQMTGUNCLCECE[GNGOGPVPKGLGUVYGNGO 136 Część I  Szybkie wprowadzenie  647 QPCECGGNGOGPVPKGCYKGTCYGNQYRQFTGFP[EJ   PKGOQPCVCOWOKGUEKECFP[EJYGNQYRQFTGFP[EJ   GZRCPFGF9CTVQUENQIKEPCQMTGUNCLCECE[FCP[YGGN  LGUVTQYKPKGV[E[PKG    EOFAE[ENGANKPGAUV[NGIVMADWVVQPAPGYAYKVJANCDGN 5V[NGNKPKK  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAE[ENGANKPGAUV[NG  ENKEMGF )6-A5+)0#.A(70 EOFAE[ENGANKPGAUV[NGAENKEMGF  07..  EOFAE[ENGAGZRCPFGTIVMADWVVQPAPGYAYKVJANCDGN 5V[NGTQYKLCE[  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAE[ENGAGZRCPFGT  ENKEMGF )6-A5+)0#.A(70 EOFAE[ENGAGZRCPFGTAENKEMGF  07..  IVMADQZARCEMAUVCTV )6-A$1: XDQZANGHV VTGGANGHV647 647   IVMADQZARCEMAUVCTV )6-A$1: XDQZATKIJV EVTGGATKIJV647 647   IVMADQZARCEMAUVCTV )6-A$1: XDQZATKIJV EOFAE[ENGANKPGAUV[NG647 (#.5   IVMADQZARCEMAUVCTV )6-A$1: XDQZATKIJV EOFAE[ENGAGZRCPFGT647 (#.5   IVMADQZARCEMAUVCTV )6-A$1: JDQZAOCKP XDQZANGHV647 647   IVMADQZARCEMAUVCTV )6-A$1: JDQZAOCKP XDQZATKIJV647 647   IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAVTGGU JDQZAOCKP  IVMAYKFIGVAUJQYACNN HTOAVTGGU  IVMAOCKP  TGVWTP _ XQKFFGUVTQ[AOCKP ]IVMAOCKPASWKV  _ XQKFEOFAE[ENGANKPGAUV[NGAENKEMGF ] UVCVKEIKPVNKPGAUV[NG KH NKPGAUV[NG NKPGAUV[NG GNUGNKPGAUV[NG  UYKVEJ NKPGAUV[NG ] ECUGIVMAEVTGGAUGVANKPGAUV[NG )6-A 64 EVTGGATKIJV  )6-A 64 A.+0 5A010  DTGCM ECUGIVMAEVTGGAUGVANKPGAUV[NG )6-A 64 EVTGGATKIJV  )6-A 64 A.+0 5A51.+  DTGCM ECUGIVMAEVTGGAUGVANKPGAUV[NG )6-A 64 EVTGGATKIJV  )6-A 64 A.+0 5A 166  DTGCM Rozdział 4.  Zaawansowane obiekty GTK+ 137 ECUGIVMAEVTGGAUGVANKPGAUV[NG )6-A 64 EVTGGATKIJV  )6-A 64 A.+0 5A6#$$  DTGCM FGHCWNVIARTKPV 6CNKPKCPKGRQYKPPCD[EYKFQEPC  DTGCM _ _ XQKFEOFAE[ENGAGZRCPFGTAENKEMGF ] UVCVKEIKPVGZRCPFGTAUV[NG KH GZRCPFGTAUV[NG GZRCPFGTAUV[NG GNUGGZRCPFGTAUV[NG  UYKVEJ GZRCPFGTAUV[NG ] ECUGIVMAEVTGGAUGVAGZRCPFGTAUV[NG )6-A 64 EVTGGATKIJV  )6-A 64 A :2#0 4A010  DTGCM ECUGIVMAEVTGGAUGVAGZRCPFGTAUV[NG )6-A 64 EVTGGATKIJV  )6-A 64 A :2#0 4A537#4  DTGCM ECUGIVMAEVTGGAUGVAGZRCPFGTAUV[NG )6-A 64 EVTGGATKIJV  )6-A 64 A :2#0 4A64+#0).  DTGCM ECUGIVMAEVTGGAUGVAGZRCPFGTAUV[NG )6-A 64 EVTGGATKIJV  )6-A 64 A :2#0 4A +4 7.#4  DTGCM FGHCWNVIARTKPV 6CNKPKCPKGRQYKPPCD[EYKFQEPC  DTGCM _ _ )VM(KZGF Obiekt )VM(KZGF jest obiektem docenianym szczególnie przez programistów wykorzy- stujących wcześniej VB lub VC++ ze względu na jedną, ważną właściwość. Otóż w tym obiekcie możemy umieszczać inne widgety bezpośrednio na jego powierzchni (pokrytej siatką, ułatwiającą lokalizację rozmieszczanych widgetów — rysunek 4.3). Nie korzy- stamy tu z obiektów-pojemników, których stosowanie jest główną własnością GTK+. Większość programistów zamiast tego obiektu wybierze )VM.C[QWV, ze względu na jego większe możliwości (obiekt zaprezentowano w kolejnej sekcji, „)VM.C[QWV”). Program umieszczony w listingu 4.3 jest bardzo prosty. Wykorzystano w nim obiekt )VM(KZGF i jeden przycisk, który po każdym kliknięciu zmienia swoją pozycję na po- wierzchni okna )VM(KZGF. Porównajmy )VM(KZGF z obiektem )VM.C[QWV przed podjęciem decyzji, który z nich lepiej nadaje się do wykorzystania w naszych aplikacjach. 138 Część I  Szybkie wprowadzenie 4[UWPGM Obiekt GtkFixed .KUVKPIPrezentacja GtkFixed KPENWFGIVMIVMJ KPENWFGUVFNKDJ  $KDNKQVGMCUVFNKDJ LGUVRQVTGDPCFQ  Y[PCECPKCYCTVQUEKNQUQY[EJYHWPMELKYTQVPGL9CTVQUEK  NQUQYGDGFCRQVTGDPCFQRTGOKGUECPKCRT[EKUMWRQ  RQYKGTEJPKQDKGMVW)VM(KZGF   )VM9KFIGV HTOAHKZGF )VM9KFIGV HKZGFAOCKP )VM9KFIGV EOF XQKFFGUVTQ[AOCKP  XQKFEOFAENKEMGF  IKPVOCKP IKPVCTIEIEJCT CTIX=? ] IVMAKPKV CTIECTIX  HTOAHKZGFIVMAYKPFQYAPGY )6-A9+0 19A612. 8 .  IVMAYKPFQYAUGVAVKVNG )6-A9+0 19 HTOAHKZGF 2TGGPVCELCQDKGMVW)VM(KZGF  IVMAUKIPCNAEQPPGEV )6-A1$, 6 HTOAHKZGF  FGUVTQ[ )6-A5+)0#.A(70 FGUVTQ[AOCKP  07..  HKZGFAOCKPIVMAHKZGFAPGY   )VM(KZGFLGUVQDKGMVGORTQUV[OYW[EKW0CNG[  RQFCEYURQNTGFPGRQNQGPKCMCFGIQYKFIGVWRQVQOPGIQ  WOKGUECPGIQPCRQYKGTEJPK)VM(KZGF#VT[DWV[HKNN  GZRCPFRCFFKPIKVFUCVWDGW[VGEPGQDKGMV[  RQVQOPGWOKGUEQPGPCRQYKGTEJPK)VM(KZGFDGFCFQO[UNPKG  CLOQYCEPCLOPKGLU[QDUCTRQYCNCLCE[PCKEJY[UYKGVNGPKG  6CMUCOQCEJQYCUKGUCOQDKGMV)VM(KZGFMVQT[DGFKGFQO[UNPKG  CLOQYCNOKPKOCNPCRQYKGTEJPKGGMTCPWRQVTGDPCFQY[UYKGVNGPKC  YU[UVMKEJLGIQQDKGMVQY,GUNKYKFIGVRQVQOP[QUVCPKGRTGUWPKGV[  RQCDKGCE[QDUCT)VM(KZGFVQYKFIGVVGPOKGPKQFRQYKGFPKQ  UYQLGY[OKCT[VCMCD[RTGUWPKGV[QDKGMVPCFCND[NYKFQEP[  ,GUNKQDKGMVRQVQOP[QUVCPKGRQPKGLWOKGUEQP[YUTQFMW  QMPCINQYPGIQ)VM(KZGFPKGOPKGLU[CWVQOCV[EPKG  UYGLRQYKGTEJPK    /QGVQRTQYCFKEFQFKYP[EJKPKGQEGMKYCP[EJCEJQYCP Rozdział 4.  Zaawansowane obiekty GTK+ 139  QMPCINQYPGIQYVTCMEKGFKCNCPKCRTQITCOW CNQO[  RT[MNCFQYCRQ[ELGQDKGMVW2TGUWPO[QDKGMVPCRQ[ELG   QMPQINQYPGFQUVQUWLGUKGFQPQYGIQRQNQGPKC )F[OKGPKO[RQNQGPKG  QDKGMVWPCQMPQPKGOPKGLU[UKG)F[LGFPCMRTGPKGUKGO[  QDKGMVPCVQQMPQINQYPGPQYOKGPKUYQLTQOKCTVCMCD[  Y[UYKGVNCP[QDKGMVOKGUEKNUKGPCLGIQRQYKGTEJPK  1MPQINQYPGLGUVT[UQYCPGRQPQYPKGCMCF[OTCGOIF[QDKGMV[PCNGCEGFQ  PKGIQQUVCPCWOKGUEQPGRQCRQYKGTEJPKC)VM(KZGF1MPQINQYPGMVQTG  RKGTYQVPKGD[NQMYCFTCVGOOQGUVCEUKGYRGYP[EJRT[RCFMCEJPR  DCTFQEKGPMKOKFNWIKORTQUVQMCVGO    JQè)VM(KZGFLGUVDCTFQNCVY[YCUVQUQYCPKW  RTQITCOKUEKEGUEKGLMQT[UVCLC)VM.C[QWV  2TGFFQMQPCPKGOY[DQTWWNWDKQPGIQQMPCURTCYFO[  YCF[KCNGV[MCFGIQPKEJ )VM(KZGFK)VM.C[QWV    EOFIVMADWVVQPAPGYAYKVJANCDGN 2T[EKUM  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOF  ENKEMGF )6-A5+)0#.A(70 EOFAENKEMGF  07..  IVMAHKZGFARWV )6-A(+: HKZGFAOCKP EOF   6TGEKOKEYCTV[ORCTCOGVTGORQY[UGLHWPMELK  UCQFRQYKGFPKQQFNGINQUEQFNGYGLMTCYGFKQMPC YRKMUGNCEJ  KQFNGINQUEQFIQTPGLMTCYGFKQMPC TQYPKG  YRKMUGNCEJ    IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAHKZGF HKZGFAOCKP  IVMAYKFIGVAUJQYACNN HTOAHKZGF  IVMAOCKP  TGVWTP _ XQKFFGUVTQ[AOCKP ]IVMAOCKPASWKV  _ XQKFEOFAENKEMGF ] IKPVZARQU[ARQU ZARQUTCPF  [ARQUTCPF   6WIGPGTWLGO[NKED[NQUQYGYCMTGUKGQFFQ  MVQTGRQUNWCPCOLCMQPQYGNQMCNKCELGRT[EKUMW   FQ] ZARQUZARQU _YJKNG ZARQU   140 Część I  Szybkie wprowadzenie FQ] [ARQU[ARQU _YJKNG [ARQU   IVMAHKZGFAOQXG )6-A(+: HKZGFAOCKP )6-A9+ ) 6 EOF ZARQU[ARQU  _ )VM.C[QWV )VM.C[QWV ma podobne właściwości, co )VM(KZGF, ale umożliwia wykorzystanie więk- szej powierzchni dla widgetów potomnych od powierzchni wymaganej do ich wyświe- tlenia. W tym obiekcie, zamiast korzystać z niszczenia i ponownego tworzenia okna, mamy do dyspozycji funkcje AHTGGGA i AVJCYA (opisane w listingu 4.4). Na rysun- ku 4.4 przedstawiono wynik działania programu. 4[UWPGM Prezentacja działania GtkLayout Aby uwidocznić podobieństwa i różnice pomiędzy kontrolkami )VM(KZGF i )VM.C[QWV, listing 4.4 jest bardzo podobny do listingu 4.3. Najlepiej oba programy skompilować i uruchomić, a następnie wybrać bardziej odpowiedni dla danego zastosowania obiekt. .KUVKPIPrezentacja GtkLayout KPENWFGIVMIVMJ KPENWFGUVFNKDJ )VM9KFIGV HTOANC[QWV )VM9KFIGV NC[QWVAOCKP )VM9KFIGV EOF XQKFFGUVTQ[AOCKP  XQKFEOFAENKEMGF  IKPVOCKP IKPVCTIEIEJCT CTIX=? ] IVMAKPKV CTIECTIX  HTOANC[QWVIVMAYKPFQYAPGY )6-A9+0 19A612. 8 .  IVMAYKPFQYAUGVAVKVNG )6-A9+0 19 HTOANC[QWV 2TGGPVCELCQDKGMVW)VM.C[QWV  IVMAUKIPCNAEQPPGEV )6-A1$, 6 HTOANC[QWV  FGUVTQ[ )6-A5+)0#.A(70 FGUVTQ[AOCKP  07..  Rozdział 4.  Zaawansowane obiekty GTK+ 141 NC[QWVAOCKPIVMANC[QWVAPGY 07..07..    COKCUVY[YQN[YCEHWPMELGIVMANC[QWVAPGY MVQTCLCMQRCTCOGVTQY  RQVTGDWLGQDKGMVQYTGIWNCE[LP[EJ RQKQO[EJKRKQPQY[EJ   OQPCUMQT[UVCERQRTGFPKGIQNKUVKPIW  KYKPUVTWMELCEJVYQTCE[EJQDKGMV[COKGPKE  UNQYMQHKZGFPCNC[QWV RTQITCORQYKPKGPCFKCNCE    6GPRTQITCOLGUVRQFQDP[FQRQRTGFPKGIQCNGRQUKCFC  MKNMCFQFCVMQY[EJKPUVTWMELKRTGGPVWLCE[EJ  OQNKYQUEKQDKGMVW)VM.C[QWV   EOFIVMADWVVQPAPGYAYKVJANCDGN 2T[EKUM  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOF  ENKEMGF )6-A5+)0#.A(70 EOFAENKEMGF  07..  IVMANC[QWVARWV )6-A.#;176 NC[QWVAOCKP EOF  IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOANC[QWV NC[QWVAOCKP  IVMAYKFIGVAUJQYACNN HTOANC[QWV  IVMAOCKP  TGVWTP _ XQKFFGUVTQ[AOCKP ]IVMAOCKPASWKV  _ XQKFEOFAENKEMGF ] IKPVZARQU[ARQU ZARQUTCPF  [ARQUTCPF   6WIGPGTWLGO[NKED[NQUQYGYCMTGUKGQFFQ  MVQTGRQUNWCPCOLCMQPQYGNQMCNKCELGRT[EKUMW   FQ] ZARQUZARQU _YJKNG ZARQU   FQ] [ARQU[ARQU _YJKNG [ARQU    1VQPCLYKGMUCTQPKECRQOKGF[)VM(KZGFC)VM.C[QWV   COKCUVT[UQYCEQFPQYCQMPQYTCLGIQGNGOGPVCOKNGRKGL  CDNQMQYCELGCRQWRTGFPKORTGOKGUEGPKWLGIQQDKGMVQY  QFDNQMQYCE,GUVVQUEGIÎNPKGRT[FCVPGRT[YKGNWQDKGMVCEJ  RQVQOP[EJ   142 Część I  Szybkie wprowadzenie IVMANC[QWVAHTGGG )6-A.#;176 NC[QWVAOCKP  IVMANC[QWVAOQXG )6-A.#;176 NC[QWVAOCKP )6-A9+ ) 6 EOF ZARQU[ARQU  IVMANC[QWVAVJCY )6-A.#;176 NC[QWVAOCKP  _ )VM5ETQNNGF9KPFQY Obiekt )VM5ETQNNGF9KPFQY jest pojemnikiem, w którym można umieścić inne widgety. Okno to posiada paski przewijania. Można je zaimplementować również w innych wid- getach, które nie posiadają tych pasków. Dzięki temu na jednym ekranie można umie- ścić kilka okienek, w których — za pomocą pasków przewijania — można wybierać wyświetlany obszar z pożądanymi obiektami. Na rysunku 4.5 przedstawiono okno wy- generowane przez program, którego kod źródłowy znajduje się w listingu 4.5. 4[UWPGM Obiekt GtkScrolledWindow W programie prezentującym okno przewijane umieściliśmy dwa przyciski, dzięki któ- rym możemy wybrać odpowiednie ustawienia. Jeden z nich służy do wybrania opcji always, czyli stałego wyświetlania pasków przewijania (niezależnie od tego, czy jest to potrzebne, czy nie), a drugi — do ustawienia opcji auto, czyli wyświetlania pasków tyl- ko wtedy, gdy widget w oknie głównym nie mieści się na wyświetlanym obszarze. Na- leży wiedzieć, że odpowiednich ustawień można dokonać dla każdego paska osobno. Na przykład dla paska pionowego można wybrać właściwość auto, a dla poziomego — always. W naszym programie będziemy wybierać takie same właściwości dla obydwu pasków. .KUVKPIPrezentacja GtkScrolledDemo KPENWFGIVMIVMJ )VM9KFIGV HTOAUETQNNGF )VM9KFIGV UETQNNGFAOCKP )VM9KFIGV HKZGFAOCKP )VM9KFIGV EOFAUGVARQNKE[ACWVQ EOFAUGVARQNKE[ACNYC[U XQKFFGUVTQ[AOCKP  XQKFEOFAUGVARQNKE[ACWVQAENKEMGF  XQKFEOFAUGVARQNKE[ACNYC[UAENKEMGF  Rozdział 4.  Zaawansowane obiekty GTK+ 143 IKPVOCKP IKPVCTIEIEJCT CTIX=? ] IVMAKPKV CTIECTIX  HTOAUETQNNGFIVMAYKPFQYAPGY )6-A9+0 19A612. 8 .  IVMAYKPFQYAUGVAVKVNG )6-A9+0 19 HTOAUETQNNGF 2TGGPVCELCQMPCRCUMCOK RTGYKLCPKC   0CNG[CWYC[EGPKGRQFCLCERQECVMQY[EJTQOKCTQY  QMPCICFCO[UKGPCVQCD[QMPQCLGNQDCTFQOCNC  RQYKGTEJPKG#D[Y[UYKGVNKEQD[FYCRT[EKUMKVTGDC  DGFKGOKGPKETQOKCT[QMPCINQYPGIQ2QMCGO[VWTQYPKG  FYCURQUQD[Y[UYKGVNCPKCRCUMQYRTGYKLCPKC   IVMAUKIPCNAEQPPGEV )6-A1$, 6 HTOAUETQNNGF  FGUVTQ[ )6-A5+)0#.A(70 FGUVTQ[AOCKP  07..  UETQNNGFAOCKPIVMAUETQNNGFAYKPFQYAPGY 07..07..  HKZGFAOCKPIVMAHKZGFAPGY  EOFAUGVARQNKE[ACWVQIVMADWVVQPAPGYAYKVJANCDGN 2CUMKY[UYKGVNCPGYTCKG RQVTGD[  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAUGVARQNKE[ACWVQ  ENKEMGF )6-A5+)0#.A(70 EOFAUGVARQNKE[ACWVQAENKEMGF  07..  EOFAUGVARQNKE[ACNYC[UIVMADWVVQPAPGYAYKVJANCDGN 2CUMKCYUGYKFQEPG  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAUGVARQNKE[ACNYC[U  ENKEMGF )6-A5+)0#.A(70 EOFAUGVARQNKE[ACNYC[UAENKEMGF  07..  IVMAHKZGFARWV )6-A(+: HKZGFAOCKP EOFAUGVARQNKE[ACWVQ  IVMAHKZGFARWV )6-A(+: HKZGFAOCKP EOFAUGVARQNKE[ACNYC[U  IVMAUETQNNGFAYKPFQYACFFAYKVJAXKGYRQTV )6-A5 41.. A9+0 19 UETQNNGFAOCKP  HKZGFAOCKP  IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAUETQNNGF UETQNNGFAOCKP  IVMAYKFIGVAUJQYACNN HTOAUETQNNGF  IVMAOCKP  TGVWTP _ XQKFFGUVTQ[AOCKP ]IVMAOCKPASWKV  _ XQKFEOFAUGVARQNKE[ACWVQAENKEMGF ] IVMAUETQNNGFAYKPFQYAUGVARQNKE[ )6-A5 41.. A9+0 19 UETQNNGFAOCKP  )6-A21.+ ;A#761/#6+  )6-A21.+ ;A#761/#6+  144 Część I  Szybkie wprowadzenie _ XQKFEOFAUGVARQNKE[ACNYC[UAENKEMGF ]  6QLGUVFQO[UNPGCEJQYCPKGUKGYKFIGVW   IVMAUETQNNGFAYKPFQYAUGVARQNKE[ )6-A5 41.. A9+0 19 UETQNNGFAOCKP  )6-A21.+ ;A#.9#;5 )6-A21.+ ;A#.9#;5  _ )VM0QVGDQQM Obiekt )VM0QVGDQQM jest odpowiednikiem kontrolki nazywanej przez programistów VB „kontrolką zakładek”. Taka kontrolka umożliwia egzystencję wielu obiektów na jednej „powierzchni użytkowej”. Każda zakładka oznacza osobną stronę, na której można umie- ścić dowolne obiekty kontrolne. W danej chwili można wyświetlić jedną stronę, a inne w tym czasie pozostaną ukryte. Okno z główną zakładką aplikacji pokazano na rysunku 4.6, a odpowiedni kod źródło- wy w listingu 4.6. Zwróćmy uwagę na możliwość dynamicznego dodawania kolejnych stron (w zasadzie można napisać program, w którym można dodawać również inne wid- gety w trakcie jego działania). 4[UWPGM Uruchomiony program prezentujący działanie GtkNotebook .KUVKPIProgram prezentujący obiekt GtkPaned KPENWFGIVMIVMJ )VM9KFIGV HTOAPQVGDQQM )VM9KFIGV PQVGDQQMAOCKP )VM9KFIGV HKZGFARCIG )VM9KFIGV XDQZARCIG XQKFFGUVTQ[AOCKP  XQKFEOFATQVCVGAVCDUAENKEMGF  XQKFEOFAUGVAVCDUAJQOQIGPGQWUAENKEMGF  XQKFEOFAUGVAVCDUAJGVGTQIGPGQWUAENKEMGF  XQKFEOFACFFARCIGAENKEMGF  XQKFEOFAIGVARCIGAKPFGZAENKEMGF  XQKFPQVGDQQMAUYKVEJARCIG  IKPVOCKP IKPVCTIEIEJCT CTIX=? ] )VM9KFIGV EOFATQVCVGAVCDU Rozdział 4.  Zaawansowane obiekty GTK+ 145 )VM9KFIGV EOFAUGVAVCDUAJQOQIGPGQWU EOFAUGVAVCDUAJGVGTQIGPGQWU )VM9KFIGV EOFACFFARCIG EOFAIGVARCIGAKPFGZ )VM9KFIGV NDNAVCD NDNAVCD IVMAKPKV CTIECTIX  HTOAPQVGDQQMIVMAYKPFQYAPGY )6-A9+0 19A612. 8 .  IVMAYKPFQYAUGVAVKVNG )6-A9+0 19 HTOAPQVGDQQM 2TGGPVCELCQMPC0QVGDQQM  IVMAUKIPCNAEQPPGEV )6-A1$, 6 HTOAPQVGDQQM  FGUVTQ[ )6-A5+)0#.A(70 FGUVTQ[AOCKP  07..  PQVGDQQMAOCKPIVMAPQVGDQQMAPGY  IVMAUKIPCNAEQPPGEV )6-A1$, 6 PQVGDQQMAOCKP  UYKVEJRCIG )6-A5+)0#.A(70 PQVGDQQMAUYKVEJARCIG  07..   5VTQPCRKGTYUCYPQVCVPKMW   HKZGFARCIGIVMAHKZGFAPGY  NDNAVCDIVMANCDGNAPGY 2KGTYUCCMNCFMC  EOFATQVCVGAVCDUIVMADWVVQPAPGYAYKVJANCDGN 4QVCELCCMNCFGM  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFATQVCVGAVCDU  ENKEMGF )6-A5+)0#.A(70 EOFATQVCVGAVCDUAENKEMGF  07..  EOFAUGVAVCDUAJQOQIGPGQWUIVMADWVVQPAPGYAYKVJANCDGN 6CMCUCOCYKGNMQUECMNCFGM  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAUGVAVCDUAJQOQIGPGQWU  ENKEMGF )6-A5+)0#.A(70 EOFAUGVAVCDUAJQOQIGPGQWUAENKEMGF  07..  EOFAUGVAVCDUAJGVGTQIGPGQWUIVMADWVVQPAPGYAYKVJANCDGN 4QPCYKGNMQUECMNCFGM  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAUGVAVCDUAJGVGTQIGPGQWU  ENKEMGF )6-A5+)0#.A(70 EOFAUGVAVCDUAJGVGTQIGPGQWUAENKEMGF  07..  IVMAHKZGFARWV )6-A(+: HKZGFARCIG EOFATQVCVGAVCDU  IVMAHKZGFARWV )6-A(+: HKZGFARCIG EOFAUGVAVCDUAJQOQIGPGQWU  IVMAHKZGFARWV )6-A(+: HKZGFARCIG EOFAUGVAVCDUAJGVGTQIGPGQWU  IVMAPQVGDQQMACRRGPFARCIG )6-A016 $11- PQVGDQQMAOCKP HKZGFARCIGNDNAVCD   5VTQPC   XDQZARCIGIVMAXDQZAPGY 647   EOFACFFARCIGIVMADWVVQPAPGYAYKVJANCDGN  QFCLUVTQPG  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFACFFARCIG  ENKEMGF )6-A5+)0#.A(70 EOFACFFARCIGAENKEMGF  07..  146 Część I  Szybkie wprowadzenie EOFAIGVARCIGAKPFGZIVMADWVVQPAPGYAYKVJANCDGN 2QDKGTKPFGMUUVTQP[  IVMAUKIPCNAEQPPGEV )6-A1$, 6 EOFAIGVARCIGAKPFGZ  ENKEMGF )6-A5+)0#.A(70 EOFAIGVARCIGAKPFGZAENKEMGF  07..  IVMADQZARCEMAUVCTVAFGHCWNVU )6-A$1: XDQZARCIG EOFACFFARCIG  IVMADQZARCEMAUVCTVAFGHCWNVU )6-A$1: XDQZARCIG EOFAIGVARCIGAKPFGZ  NDNAVCDIVMANCDGNAPGY  TWICCMNCFMC  IVMAPQVGDQQMACRRGPFARCIG )6-A016 $11- PQVGDQQMAOCKP XDQZARCIGNDNAVCD   -QPKGEFTWIKGLCMNCFMKECUPCNQGPKGQMPCINQYPGIQ   IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOAPQVGDQQM PQVGDQQMAOCKP  IVMAYKFIGVAUJQYACNN HTOAPQVGDQQM  IVMAOCKP  TGVWTP _ XQKFFGUVTQ[AOCKP ]IVMAOCKPASWKV  _ XQKFEOFATQVCVGAVCDUAENKEMGF ] UVCVKEIKPVVCDANQECVKQP KH VCDANQECVKQP VCDANQECVKQP GNUGVCDANQECVKQP  UYKVEJ VCDANQECVKQP ] ECUGIVMAPQVGDQQMAUGVAVCDARQU )6-A016 $11- PQVGDQQMAOCKP )6-A215A612  DTGCM ECUGIVMAPQVGDQQMAUGVAVCDARQU )6-A016 $11- PQVGDQQMAOCKP )6-A215A4+)*6  DTGCM ECUGIVMAPQVGDQQMAUGVAVCDARQU )6-A016 $11- PQVGDQQMAOCKP )6-A215A$1661/  DTGCM ECUGIVMAPQVGDQQMAUGVAVCDARQU )6-A016 $11- PQVGDQQMAOCKP )6-A215A. (6  DTGCM FGHCWNVIARTKPV 6GPRT[RCFGMPKGRQYKPKGPPKIF[Y[UVCRKE P  _ _ XQKFEOFAUGVAVCDUAJQOQIGPGQWUAENKEMGF ] IVMAPQVGDQQMAUGVAJQOQIGPGQWUAVCDU )6-A016 $11- PQVGDQQMAOCKP 647  _ XQKFEOFAUGVAVCDUAJGVGTQIGPGQWUAENKEMGF Rozdział 4.  Zaawansowane obiekty GTK+ 147 ]  6CHWPMELCPKGOCGHGMVWLGUNKCMNCFMKWOKGUEQPGUCRQRTCYGLNWDNGYGL  UVTQPKG9V[ORT[RCFMWHWPMELCCEJQYCUKGVCMUCOQLCM  EOFAUGVAVCDUAJQOQIGPGQWUAENKEMGF    IVMAPQVGDQQMAUGVAJQOQIGPGQWUAVCDU )6-A016 $11- PQVGDQQMAOCKP (#.5  _ XQKFEOFACFFARCIGAENKEMGF ] )VM9KFIGV HKZGF )VM9KFIGV NDN HKZGFIVMAHKZGFAPGY  NDNIVMANCDGNAPGY 0QY[  IVMAPQVGDQQMACRRGPFARCIG )6-A016 $11- PQVGDQQMAOCKP HKZGFNDN   1FUYKGGPKGQMPC   IVMAYKFIGVAUJQYACNN PQVGDQQMAOCKP  _ XQKFEOFAIGVARCIGAKPFGZAENKEMGF ]   CMNCFMKUCPWOGTQYCPGQFGTC  IARTKPV +PFGMUUVTQP[VQK P IVMAPQVGDQQMAIGVAEWTTGPVARCIG )6-A016 $11- PQVGDQQMAOCKP  _ XQKFPQVGDQQMAUYKVEJARCIG ] IARTKPV UVTQPGOKGPKQPQ P  _ )VM2CPGF Dzięki widgetowi )VM2CPGF można podzielić okno — pionowo lub poziomo — na dwie mniejsze powierzchnie, zwane panelami (rysunek 4.7). Jeśli chcemy uzyskać więcej mniejszych powierzchni, możemy dzielić większe na dwie mniejsze, potem mniejsze na jeszcze mniejsze, i tak dalej. Po uruchomieniu programu w oknie zobaczymy specjalne przyciski, dzięki którym będziemy mogli zmienić rozmiary każdej powierzchni (pod wa- runkiem, że wybierzemy właściwe opcje). Zwróćmy uwagę na wymiary przycisków służących do zmiany rozmiarów powierzchni. W naszym przypadku mamy do czynienia z bardzo „cieniutkimi” obiektami, ale nic nie stoi na przeszkodzie, aby wykorzystać większe przyciski. Wymiary tych przycisków są związane z przestrzenią pomiędzy granicą powierzchni a obiektami w niej umieszczony- mi. Wielkość tej przestrzeni określa się w funkcji IVMARCPGFAIWVVGTAUKG . 148 Część I  Szybkie wprowadzenie 4[UWPGM Okno prezentacji GtkPaned .KUVKPIPrezentacja GtkPaned KPENWFGIVMIVMJ )VM9KFIGV HTOARCPGF XQKFFGUVTQ[AOCKP  IKPVOCKP IKPVCTIEIEJCT CTIX=? ] )VM9KFIGV NDNAJRCPGFANGHV )VM9KFIGV NDNAXRCPGFAVQR )VM9KFIGV NDNAJRCPGFANGHV )VM9KFIGV NDNAXRCPGFAVQR )VM9KFIGV NDNAXRCPGFADQVVQO )VM9KFIGV JRCPGF )VM9KFIGV XRCPGF )VM9KFIGV JRCPGF )VM9KFIGV XRCPGF IVMAKPKV CTIECTIX  HTOARCPGFIVMAYKPFQYAPGY )6-A9+0 19A612. 8 .  IVMAYKPFQYAUGVAVKVNG )6-A9+0 19 HTOARCPGF 2TGGPVCELC)VM2CPGF  IVMAUKIPCNAEQPPGEV )6-A1$, 6 HTOARCPGF  FGUVTQ[ )6-A5+)0#.A(70 FGUVTQ[AOCKP  07..  JRCPGFIVMAJRCPGFAPGY  IVMARCPGFAIWVVGTAUKG )6-A2#0 JRCPGF   IVMARCPGFAJCPFNGAUKG )6-A2#0 JRCPGF   NDNAJRCPGFANGHVIVMANCDGNAPGY JRCPGFPCNGYQ P1RELC4GUKG647 P1RELC5JTKPM 647   IVMARCPGFARCEM )6-A2#0 JRCPGF NDNAJRCPGFANGHV647 647   9[YQNCPKGHWPMELKIVMARCPGFAIWVVGTAUKG WOQNKYKCWUVCNGPKGQFNGINQUEK  RQOKGF[RCPGNGOCYKFIGVCOKKUVPKGLCE[OKQDQM9CTVQCWYC[E  GPKGYKGNMKQFUVGRY[INCFCGUVGV[EPKGYKPVGTHGLUKGW[VMQYPKMC   IVMARCPGFAJCPFNGAUKG RQYQFWLGWOKGUEGPKGOCNGIQMYCFTCVQYGIQRT[EKUMW  FKGMKMVQTGOWW[VMQYPKMOQGOKGPKETQOKCT[RCPGNW   IVMARCPGFARCEM RQYQFWLGWOKGUEGPKGKPPGIQQDKGMVW  YNGYGLRQKQOGLEGUEKRCPGNWNWDYIQTPGL  RKQPQYGLEGUEKRCPGNWIVMARCPGFARCEM UNW[ RCVTRQPKGL  FQWOKGUECPKCQDKGMVQYYFQNPGLNWDRTCYGLEGUEK Rozdział 4.  Zaawansowane obiekty GTK+ 149  RCPGNWJRCPGFNWDXRCPGF   2CTCOGVT[HWPMELKIVMARCPGFARCEM   RCPGRCPGNFQEGNQY[  EJKNFYKFIGVRQVQOP[WOKGUECP[YNGYGL RTCYGL  NWDIQTPGL FQNPGL EGUEK  TGUKGLGUNKOCYCTVQUE647 QDKGMVRQVQOP[OKGPKTQOKCT[QFRQYKGFPKQ  FQOKCPRTQRQTELKYQMPKGINQYP[O  UJTKPMLGUNKOCYCTVQUE(#.5 RCPGNPKGDGFKGOQINOKGERQYKGTEJPK  OPKGLUGLPKRQYKGTEJPKCQDKGMVWRQVQOPGIQ   XRCPGFIVMAXRCPGFAPGY  IVMARCPGFAIWVVGTAUKG )6-A2#0 XRCPGF   NDNAXRCPGFAVQRIVMANCDGNAPGY XRCPGFIQTC P1RELC4GUKG647 P1RELC5JTKPM (#.5   IVMARCPGFARCEM )6-A2#0 JRCPGF XRCPGF647 (#.5  IVMARCPGFARCEM )6-A2#0 XRCPGF NDNAXRCPGFAVQR647 (#.5  JRCPGFIVMAJRCPGFAPGY  IVMARCPGFAJCPFNGAUKG )6-A2#0 JRCPGF   NDNAJRCPGFANGHVIVMANCDGNAPGY JRCPGFPCNGYQ P1RELC4GUKG(#.5 P1RELC5JTKPM 647   IVMARCPGFARCEM )6-A2#0 XRCPGF JRCPGF(#.5 647  IVMARCPGFARCEM )6-A2#0 JRCPGF NDNAJRCPGFANGHV(#.5 647  XRCPGFIVMAXRCPGFAPGY  IVMARCPGFAIWVVGTAUKG )6-A2#0 XRCPGF   IVMARCPGFAJCPFNGAUKG )6-A2#0 XRCPGF   NDNAXRCPGFAVQRIVMANCDGNAPGY XRCPGFIQTC P4GUKG(#.5 P1RELC5JTKPM(#.5   NDNAXRCPGFADQVVQOIVMANCDGNAPGY XRCPGFFQN  IVMARCPGFARCEM )6-A2#0 JRCPGF XRCPGF(#.5 (#.5  IVMARCPGFARCEM )6-A2#0 XRCPGF NDNAXRCPGFAVQR(#.5 (#.5  IVMARCPGFARCEM )6-A2#0 XRCPGF NDNAXRCPGFADQVVQO(#.5 (#.5  IVMAEQPVCKPGTACFF )6-A 106#+0 4 HTOARCPGF JRCPGF  IVMAYKFIGVAUJQYACNN HTOARCPGF  IVMAOCKP  TGVWTP _ XQKFFGUVTQ[AOCKP ]IVMAOCKPASWKV  _
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: