Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача данных из одной программы в другую [D5, D6, NT4, Win2k]


Akni ©   (2002-05-26 14:39:00) 

Уважаемые Мастера! Помогите, пожалуйста, как реализовать след. задачу: есть две программы на Delphi, установленные на разных комп. в локальной сети. Как сделать так, чтобы текст, набираемый в одной из этих программ в Edit"е, автоматически передавался другой программе?


Akni   (2002-05-28 23:26:00) [1]

Kettle of delphi - Спасибо


Kettle of delphi   (2002-05-27 02:58:00) [2]

А если по-нормальному сделать, то вот минимальный пример, который я написал для тебя, Akni:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, NMUDP;

type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
NMUDP1: TNMUDP;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
NMUDP1.LocalPort := 1234; {порт локального компьютера}
NMUDP1.RemoteHost := "192.168.1.2"; {IP получателя}
NMUDP1.RemotePort := 1234; {порт удаленного приемника}
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var i: Integer; TempString: String; OutData: array [0..9999] of Char;
begin
if (Key = #13) and (Edit1.Text <> "") then begin
TempString := Edit1.Text + #0;
Edit1.Clear; {очищаем поле ввода}
for i := 0 to length(TempString) do OutData[i] := TempString[i+1];
NMUDP1.SendBuffer(OutData, length(TempString)); {текст послания}
end;
end;

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String);
var i: Integer; TempString: String; InData: array [0..9999] of Char;
begin
NMUDP1.ReadBuffer(InData, NumberBytes);
for i := 0 to NumberBytes do TempString := TempString + InData[i];
Memo1.Lines.Add(TempString);
end;

end.


Здесь используется компонент TNMUDP, который не требует отдельного сервера. При передаче или приеме используется конструкция из массива типа Char и числа, указывающего количество букв в этом массиве (т.е. его длину). Поэтому, перед передачей, имеется код преобразования строки в массив символов:
for i := 0 to length(TempString) do OutData[i] := TempString[i+1];
Обратно, при приеме, имеется код преобразования принятого массива типа Char в строку:
for i := 0 to NumberBytes do TempString := TempString + InData[i];


Song   (2002-05-26 23:14:00) [3]

Передавайте по сокету код каждого нажатого символа, после принятия его сервером прибавляйте к Edit"у: With Edit1 Do Text:=Text+Chr(код);

Как запрограммировать обмен данными по сокетам, смотрите статьи на этом сайте.


Akni   (2002-05-26 20:37:00) [4]

Спасибо, а поподробнее? Никогда раньше для сетей не писала


Ghost.   (2002-05-26 15:01:00) [5]

Поставь посылку на событие ченж..


Наверх

Титульная страница Поиск, карта сайта Написать письмо