MySQL Budowanie interfejsow uzytkownika Vademecum profesjonalisty 2

background image

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63

e-mail: helion@helion.pl

PRZYK£ADOWY ROZDZIA£

PRZYK£ADOWY ROZDZIA£

IDZ DO

IDZ DO

ZAMÓW DRUKOWANY KATALOG

ZAMÓW DRUKOWANY KATALOG

KATALOG KSI¥¯EK

KATALOG KSI¥¯EK

TWÓJ KOSZYK

TWÓJ KOSZYK

CENNIK I INFORMACJE

CENNIK I INFORMACJE

ZAMÓW INFORMACJE

O NOWOCIACH

ZAMÓW INFORMACJE

O NOWOCIACH

ZAMÓW CENNIK

ZAMÓW CENNIK

CZYTELNIA

CZYTELNIA

FRAGMENTY KSI¥¯EK ONLINE

FRAGMENTY KSI¥¯EK ONLINE

SPIS TRECI

SPIS TRECI

DODAJ DO KOSZYKA

DODAJ DO KOSZYKA

KATALOG ONLINE

KATALOG ONLINE

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, przenony 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
dowiadczenie 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 wywietlania 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
koniecznoci rekompilacji kodu ród³owego
• Przeledzisz krok po kroku proces powstawania kompletnej aplikacji korzystaj¹cej
z MySQL.

background image

5RKUVTGħEK



Dla kogo przeznaczona jest ta książka? ........................................................................ 12
Układ książki ............................................................................................................. 12
Konwencje przyjęte w książce..................................................................................... 13

!"##! $ %

Dlaczego właśnie MySQL? ......................................................................................... 17
Licencje .................................................................................................................... 18
Porównanie typów danych MySQL

z typami dostępnymi w Access 2000 i SQL Server 7 .................................................. 19

Czego brakuje w MySQL?.......................................................................................... 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?..................................................................... 30
Decyzja dotycząca metody instalacji — wszystkie za i przeciw ...................................... 31
Pliki potrzebne do instalacji RPM................................................................................ 33
Instalacja ................................................................................................................... 34
Pierwsze spotkanie z MySQL: tworzenie, wykorzystywanie i usuwanie bazy danych ....... 38
Niestandardowe, unikatowe konstrukcje SQL wykorzystywane w MySQL

(rozszerzenie standardu ANSI SQL92) ...................................................................... 40

Programy użytkowe w MySQL ................................................................................... 45
Interfejs API języka C dla MySQL .............................................................................. 53

& '()*+ !# ,-. / 0

Dlaczego powinniśmy korzystać z GTK+? ................................................................... 60
Gdzie zdobyć GTK+ i jak dokonać jego instalacji?........................................................ 61
Licencje .................................................................................................................... 61
Ogólny opis biblioteki GTK+...................................................................................... 63
Pojemniki GTK+ jako odpowiedniki kontrolek zmieniających rozmiary.......................... 71
Podstawowe widgety w programie ............................................................................... 73

1 2,+!'()* 0

Widget GtkCombo ..................................................................................................... 95
GtkProgressBar i GtkStatusBar ................................................................................... 99
GtkFrame i GtkAspectFrame..................................................................................... 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

background image

6

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

3 4 5#'()* &%

GtkTable ................................................................................................................. 127
GtkTree i GtkCTree ................................................................................................. 132
GtkFixed ................................................................................................................. 137
GtkLayout ............................................................................................................... 140
GtkScrolledWindow ................................................................................................. 142
GtkNotebook ........................................................................................................... 144
GtkPaned ................................................................................................................ 147

0 '+ !# ,-. / 0

Środowisko Glade .................................................................................................... 151
Pierwsze spotkanie z Glade: aplikacja WitajSwiecie .................................................... 153
Szczegółowa analiza wybranych plików projektu WitajSwiecie.................................... 162
Glade i widgety........................................................................................................ 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

6 7,#

#,,2! 80

Projekt aplikacji ....................................................................................................... 186
Interfejs użytkownika ............................................................................................... 189
Tworzenie bazy danych ............................................................................................ 193
Wdrożenie aplikacji.................................................................................................. 195
Modernizacja aplikacji.............................................................................................. 199

% 9#,5 +!:;< &

Tworzenie interfejsu użytkownika za pomocą Glade ................................................... 202
Funkcje aplikacji ...................................................................................................... 214
Połączenie interfejsu i funkcji wykonujących poszczególne zadania programu............... 248
Kompilacja programu ............................................................................................... 259
Uwagi dotyczące utworzonego programu ................................................................... 259

8 #,,=,# &61

Przedstawienie problemu .......................................................................................... 264
Interfejs użytkownika ............................................................................................... 267
Baza danych, przygotowanie autoryzacji .................................................................... 271
Tworzenie bazy danych ............................................................................................ 273

) #,#,7, &8

Budowanie interfejsu użytkownika za pomocą Glade .................................................. 281
Kontrola wyświetlanych danych ................................................................................ 286
Funkcje tworzonej aplikacji....................................................................................... 289
Powiązanie funkcji „narzędziowych” z obiektami interfejsu użytkownika

— funkcje zwrotne w pliku callbacks.c.................................................................... 318

Uwagi dotyczące utworzonego programu ................................................................... 325

< ,#,, 1&%

Kompilacja z wiersza poleceń.................................................................................... 327
Korzyści płynące z zastosowania Make ...................................................................... 328
Instalowanie aplikacji ............................................................................................... 330
Kompilacja programu dla Win32 za pomocą MS Visual C++ ....................................... 341

background image

Spis treści

7

7,##, 10

Definicja problemu................................................................................................... 351
Interfejs użytkownika ............................................................................................... 352
Baza danych, uprawnienia użytkowników .................................................................. 356
Tworzenie bazy danych ............................................................................................ 357

& ) #,#, 16

Opis problemu ......................................................................................................... 361
Aplikacja sterująca: Raporty...................................................................................... 361
Raport 1. Tabela....................................................................................................... 371
Raport 2. Wykres kołowy ......................................................................................... 377
Raport 3. Wykres liniowo-kolumnowy ....................................................................... 387
Raport 4. Wykres punktowy...................................................................................... 393

1 ), ,#, 31

Kompilacja i dystrybucja w formie pliku RPM ........................................................... 403
Kompilacja programów za pomocą MinGW dla Win32 ............................................... 408

3 >?, "##-@ 3%

Jeszcze raz program „Witaj Swiecie” ......................................................................... 417
Komunikacja pomiędzy oknami................................................................................. 422
Dokonywanie zmian w aplikacji bez konieczności ponownej kompilacji ....................... 430

!

># 7#+'=#,;< 310

interface.c................................................................................................................ 435
sesi.glade................................................................................................................. 460

>#/ 7#+'=#,7, 3

interface.c................................................................................................................ 499
prowizje.glade.......................................................................................................... 516

>#A 7#+'=#, 03%

Pliki dla programu głównego..................................................................................... 547
Pliki dla programu tworzącego raport w formie tabeli .................................................. 551
Pliki dla programu tworzącego wykres kołowy ........................................................... 556
Pliki dla programu tworzącego raport w postaci wykresu liniowo-kolumnowego ........... 559
Pliki dla programu generującego raport w postaci wykresu punktowego........................ 562

# 0%

background image

Rozdział 4.

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:

,

i

,

,

,

,

,

.

Obiekt

działa na zasadzie siatki, w której można umieszczać inne obiekty. Moż-

na powiedzieć, że

jest połączeniem dwóch prostokątnych pojemników (pozio-

mego i pionowego). Na rysunku 4.1 przedstawiono obiekt

, który utworzymy

w przykładowym programie (listing 4.1). W

można umieścić obiekt w kilku

komórkach (poziomo lub pionowo).

Przykładowy program przedstawia działanie obiektu

. 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.

background image

128

Część I

Szybkie wprowadzenie


Uruchomiony
przykładowy program

Prezentacja obiektu GtkTable

!"#

"$"!%""$

$!&"'$!%

$$

'$

($

$'

$)

)'

')

))

$

*!+,

*+,

*"+,

*$$+,

*'$+,

*($+,

*$'+,

*$)+,

*)'+,

*')+,

*))+,

+&*-.,

/

+0&0*,

1"""+#23456#678987,

background image

Rozdział 4.

Zaawansowane obiekty GTK+

129

""+#23456+,&:%!":,

+#26;<8=#+,&

:!:&

#2>34?7@A4=+!,&

4A77,

+,

3%% !"!"!!

>!!+,

%"+,&"%

%+,

+#2#?;78+,&$$&B&$&B&$,

+#2#?;78+,&'$&B&$&$&),

+#2#?;78+,&($&B&(&)&(,

+#2#?;78+,&$'&$&'&B&',

+#2#?;78+,&$)&'&)&B&$,

+#2#?;78+,&)'&$&'&'&),

+#2#?;78+,&))&'&)&'&),

+#2#?;78+,&')&'&(&$&',

$1""+:!"!:,

+#2#?;78+,&$&)&(&B&$,

+#2=64#?348C+,&,

""+,

+,

B

D

*!+,

/E+,

D

*"+6#364>&?=234,

/

+#2#?;78+,&$$&B&$&B&$&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&'$&B&$&$&)&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&($&B&(&)&(&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&$'&$&'&B&'&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&$)&'&)&B&$&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&)'&$&'&'&)&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&))&'&)&'&)&6#364>&6#364>&?=234&

?=234,

background image

130

Część I

Szybkie wprowadzenie

+#2#?;78+,&')&'&(&$&'&6#364>&6#364>&?=234&

?=234,

+#2#?;78+,&$&)&(&B&$&6#364>&6#364>&?=234&

?=234,

D

*+,

/

1"+(&(&#CA8,

! "!%%F!&!&%

$$1""+:! G:,

+#26;<8=#+$$,&

::&

#2>34?7@A4=+$$,&

4A77,

'$1""+:A"H %H@377:,

+#26;<8=#+'$,&

::&

#2>34?7@A4=+'$,&

4A77,

($1""+:! %>IC342:,

+#26;<8=#+($,&

::&

#2>34?7@A4=+($,&

4A77,

$'1""+:!H6 %H8J?45:,

+#26;<8=#+$',&

::&

#2>34?7@A4=+$',&

4A77,

$)1""+:!H6 %H@377HH>IC342:,

+#26;<8=#+$),&

::&

#2>34?7@A4=+$),&

4A77,

)'1""+:!H6 %H>IC342HH8J?45:,

+#26;<8=#+)',&

::&

#2>34?7@A4=+)',&

4A77,

))1""+:!H %H@377HH8J?45:,

+#26;<8=#+)),&

::&

#2>34?7@A4=+)),&

4A77,

')1""+:! %H@377&8J?45>IC342:,

+#26;<8=#+'),&

::&

#2>34?7@A4=+'),&

4A77,

$1""+:!"!:,

D

background image

Rozdział 4.

Zaawansowane obiekty GTK+

131

*$$+,

/

#"!!! "!%"!

! !"!

!"!"

K! &# %

4"!!%&!"!!

"! !" !% !

% !&%"!!!

""%&!!

"!L!

"!+,

+,

"+B&G,

+#2=64#?348C+,&,

""+,

D

*'$+,

/

"!+,

+,

"+#2@377&B,

+#2=64#?348C+,&,

""+,

D

*($+,

/

"!+,

+,

"+#2>IC342&B,

+#2=64#?348C+,&,

""+,

D

*$'+,

/

"!+,

+,

"+#28J?45&B,

+#2=64#?348C+,&,

""+,

D

*$)+,

/

"!+,

+,

"+#2@377M#2>IC342&B,

+#2=64#?348C+,&,

background image

132

Część I

Szybkie wprowadzenie

""+,

D

*)'+,

/

"!+,

+,

"+#2>IC342M#28J?45&B,

+#2=64#?348C+,&,

""+,

D

*))+,

/

"!+,

+,

"+#2@377M#28J?45&B,

+#2=64#?348C+,&,

""+,

D

*')+,

/

"!+,

+,

"+#2>IC342M#2@377M#28J?45&B,

+#2=64#?348C+,&,

""+,

D

Obiekty

i

służą do prezentacji drzewa elementów. Litera „

C” w na-

zwie

oznacza „kolumny” (C pochodzi od angielskiego słowa

Columns); moż-

na powiedzieć, że

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

jest obiektem nadrzędnym dla

,

i

.

po-

chodzi od

, ale podobny związek nie istnieje pomiędzy

i

.


Drzewa elementów,
czyli GtkTree
i GtkCTree

W tym programie porównano cechy i wygląd widgetów

(po lewej stronie okna)

i

(po prawej stronie okna). Główną różnicą pomiędzy tymi obiektami jest fakt,

że

akceptuje tylko mapy pikselowe i tekst, a w

można umieścić dowol-

ne widgety potomne.

background image

Rozdział 4.

Zaawansowane obiekty GTK+

133

GtkTree i GtkCTree

&

'

)

"

*!+,

*!!+,

*!N +,

+&*-.,

/

N&*N&*N

*$$&*$'

"

"&"&N"

'$&'$$

&&N

!!&!N

=#4$

=#4'

=#4)

%" !""=

>!% "!

"& &%"

-'.1/:!%:&:3%:D

$-'.1/:$:&::D

'-'.1/:':&:# "! :D

)-'.1/:"$:&:":D

+0&0*,

1"""+#23456#678987,

""+#23456+,&:%""":,

+#26;<8=#+,&

:!:&

#2>34?7@A4=+!,&

4A77,

N1N"+#CA8&B,

*N1*N"+#CA8&B,

*N1*N"+@?7>8&B,

" !#=#

%+&%!7=7,&

# %"!"!&

background image

134

Część I

Szybkie wprowadzenie

=#O! ! "

1"+,

5"% !!&%"

4""!""%

*$$1""+:$&8$:,

*$'1""+:$&8':,

+#2#C88+,&*$$,

+#2#C88+,&*$',

4" ! % !

P!"%"&!!"

""%%""

""& "% "

4!:""":&!

""

'1"+,

'$1""+:'&8$:,

+#2#C88+',&'$,

+#2#C883#8K+*$',&',

#%" ! "

<!"!! "& "

%&!

""+'$,

)1"+,

'$$1""+:)&8$:,

+#2#C88+),&'$$,

+#2#C883#8K+'$,&),

""+'$$,

"1""+:!:,

+#2#C88+,&",

"1"+,

+#2#C883#8K+",&",

5%!"""

4% ""!!!F

background image

Rozdział 4.

Zaawansowane obiekty GTK+

135

1"+,

"1"+:#%!:,

+#2=64#?348C+,&",

+#2#C88+",&,

""+",

""+,

4 !"" !

1"+,

"1""+:#% !:,

+#2=64#?348C+,&",

+#2#C88+",&,

""+",

""+,

? "!

N1"+,

N"1""+:#% "!:,

+#2=64#?348C+N,&N",

+#2#C88+",&N,

""+N",

""+N,

"%!"=#

1""+'&B&,

$1+#2=#C88+,&4A77&4A77&$&

B&4A77&4A77&4A77&4A77&@?7>8&#CA8,

'1+#2=#C88+,&4A77&4A77&'&

B&4A77&4A77&4A77&4A77&@?7>8&#CA8,

)1+#2=#C88+,&'&4A77&

)&

B&4A77&4A77&4A77&4A77&@?7>8&#CA8,

2%"=#%

!!"!% "&

"!"!!%"""6

!%F

6=#

6"!&4A77""

6":!:4A77

N#" !

"%"

!"

7 !"

N H

H6 "!&"!"&

N !"%"!"!

%&!%"

background image

136

Część I

Szybkie wprowadzenie

#CA8&""" !

+!"" !,

N %&!!"

%"!!

!!1""+:>!:,

+#26;<8=#+!!,&

::&

#2>34?7@A4=+!!,&

4A77,

!N 1""+:>!"%!:,

+#26;<8=#+!N ,&

::&

#2>34?7@A4=+!N ,&

4A77,

N +#2;6J+*N,&&#CA8&#CA8&B,

N +#2;6J+*N,&&#CA8&#CA8&B,

N +#2;6J+*N,&!!&#CA8&@?7>8&B,

N +#2;6J+*N,&!N &#CA8&@?7>8&B,

N +#2;6J+N,&*N&#CA8&#CA8&B,

N +#2;6J+N,&*N&#CA8&#CA8&B,

+#2=64#?348C+,&N,

""+,

+,

B

D

*!+,

/E+,

D

*!!+,

/

!1$

+!11(,

!1$

!QQ

"+!,

/

$F!+#2=#C88+,&

#2=#C887348>4648,

'F!+#2=#C88+,&

#2=#C887348>>6735,

)F!+#2=#C88+,&

#2=#C887348>56##85,

background image

Rozdział 4.

Zaawansowane obiekty GTK+

137

(F!+#2=#C88+,&

#2=#C887348>#?;;85,

F +:# "!"RR:,

D

D

*!N +,

/

N !1$

+N !11(,

N !1$

N !QQ

"+N !,

/

$FN !+#2=#C88+,&

#2=#C888J?458C4648,

'FN !+#2=#C88+,&

#2=#C888J?458C>SA?C8,

)FN !+#2=#C88+,&

#2=#C888J?458C#C3?478,

(FN !+#2=#C88+,&

#2=#C888J?458C=3C=A7?C,

F +:# "!"RR:,

D

D

Obiekt

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

, ze względu na jego

większe możliwości (obiekt zaprezentowano w kolejnej sekcji, „

”).

Program umieszczony w listingu 4.3 jest bardzo prosty. Wykorzystano w nim obiekt

i jeden przycisk, który po każdym kliknięciu zmienia swoją pozycję na po-

wierzchni okna

. Porównajmy

z obiektem

przed podjęciem

decyzji, który z nich lepiej nadaje się do wykorzystania w naszych aplikacjach.

background image

138

Część I

Szybkie wprowadzenie


Obiekt GtkFixed

Prezentacja GtkFixed

;%

"!""!"%"%

" !

"@N

N

N

$

*!+,

*$+,

+&*-.,

/

+0&0*,

N1"""+#23456#678987,

""+#23456+N,&:%@N:,

+#26;<8=#+N,&

:!:&

#2>34?7@A4=+!,&

4A77,

N1N"+,

@N% !"!4!

" " &

"@N?!!&

N & !!

& "@N&!

%"%%!& "%!"!"

#"@N&!!

%" "& "!"

"!%"<" ! !

!@N&" "

"%"!!&! !!"!

< ! %!"

"&@N%!!

"% "

K ""!"!"

background image

Rozdział 4.

Zaawansowane obiekty GTK+

139

"" P!

!" !%$&$! !%$BB&$BB

+"%" ,!!

TB&TB&%!!% !

$TB&TB&"""%&!

"!"!% "

6"%!" "!&!!

"@N6"&

"!"&" "! !

=U@N%"!""&

%!%7!

"!:: "!

"!!+@N7!,

$1""+:!$:,

+#26;<8=#+$,&

::&

#2>34?7@A4=+$,&

4A77,

N +#2@3J85+N,&$&$&$BB,

#"! "!%%

"F"%"+" ,

%"+"

" ,

+#2=64#?348C+N,&N,

""+N,

+,

B

D

*!+,

/E+,

D

*$+,

/

N &!

N 1+,

! 1+,

#%!!""$'BB&

%"% !

/

N 1N O'BB

D"+N 'BB,

background image

140

Część I

Szybkie wprowadzenie

/

! 1! O'BB

D"+! 'BB,

N*+#2@3J85+N,&#2358#+$,&N &! ,

D

ma podobne właściwości, co

, 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

i

(opisane w listingu 4.4). Na rysun-

ku 4.4 przedstawiono wynik działania programu.


Prezentacja działania
GtkLayout

Aby uwidocznić podobieństwa i różnice pomiędzy kontrolkami

i

,

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.

Prezentacja GtkLayout

!

!

$

*!+,

*$+,

+&*-.,

/

+0&0*,

!1"""+#23456#678987,

""+#23456+!,&:%7!:,

+#26;<8=#+!,&

:!:&

#2>34?7@A4=+!,&

4A77,

background image

Rozdział 4.

Zaawansowane obiekty GTK+

141

!1!"+4A77&4A77,

P"!"!"%!"+,&% "

%"!%!+ ! "!,&

!

"%"!!

":N::!:+ ",

# % ! &

"!%& %!

"7!

$1""+:!$:,

+#26;<8=#+$,&

::&

#2>34?7@A4=+$,&

4A77,

! +#27?V6A#+!,&$&$&$BB,

+#2=64#?348C+!,&!,

""+!,

+,

B

D

*!+,

/E+,

D

*$+,

/

N &!

N 1+,

! 1+,

#%!!""$'BB&

%"% !

/

N 1N O'BB

D"+N 'BB,

/

! 1! O'BB

D"+! 'BB,

6%" !@N7!

P!"""%& %

"%& %"O

"<W ! !"

!

background image

142

Część I

Szybkie wprowadzenie

!+#27?V6A#+!,,

!*+#27?V6A#+!,&#2358#+$,&N &! ,

!"+#27?V6A#+!,,

D

Obiekt

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.


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.

Prezentacja GtkScrolledDemo

N

!& !"!

*!+,

* !+,

* !"!+,

background image

Rozdział 4.

Zaawansowane obiekty GTK+

143

+&*-.,

/

+0&0*,

1"""+#23456#678987,

""+#23456+,&:%

"%:,

4!"!& % "!"

!&!%

"?!"!"!" !&

!"!"

" !"!" " "%

+#26;<8=#+,&

:!:&

#2>34?7@A4=+!,&

4A77,

1"""+4A77&4A77,

N1N"+,

!1""+:"!""

!:,

+#26;<8=#+ !,&

::&

#2>34?7@A4=+ !,&

4A77,

!"!1""+:"":,

+#26;<8=#+ !"!,&

::&

#2>34?7@A4=+ !"!,&

4A77,

N +#2@3J85+N,& !&'BB&'BB,

N +#2@3J85+N,& !"!&TB&XT,

"""*" +#2>=C677853456+,&

N,

+#2=64#?348C+,&,

""+,

+,

B

D

*!+,

/E+,

D

* !+,

/

"" !+#2>=C677853456+,&

#2673=V?A#6K?#3=&

#2673=V?A#6K?#3=,

background image

144

Część I

Szybkie wprowadzenie

D

* !"!+,

/

#%!""

"" !+#2>=C677853456+,&

#2673=V?7?V>&

#2673=V?7?V>,

D

Obiekt

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).


Uruchomiony program
prezentujący
działanie
GtkNotebook

Program prezentujący obiekt GtkPaned

N $

*N '

*!+,

*+,

*+,

*+,

* +,

* N+,

*" +,

+&*-.,

/

background image

Rozdział 4.

Zaawansowane obiekty GTK+

145

&

& N

$&'

+0&0*,

1"""+#23456#678987,

""+#23456+,&:%4:,

+#26;<8=#+,&

:!:&

#2>34?7@A4=+!,&

4A77,

1"+,

+#26;<8=#+,&

:"O :&

#2>34?7@A4=+" ,&

4A77,

> ""

N $1N"+,

$1"+:":,

1""+:C%:,

+#26;<8=#+,&

::&

#2>34?7@A4=+,&

4A77,

1""+:#":,

+#26;<8=#+,&

::&

#2>34?7@A4=+,&

4A77,

1""+:C":,

+#26;<8=#+,&

::&

#2>34?7@A4=+,&

4A77,

N +#2@3J85+N $,&&'B&'B,

N +#2@3J85+N $,&&'B&TB,

N +#2@3J85+N $,&&'B&YB,

+#246#8;662+,&N $&$,

>'

*N '1*N"+#CA8&B,

1""+:5%:,

+#26;<8=#+ ,&

::&

#2>34?7@A4=+ ,&

4A77,

background image

146

Część I

Szybkie wprowadzenie

N1""+:!:,

+#26;<8=#+ N,&

::&

#2>34?7@A4=+ N,&

4A77,

N +#2;6J+*N ',& ,

N +#2;6J+*N ',& N,

'1"+:5:,

+#246#8;662+,&*N '&',

2%&"

+#2=64#?348C+,&,

""+,

+,

B

D

*!+,

/E+,

D

*+,

/

1$

+11(,

1$

QQ

"+,

/

$F +#246#8;662+,&#26>#6,

'F +#246#8;662+,&#26>C3I#,

)F +#246#8;662+,&#26>;6##6K,

(F +#246#8;662+,&#26>78@#,

F +:# ! "!"! H:,

D

D

*+,

/

+#246#8;662+,&#CA8,

D

*+,

background image

Rozdział 4.

Zaawansowane obiekty GTK+

147

/

#%&% "%"%

! ! %"&%

+,

+#246#8;662+,&@?7>8,

D

* +,

/

N

N1N"+,

1"+:4"!:,

+#246#8;662+,&N&,

6"

""+,

D

* N+,

/

P"

+:3!ZH:&

+#246#8;662+,,,

D

*" +,

/

+:H:,

D

Dzięki widgetowi

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

! "#

.

background image

148

Część I

Szybkie wprowadzenie


Okno prezentacji
GtkPaned

Prezentacja GtkPaned

*!+,

+&*-.,

/

$

* $

'

* '

* '

$

* $

'

* '

+0&0*,

1"""+#23456#678987,

""+#23456+ ,&:%:,

+#26;<8=#+ ,&

:!:&

#2>34?7@A4=+!,&

4A77,

$1 "+,

+#2?485+ $,&'B,

+#2?485+ $,&'B,

$1"+: $"H6 %C#CA8H6 %>

#CA8:,

$+#2?485+ $,& $&#CA8&#CA8,

!"% +,"

! "%!"!&

" "!!"%!"

+, "%&"" !&

!"!

$+, "%

""%& % "%&

"% '+,!+ %,

""% "%

background image

Rozdział 4.

Zaawansowane obiekty GTK+

149

*

!% +,F

"!

" !&!""%+ "%,

%+%,

%"#CA8& !! "

%""!

%"@?7>8& "

%% "

* $1* "+,

+#2?485+* $,&'B,

* $ 1"+:* $H6 %C#CA8H6 %>

@?7>8:,

'+#2?485+ $,&* $&#CA8&@?7>8,

$+#2?485+* $,&* $ &#CA8&@?7>8,

'1 "+,

+#2?485+ ',&'B,

'1"+: '"H6 %C@?7>8H6 %>

#CA8:,

'+#2?485+* $,& '&@?7>8&#CA8,

$+#2?485+ ',& '&@?7>8&#CA8,

* '1* "+,

+#2?485+* ',&T,

+#2?485+* ',&T,

* ' 1"+:* 'HC@?7>8H6 %>@?7>8:,

* '1"+:* ':,

'+#2?485+ ',&* '&@?7>8&@?7>8,

$+#2?485+* ',&* ' &@?7>8&@?7>8,

'+#2?485+* ',&* '&@?7>8&@?7>8,

+#2=64#?348C+ ,& $,

""+ ,

+,

B

D

*!+,

/E+,

D


Wyszukiwarka

Podobne podstrony:
MySQL Budowanie interfejsow uzytkownika Vademecum profesjonalisty msqlvp
MySQL Budowanie interfejsow uzytkownika Vademecum profesjonalisty msqlvp
MySQL Budowanie interfejsow uzytkownika Vademecum profesjonalisty 3
MySQL Budowanie interfejsow uzytkownika Vademecum profesjonalisty
php i mysql tworzenie stron www vademecum profesjonalisty [helion] CONZDUWNFQFYUVVHCKLSSSQE7VYZR7HO
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie czwarte phmsv4
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie
rozdział tworzenie internetowej?zy?nych z php i mysql tworzenie stron www vademecum profesjonalisty
7e 24p+i+mysql +tworzenie+stron+www+vademecum+profesjonalisty+ 5bhelion 5d JYJZNAZTJGAJTCVIA5GE6WDA
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie 2
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie phmsv3
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie

więcej podobnych podstron