Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
17
Добавлен:
14.02.2015
Размер:
641.54 Кб
Скачать

Урок 21. Работаем с сетью. Сервер (класс tServerSocket)

Приступаем к написанию сервера. Для этого создайте новый проект, на форме разместрите edit(в нем будут появляется отправленные с клиента данные), кнопку (по ней сервер начнет слушать сеть) и компонентServerSocketс вкладкиInternet:

Начинаем менять свойства. Для кнопки свойство Captionизмените на "Слушать", свойствоTextдляedit'а установите в "" (пустую строку), свойствоPortдля серверного сокета установите в 2000 (как и у клиентского сокета).

После всего наша форма будет выглядеть приблизительно так:

Теперь добавим код для кнопки. Вот он:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

ServerSocket1->Active=true;

}

Тут мы просто включаем наш сокет и он начинает слушать сеть на 2000 порту, ожидая, когда к нему подсоединится клиент.

Осталось добавить коды для сокеты - а именно код, выполняющийся при установке соединения и код, выполняющийся при получении данных от клиента. Для этого переходим в Инспекторе объектов на вкдадку Eventsпри выбранном сокетеServerSocket1 и создаем двойным щелчком заготовки кода дляOnClientConnect(этот код будет выполнятся при подсоединении клиента) иOnClientRead(этот код быдет выполнятся при получении данных от клиента).В заготовках напишите следующий код:

void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,

TCustomWinSocket *Socket)

{

Form1->Caption="Клиент подсоединился";

}

Тут мы просто показываем в заголовке формы, что клиент подсоединится.

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,

TCustomWinSocket *Socket)

{

Edit1->Text=Socket->ReceiveText();

}

А тут мы полученные от клиента данные отправляем в edit.

С написанием сервера все. Теперь испытываем наше творение. Запускаем сервер, нажимаем в нем на кнопку "Слушать". Далее запускаем клиента, нажимаем в нем на кнопку "Подсоединится". В сервере заголовок формы поменяется на "Клиент подсоединился". Теперь в клиенте печатаем что-нибудь в edit'е и нажимаем на кнопку "Отправить".То, что мы отправили, покажется в edit'е на сервере:

Урок 22. Компонент ImageList

Компонент ImageListпредназначен для хранения набора однотипных изображений. Конечно, изображения можно хранить и по отдельности - но в наборе удобнее.ImageListможно рассматривать как массив изображений - в частности, к элементам такого набора вы можете обращаться по индексу.

Компонент ImageListрасположен на вкладкеWin32 Палитры компонентов:

Перенесите его на форму. Сейчас в нашем ImageListизображений нет. Давайте добавим несколько изображений. Для этого сделайте двойной щелчок на расположенном на форме компонентеImageList1. Появится диалоговое окно для работы с изображениями. Естественно, что для добавления изображения используется кнопкаAdd. При нажатии на нее появляется стандартное окно для выбора файла. Выберите какой-нибудьbmp-файл с изображением размера 32 на 16. Естественно, что такой файл надо предварительно создать. В файле должно быть 2 изображения 16 на 16. Нажмите на кнопкуOpen. Так как у нас 2 изображения, то должно появится окно с вопросом, предлагающим разделить нашу картинку на две (на две, так как картинки должны быть квадратные). Отвечаем, естественно, да:

Теперь в нашем диалоговом окне появилось 2 изображения:

Назначение остальных кнопок понятно. Отметим все же, что удалять можно и отдельные изображения из загруженного файла - т. е. фактически из графического файла можно взять только нужные картинки.

Также отметьте себе, что изображения в диалоговом окне можно менять местами (перетаскиванием мышью).

Закройте диалоговое окно. Давайте теперь используем наш ImageList. Добавьте на форму компонентImageс вкладкиAdditionalПалитры компонентов и обычную кнопку. В обработчик для щелчка по кнопке внесите следующий код:

void__fastcallTForm1::Button2Click(TObject*Sender)

{

staticintindex=0;

//Выводим очередное изображение в Image1.

ImageList1->GetBitmap(index, Image1->Picture->Bitmap);

index++; //Берем индекс следующей картинки.

Invalidate(); //Перерисовываем.

}

Теперь если вы запустите программу и будете щелкать на кнопке, то в Image1 будут последовательно появляться изображения изImageList1 - сначала с индексом 0, потом с индексом 1 и т. д. В приведенном фрагменте используется методGetBitmapклассаTImageList. Первым параметром он берет номер картинки изImageList(нумерация идет с нуля), вторым - куда эта картинка пишется. У нас она пишется вImage1.

Вообще говоря довольно-таки много компонентов имеют свойство Images. Это свойство как раз и имеет типImageList. Например, если вы разместите на форме компонентMainMenu, то для этого свойства вы сможете выбрать всеImageList'ы:

Для отдельных же пунктов меню вы можете выбирать изображения из ImageListпо индексу.Это более подробно мы рассмотрим на следующих уроках.