Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 289

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

Β GtkWidget *vbox;

Β gtk_init(&argc, &argv);

Β window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

Β gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

Β g_signal_connect(GTK_OBJECT(window), "destroy",

Β  GTK_SIGNAL_FUNC(closeApp), NULL);

Β button = gtk_button_new_with_label("Ok");

Β togglebutton = gtk_toggle_button_new_with_label("Toggle");

Β checkbutton = gtk_check_button_new();

Β radiobutton1 = gtk_radio_button_new(NULL);

Β radiobutton2 =

Β  gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(radiobutton1));

Β vbox = gtk_vbox_new(TRUE, 4);

Β add_widget_with_label(GTK_CONTAINER(vbox),Β "ToggleButton:",

Β  togglebutton);

Β add_widget_with_label(GTK_CONTAINER(vbox), "CheckButton:",

Β  checkbutton);

Β add_widget_with_label(GTK_CONTAINER(vbox),Β "Radio 1:", radiobutton1);

Β add_widget_with_label(GTK_CONTAINER(vbox),Β "Radio 2:", radiobutton2);

Β add_widget_with_label(GTK_CONTAINER(vbox), "Button:", button);

Β g_signal_connect(GTK_OBJECT(button), "clicked",

Β  GTK_SIGNAL_FUNC(button_clicked), NULL);

Β gtk_container_add(GTK_CONTAINER(window), vbox);

Β gtk_widget_show_all(window);

Β gtk_main();

Β return 0;

}

На рис. 16.10 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° buttons.c Π² дСйствии с Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ

GtkButton
Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… часто примСняСмых Ρ‚ΠΈΠΏΠΎΠ².

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² Linux - image060.jpg

Рис. 16.10

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΌΡ‹ΡˆΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ OK, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ состояниС Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ½ΠΎΠΏΠΎΠΊ.

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° β€” простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΊΠ½ΠΎΠΏΠΎΠΊ

GtkButton
Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ² β€” ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ состояниС ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ‚ΠΈΠΏΠ°
GtkToggleButton
,
GtkCheckButton
ΠΈ
GtkRadioButton
с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ СдинствСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
gtk_toggle_button_get_active
. Π­Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… прСимущСств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
get_active
для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.

GtkTreeView

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΠΌΡ‹ рассмотрСли нСсколько простых Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² GTK+, Π½ΠΎ Π½Π΅ всС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой однострочныС инструмСнты для Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ отобраТСния. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ограничиваСтся, ΠΈ

GtkTreeView
β€” яркий ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ объСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй.

GtkWidget

Β +----Β GtkContainer

Β Β Β Β Β Β Β  +----Β GtkTreeView

GtkTreeView
β€” Ρ‡Π»Π΅Π½ сСмСйства Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², Π½ΠΎΠ²Ρ‹Ρ… для ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π° GTK+ 2, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΈΠ»ΠΈ списка Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² элСктронной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°
GtkTreeView
ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ слоТныС прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ…, смСшивая тСкст, Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²ΡƒΡŽ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ²
GtkEntry
, ΠΈ Ρ‚.Π΄.

Π‘Π°ΠΌΡ‹ΠΉ быстрый способ испытания

GtkTreeView
β€” запуск прилоТСния gtk-demo, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ поставляСтся вмСстС с GTK+. ДСмонстрационноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ возмоТности всСх Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² GTK+, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ
GtkTreeView
(рис. 16.11).

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² Linux - image061.jpg

Рис. 16.11

БСмСйство

GtkTreeView
составляСтся ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

β–‘Β 

GtkTreeView
β€” ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΈΠ»ΠΈ списка;

β–‘Β 

GtkTreeViewColumn
β€” прСдставлСниС столбца списка ΠΈΠ»ΠΈ Π΄Π΅Ρ€Π΅Π²Π°;

β–‘Β 

GtkCellRenderer
β€” ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΌΠΈ ячСйками;

β–‘Β 

GtkTreeModel
β€” прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²Π° ΠΈ списка.Β 

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅, Π° послСдний β€” МодСль. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ раздСлСния ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡ ΠΈ МодСли (часто называСмая ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ шаблоном МодСль/ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅/ДСйствиС (Model/View/Controller) ΠΈΠ»ΠΈ сокращСнно MVC) Π½Π΅ свойствСнна GTK+, Π½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ удСляСтся всС большС ΠΈ большС внимания Π½Π° всСх этапах программирования.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ достоинство ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ шаблона MVC Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² возмоТности ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ Ρ€Π°Π·Π½Ρ‹Ρ… прСдставлСний Π±Π΅Π· Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΈΡ… дублирования. НапримСр, тСкстовыС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π±Π΅Π· хранСния Π² памяти Π΄Π²ΡƒΡ… ΠΊΠΎΠΏΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Π¨Π°Π±Π»ΠΎΠ½ MVC Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ популярСн Π² Web-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ созданиС Web-сайтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ WAP-обозрСватСлях Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π² Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, просто Π·Π° счСт наличия ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… для Web-обозрСватСля ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ сбора Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, запросов ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.

ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с рассмотрСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° МодСль, прСдставлСнного Π² GTK+ двумя Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ°

GtkTreeStore
содСрТит ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
GtkListStore
ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для простых Π΄Π°Π½Π½Ρ‹Ρ….

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

GtkTreeStore
Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаСтся количСство столбцов, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹ всСх столбцов:

GtkWidget *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_INT,

Β G_TYPE_BOOLEAN);

Π§Ρ‚Π΅Π½ΠΈΠ΅, вставка, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ структур

GtkTreeIter
. Π­Ρ‚ΠΈ структуры ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΡƒΠ·Π»Ρ‹ Π΄Π΅Ρ€Π΅Π²Π° (ΠΈΠ»ΠΈ строки списка) ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ большого объСма, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΈ. Π•ΡΡ‚ΡŒ нСсколько Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² API для получСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄Π΅Ρ€Π΅Π²Π°, Π½ΠΎ ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
gtk_tree_store_append
.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π² модСль Π΄Π΅Ρ€Π΅Π²Π°, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку. Ѐункция

gtk_tree_store_append
заполняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
GtkTreeIter
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт Π½ΠΎΠ²ΡƒΡŽ строку Π² Π΄Π΅Ρ€Π΅Π²Π΅, ΠΊΠ°ΠΊ строку Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня (Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
NULL
Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅), Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½ΡƒΡŽ ΠΈΠ»ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΡŽΡŽ строку (Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ строки):