Учись программированию на C++ Builder бесплатно!

Запросить данные сервера по инициативе клиента можно с помощью функции RequestData компонента DdeCIientConv. Эта функция объявлена следующим образом:

char * RequestData(const System::AnsiString Item);

Здесь Item - строка, содержащая имя компонента DdeServerltem на сервере, в котором хранится требуемая информация. Функция RequestData возвращает эту информацию в виде строки с нулевым символом в конце. Чтобы воспользоваться этой функцией можно в обработчике щелчка на кнопке с надписью «Запрос» написать следующий текст:

char Info[256];
if((!DdeClientConv1->SetLink(CBServer->Text, CBTopics->Text)) || ! DdeClientConv1->OpenLink())
ShowMessage("Нет контакта с сервером 1,1 + CBServer->Text + "' по теме '" + CBTopics->Text + "'");
else
{
Info = DdeClientConvl->RequestData("Items" + IntToStr(CBTopics->ItemIndex+1));
Memo1->SetTextBuf(Info);
DdeClientConv1->CloseLink();
}

В начале этого обработчика осуществляется связь методами SetLink и OpenLink с сервером, заданным пользователем в списке CBServer по теме, заданной в списке CBTopics. Если связь осуществилась, то в переменную Info типа char заносится информация от компонента Items1 или Items2 на сервере в зависимости от выбранной пользователем темы. Затем эта информация методом SetTextBuf заносится в компонент Memo1. Последний оператор методом CloseLink разрывает связь с сервером.

Поскольку функция RequestData заносит информацию в DdeClientConv и в связанный с ним компонент DdeClientltem, то при изменении в результате запроса этой информации она отобразится в окне редактирования Edit1. В действительности достаточно одной из двух альтернатив:

1. Ограничиться процедурой занесения информации в Memo1, и не вводить обработчик события OnChange компонента DdeClientltem.
2. Ввести обработчик события OnChange компонента DdeClientltem, а в процедуре обработки щелчка на кнопке «Запрос» заменить два оператора чтения информации на один:

DdeClientConv1->RequestData("Items" + IntToStr(CBTopics->ItemIndex+1));

Поиск по сайту