- •Работа с кнопками
- •Компонент Edit
- •2. Событие KeyPress возникает при нажатии алфавитно-
- •Текст (компоненты tLabel и tStaticText)
- •Компонент ListBox
- •Компонент ComboBox
- •Компонент CheckBox
- •Компонент RadioGroup
- •Класс tStringList
- •Компонент ImageList
- •Invalidate(); //Перерисовываем.
- •Создание главного меню
- •Работаем с контекстным меню (tPopupMenu)
- •Значок на панели задач (компонент tTrayIcon)
- •Работаем со сплиттером
- •Компонент Panel
- •Совместное использование сплиттера и Panel
- •Компонент HotKey
- •Компонент StatusBar
- •Назначение формы главной
- •Рисование на форме
- •Компонент ActionList
- •Работаем с двумя формами
- •Используем api-функции
- •Окна сообщений
- •Работаем с сетью. Клиент (класс tClientSocket)
- •Работаем с сетью. Сервер (класс tServerSocket)
- •Пересчитываем компоненты на форме
- •Форма - добавление методов
- •Форма - добавление полей
- •Форма - добавление свойств
Работаем с сетью. Сервер (класс 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();
}
Полученные от клиента данные будут показаны в Edit1.
Теперь испытываем наше творение. Запускаем сервер, нажимаем в нем на кнопку "Слушать". Далее запускаем клиента, нажимаем в нем на кнопку "Подсоединится". В сервере заголовок формы поменяется на "Клиент подсоединился". Теперь в клиенте печатаем что-нибудь в Edit'е и нажимаем на кнопку "Отправить". То, что мы отправили, покажется вEdit'е на сервере:
Пересчитываем компоненты на форме
Это может оказаться полезным для разных задач - например, вы хотите одновременно изменить положение всех элементов формы или просто определить, есть ли среди элементов элемент с определенными свойствами.
Для нашей задачи мы будем использовать свойство Controls формы. Это свойство представляет из себя набор всех дочерних элементов формы - кнопок, Edit'ов,Label'ов и т. п. Каждый элемент этого набора имеет тип TControl (родительский тип для всех элементов).
Вот пример кода, который сдвигает все элементы на форме к левому краю формы:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TControl *child; //Переменная для элемента формы
for(int i = 0; i < Form1->ControlCount; i++)
{
child = Form1->Controls[i]; //Берем очередной элемент
child->Left=10; //Сдвигаем его влево на 10 пиксел
}
}
Как вы видите, мы получаем i-элемент на форме просто указав его индекс.
Нумерация при этом, как и следовало ожидать, идет с нуля. Для получения же общего количества элементов мы используем свойство ControlCount:
... i < Form1->ControlCount; ...