- •Программирование для Windows
- •Литература
- •Вам необходимо знать и уметь
- •Первая программа
- •Соглашения операционной системы Windows
- •Вызовы функций Windows
- •Идентификаторы, написанные прописными буквами
- •Новые типы данных
- •Описатели
- •Венгерская нотация
- •Точка входа программы
- •Оконная процедура
- •Регистрация класса окна
- •Создание окна
- •Отображение окна
- •Цикл обработки сообщений
- •Оконная процедура
- •Обработка сообщений
- •Воспроизведение звукового файла
- •Сообщение wm_paint
- •Сообщение wm_destroy
- •Сложности программирования для Windows
- •Синхронные и асинхронные сообщения
- •Думайте о пользователе
- •Лекция3. Приступаем с изучению компонент
- •Урок 4. Класс tObjectи его потомки
- •Урок 5. Работа с кнопками
- •Урок 6. Компонент ActionList
- •Урок 7. Работаем с меню (класс tMainMenu)
- •Урок 8. Работаем с контекстным меню (класс tPopupMenu)
- •Урок 9. Компонент Edit
- •Урок 10. Работаем с двумя формами
- •Урок 11. Текст (компоненты tLabel и tStaticText)
- •Урок 12. Компонент ListBox
- •Урок 13. Компонент ComboBox
- •Урок 14. Используем api-функции
- •Урок 15. Разные MessageBox'ы
- •Урок 16. Компонент CheckBox
- •Урок 17. Компонент RadioButton
- •Урок 18. Класс tStrings
- •Урок 19. Класс tStringList
- •Урок 20. Работаем с сетью. Клиент (класс tClientSocket)
- •Урок 21. Работаем с сетью. Сервер (класс tServerSocket)
- •Урок 22. Компонент ImageList
- •Урок 23. Пересчитываем компоненты на форме
- •Урок 24. Форма - добавление методов
- •Урок 25. Форма - добавление полей
- •Урок 27. Значок на панели задач (компонент tTrayIcon)
- •Урок 28. Работаем со сплиттером
- •Урок 29. Компонент Panel
- •Урок 30. Совместное использование сплиттера и Panel'ей
- •Урок 31. Компонент HotKey
- •Урок 32. Компонент StatusBar
- •Урок 33. Установка главной формы приложения
- •Урок 34. Рисование на форме
Урок 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по индексу.Это более подробно мы рассмотрим на следующих уроках.