Страница: 1 | 2 |
|
Вопрос: Из Делфи в VB
|
Добавлено: 24.03.10 17:26
|
|
Номер ответа: 19 Автор ответа: Jus
ICQ: 398783562
Вопросов: 7 Ответов: 47
|
Профиль | | #19
|
Добавлено: 19.04.10 14:32
|
Вот код бота на делфи
- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, udp, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Memo1: TMemo;
- Edit1: TEdit;
- Edit2: TEdit;
- Button1: TButton;
- procedure FormCreate(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure DatReceived(Sender: TComponent; const Data: String; FromIP: String; Port: Integer);
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
- UDP1: TUDP; // компонент для отправки/приема пакетов
- BActive: boolean = false; // состояние готовности к отправке пакетов клиенту
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- UDP1.Destroy;
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- with UDP1 do
- begin
- UDP1:=TUDP.Create(Form1); // создаем экземпляр класса
- OnDataReceived:=DatReceived; // процедура обработки приходящих сообщений
- LocalPort:=9750; // порт
- Activate; // активируем компонент
- end;
- end;
-
- /////////////////////////////////////////// Функция получения числа из 4-байтовой последовательности
- function ln(s: string): integer;
- var k: cardinal;
- hex: string;
- begin
- hex:=
- for k:=length(s) downto 1 do
- hex:=hex+IntToHex(ord(s[k]),2);
- Result:=StrToInt(
- end;
- ////////////////////////////////////////Функция получения числа из 4-байтовой последовательности}
- function Nm(dec: integer): string;
- var s: string;
- i: byte;
- begin
- Result:=
- s:=inttohex(dec,8);
- for i:=8 downto 1 do
- if i mod 2 <> 0 then
- Result:=Result+chr(StrToInt(
- end;
- ///////////////////////////////////////формирование строки для отправки клиенту
- function SMessage(ch,text: string; f9: boolean = false): string;
-
- begin
- if f9 then Result:=Nm(51) else
- Result:=Nm(50);
- Result:=Result+Nm(Length(ch))+ch+Nm(Length(text))+text;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- UDP1.SendText(SMessage(edit2.text,edit1.Text,true));
- memo1.lines.add(SMessage(edit2.text,edit1.Text,true)); //фиксируем это событие в мемо
- end;
-
- procedure TForm1.DatReceived(Sender: TComponent; const Data: String;
- FromIP: String; Port: Integer);
- var
- LMsg: string;
- p,l: integer; // p - позиция, с которой будем копировать, l - длина
- ut,chan, user, ip: string;
-
- begin
- if not BActive then // когда приходит первый пакет
- begin
- UDP1.RemoteHost:=FromIP; // определяем куда будем отправлять
- UDP1.RemotePort:=Port; // и на какой порт
- BActive:=true; // и больше сюда не заходим
- memo1.lines.add(
- end;
-
-
- if ln(copy(Data,1,4))=5 then // если первое число 5, значит это сообщение в чате
- begin
- memo1.lines.add(
- p:=5; // переходим вперед на 4 байта (32-разрядные числа представлены 4 байтовым кодом)
- l:=ln(copy(Data,p,4)); // узаем длину поля Ника
- p:=p+4; // переходим на начало ника пользователя
- user:=copy(Data,p,l); // узнаем ник
- p:=p+l; // переходим на начало указателя длины поля ip-адреса
- l:=ln(copy(Data,p,4)); // узнаем длину ip
- p:=p+4; // вперед на 4 байта
- ip:=copy(Data,p,l); // узнаем ip
- p:=p+l; // переходим на начало указателя длины названия канала
- l:=ln(copy(Data,p,4)); // длина названия канала
- p:=p+4; // пропускаем число
- chan:=copy(Data,p,l); // узнаем название канала
- p:=p+l; // переходим на начало указателя длины текста сообщения в канале
- l:=ln(copy(Data,p,4)); // узнаем длину текста
- p:=p+4; // переходим к началу текста
- ut:=copy(Data,p,l); // узнаем текст
-
- memo1.lines.add(user+
- if ut=
- begin
- UDP1.SendText(SMessage(chan,
- // в том же канале -
- end; /// если было слово ПРОВЕРКА
- end; /// сообщение в чате
- end; ///DatReceived
- end.
Кто сможет на VB переделать...тут Edit2 - название канала, Edit1 - текст отправляемый, Memo1 - окно чата
У меня ничего невыходит..
Ответить
|
Страница: 1 | 2 |
Поиск по форуму