Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2010, 19:54   #1
pa1n
 
Регистрация: 27.04.2010
Сообщений: 7
По умолчанию Код Delphi в C++ Builder

Помогите пожалуйста переделать код в С++. Сам начал, но возникли проблемы с IdUDPServer1.Broadcast и IdUDPServer1.Send. Все перевести конечно много,а может кому-то это и просто, но хотя бы помогите с переводом IdUDPServer1.Broadcast и IdUDPServer1.Send.
Заранее спасибо буду рад любой помощи.

Код:

procedure tform1.add(text:string; color:integer); //процедура для выведения текста в richedit1 определённого цвета
begin
richedit1.SelAttributes.Color:=color; //задать нужный цвет
richedit1.SelStart:=length(richedit1.Text); //в какои месте написать текст
richedit1.SelText:=text; //текст
richedit1.Lines.Add('');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//приложение запустилось...

try
IdUDPServer1.Active:=true; //сделать активным UDP сервер
except
 close; //если произошла какая либо ошибка, то выйти из приложения
end;
myip:=idipwatch1.LocalIP; //узнать какой IP адрес на этом компьютере
add('['+myip+'] вошёл в чат',clgreen); //написать текст в richedit1 зелёным цветом
listbox1.Items.Add(myip); //добавить себя в список юзеров
IdUDPServer1.Broadcast(#0#1,7321); //оповестить всех сообщение о том что я вошёл в чат
timer1.Enabled:=false;
end;

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
a:string;
i:integer;
g:TStringStream;
begin
if abinding.PeerIP=myip then exit; //если это сообщение пришло с моего компьютера, то не обробатвать его дальше

// перевести TStream в String
  g := TStringStream.Create('');
  try
  g.CopyFrom(AData, AData.Size);
  a := g.DataString;
  finally
  g.Free;
  end;

if a=#0#1 then // если юзер вошёл в чат
begin
if pos(abinding.PeerIP,listbox1.Items.Text)=0 then //если его ещё нет в списке юзеров, то добавить его в список
listbox1.Items.Add(abinding.PeerIP); //abinding.PeerIP - узнать его IP адрес
add('['+abinding.PeerIP+'] вошёл в чат',clgreen);
IdUDPServer1.Send(abinding.PeerIP,7321,#0#2); //оповестить нового юзера о том что мы тут уже есть
end;

if a=#0#2 then // если пришло оповещение от юзеров которые уже в чате
begin
listbox1.Items.Add(abinding.PeerIP);
end;

if pos(#0#3,a) = 1 then //если юзер прислал сообщение
begin
delete(a,1,2); //удалить из строки два сивола: #0 и #3
add('<'+abinding.PeerIP+'>: '+a,clblue); //написать сообщение в richedit1 синим цветом
end;

if a=#0#4 then //если юзер вышел из чата
begin
for i := 0 to listbox1.Items.Count-1 do //найти строку в listbox1 на которой записан IP юзера
if listbox1.Items.Strings[i] = abinding.PeerIP then // если это та строка, то
listbox1.Items.Delete(i); // удалить эту строку
add('['+abinding.PeerIP+'] вышел из чата',clgreen);
end;

if pos(#0#5,a) = 1 then //если юзер прислал личное сообщение
begin
delete(a,1,2); //удалить из строки два сивола: #0 и #5
add('Личное сообщение от <'+abinding.PeerIP+'>: '+a,clred); //написать личное сообщение в richedit1 красным цветом
end;

end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var lt : TSYSTEMTIME;
begin
GetLocalTime(lt);
if key=#13 then //если нажали enter
begin

add('('+ IntToStr(lt.wHour) +  ':' + IntToStr(lt.wMinute) +  ':' + IntToStr(lt.wSecond)+')' +'<'+myip+'>: '+memo1.Text,clsilver);
IdUDPServer1.Broadcast(#0#3+memo1.Text,7321); // отправляю всем своё сообщение
memo1.Text:='';
key:=#0; // этот код нужен чтобы при нажатии на enter, приложение не пумкало
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdUDPServer1.Broadcast(#0#4,7321); //оповестить всех о том что я вышел из приложения
end;

procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
ip:string;
begin
if listbox1.ItemIndex=-1 then //если ничего не выделно, то
begin
n1.Caption:='Отправить сообщение для';
n1.Enabled:=false;
exit; //выйти из процедуры
end;
n1.Enabled:=true;
ip:=listbox1.Items.Strings[listbox1.ItemIndex]; //узнать кто сейчас выделен в списке
n1.Caption:='Отправить сообщение для '+ip //изменить название кнопки
end;

procedure TForm1.N1Click(Sender: TObject);
var
ip:string;
begin
//получить IP выделеного юзера из название кнопки
ip:=n1.Caption;
delete(ip,1,24);

s1.Send(ip,7321,#0#5+memo1.Text); //отправить сообщение на определёный IP адрес
add('Личное для <'+ip+'>: '+memo1.Text,clsilver);
memo1.Text:='';
end;

end.
pa1n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Код для Borland C запуститься на Builder? fs444 C++ Builder 1 17.09.2009 16:11
Перенести код из C++ Builder 5 в C++ Builder 2009 Kreadlling C++ Builder 2 13.09.2009 14:00
Помогите в Builder 6 дописать код!!! bee_uk C++ Builder 7 29.05.2009 23:56
Как встроить код на С++ в Builder Diman2008 C++ Builder 10 16.01.2008 14:47
Нужно переделать код с Delphi на C++ Builder POPOV Помощь студентам 2 12.11.2007 22:51