Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Консольное приложение + события + процедурные типы : бррррррррррр   Найти похожие ветки 

 
Kergma   (2004-08-05 10:45) [0]

Слава Вам о Великие Мастера!!!!
набросал на форму неболшую програмку:
NMUDP + MEMO + бутон.
По бутону отсылались несколько байт. В NMUDP по OnDataReceived эти байты ловились и выбрасывались на MEMO. Все класс!!!
Захотел сделать тоже, но без формы, идея была следующая:

program UDP;
{$APPTYPE CONSOLE}
uses
 SysUtils, NMUDP, Classes;
var
 u:TNMUDP;
 procedure r(Sender: TComponent; NumberBytes: Integer; FromIP: string; Port: integer);
  begin
   write(#07);
  end;
begin
 u.Create(nil);
.....skip...................
 u.OnDataReceived := r; //!!!!!!!!!!!!!!!!!!!!!!!!!
.....skip...................
 u.Destroy;
end.

В указаном месте происходит ошибка : несовместимый тип. (не тот тип сидит перед монитором)
Ткните носом что принцмпиально не так!!!!
Или может неверна сама идея?
Заранее благодарен!!!


 
Sandman25 ©   (2004-08-05 10:46) [1]

var
u:TNMUDP;
u.Create(nil);

Все не так. Объекты обычно создаются иначе.


 
Ega23 ©   (2004-08-05 10:48) [2]

u:=TNMUDP.Create(nil);


 
Kergma   (2004-08-05 10:50) [3]

Что спросил то и получил :)
А как правильно создать объект?


 
Digitman ©   (2004-08-05 10:51) [4]

r должна быть не просто процедурой , а методом класса


 
Kergma   (2004-08-05 10:52) [5]

С созданием понятно. Спасибо!
А что неправильно с собитием?
Как на событие повесить процедуру?


 
begin...end ©   (2004-08-05 10:52) [6]

of object

procedural types + F1


 
begin...end ©   (2004-08-05 10:53) [7]

Ой, извиняюсь, бред написал.


 
Digitman ©   (2004-08-05 10:54) [8]

определи свой класс (любой)
в этом классе определи метод r с прототипом процедуры обработки события OnDataReceived()

создай экз-р этого класса


 
Digitman ©   (2004-08-05 10:58) [9]

program UDP;
{$APPTYPE CONSOLE}
uses
SysUtils, NMUDP, Classes;

type
 TMyClass = class
 procedure r(Sender: TComponent; NumberBytes: Integer; FromIP: string; Port: integer);
 end;

var
u:TNMUDP;
myobj: TMyClass;

begin
u := TNMUDP.Create(nil);
myobj := TMyClass.Create;

.....skip...................

u.OnDataReceived := myobj.r;

.....skip...................

u.Free;
myobj.Free;
end.


 
Kergma   (2004-08-05 11:38) [10]

2Digitman:
"r должна быть не просто процедурой , а методом класса"
помогло. получилось след. :

program UDP;
{$APPTYPE CONSOLE}
uses
 SysUtils, NMUDP, Classes;

type
 Tmy = class
  procedure datarec(Sender: TComponent; NumberBytes: Integer; FromIP: string; Port: integer);
 end;

var
 u : TNMUDP;
 k : Tmy;
 C : Array [1..3] of Char;

 procedure Tmy.datarec(Sender: TComponent; NumberBytes: Integer; FromIP: string; Port: integer);
  begin
   write("test");
  end;

begin
 u := TNMUDP.Create(nil);
 k := Tmy.Create;
 u.OnDataReceived := k.datarec;

 C := "cat";
 u.RemoteHost := "127.0.0.1";
//  u.ReportLevel := Status_Basic;
 u.LocalPort := 6668;
 u.RemotePort := 6668;
 writeln("send: ",C);
 u.SendBuffer(C, 3);

 u.Free;
 k.Free;
end.

Но помогло только с присваиванием :  
u.OnDataReceived := k.datarec;
а на k.datarec управление не попадает


 
имя   (2004-08-05 12:11) [11]

Удалено модератором


 
Digitman ©   (2004-08-05 12:17) [12]

program UDP;
{$APPTYPE CONSOLE}
uses
SysUtils, NMUDP, Classes;

type
Tmy = class
 procedure datarec(Sender: TComponent; NumberBytes: Integer; FromIP: string; Port: integer);
end;

var
Msg: TMsg;
u : TNMUDP;
k : Tmy;
C : Array [1..3] of Char;

procedure Tmy.datarec(Sender: TComponent; NumberBytes: Integer; FromIP: string; Port: integer);
 begin
  write("test");
 end;

begin
u := TNMUDP.Create(nil);
k := Tmy.Create;
u.OnDataReceived := k.datarec;

C := "cat";
u.RemoteHost := "127.0.0.1";
u.LocalPort := 6668;
u.RemotePort := 6668;
u.SendBuffer(C, 3);

while GetMessage(Msg, 0, 0, 0) do
 DispatchMessage(Msg);


u.Free;
k.Free;
end.


 
Kergma   (2004-08-05 12:53) [13]

ммммммммм.....
Я очень извиняюсь за настойчивость,
Msg: TMsg;
в каком это юните?


 
Digitman ©   (2004-08-05 13:01) [14]

Windows


 
Erik1   (2004-08-05 13:26) [15]

И зачем так извращатся? Может лучше взять Indy?


 
TUser ©   (2004-08-05 13:37) [16]

procedure of object.
Можно и обычную процедуру назначить. Вот так
var ni:TNotifyEvent;
begin
ni:=YourProc;
.OnEvent:=@ni;
end;


 
Kergma   (2004-08-05 14:44) [17]

С назначением процедур на события разобрался. Спасибо!!!!!!!!
Но ОНО все равно не работает !!!! :)))
и токо что выяснил причину:
стал отлавливать UDP пакеты которые с моей машины уходят.......
А они никуда не уходят :)))))
То есть прога добросовестно отчитывается о том что пакет ушел....
А сетка об этом не знает...

program UDP;
{$APPTYPE CONSOLE}
uses
 SysUtils, NMUDP, Classes;

type
 Tmy = class
  ud : TNMUDP;
  f  : boolean;
  procedure stat(Sender: TComponent; status: String);
  procedure datarec(Sender: TComponent; NumberBytes: Integer; FromIP: string; Port: integer);
  procedure DS(Sender: TObject);

  constructor Create(var PUd : TNMUDP);
 end;

var
 u : TNMUDP;
 k : Tmy;
 C : Array [1..3] of Char;
 i : integer;
 constructor Tmy.Create(var PUd : TNMUDP);
 begin
  UD := PUd;
  f := false;
 end;
  procedure Tmy.DS(Sender: TObject);
  begin
   writeln("Data Send...");
  end;

 procedure Tmy.stat(Sender: TComponent; status: String);
 begin
  writeln("status - ",status);
 end;

 procedure Tmy.datarec(Sender: TComponent; NumberBytes: Integer; FromIP: string; Port: integer);
 var
 c : array[1..3] of char;
 i : integer;
 begin
   write("test   ");
   f := true;
   ud.ReadBuffer(C,i);
   Write(c);
   f:= false;
  end;

begin
 u := TNMUDP.Create(nil);
 k := Tmy.Create(u);
 u.OnDataReceived := k.datarec;
 u.OnDataSend := k.DS;
 u.OnStatus := k.stat;

 C := "cat";
 u.RemoteHost := "127.0.0.1";
 u.ReportLevel := Status_Debug;
 u.LocalPort := 1030;
 u.RemotePort := 1030;
 writeln("send: ",C);

 repeat
 u.SendBuffer(C, 3);
 c:= "   ";
 u.ReadBuffer(c,i);
 writeln(c,i);

 c:= "cat";
 until i>0;

 u.Free;
 k.Free;
end.

вот такие вот пироги с котятами...


 
Kergma   (2004-08-05 14:48) [18]

2Digitman: Ты ШАМАН!!!!!!!
после замены моего репета на твой вайл все заработало!!!!!!
СЕРДЕЧНО БЛАГОДАРЮ!!!!!!!!!!!


 
Digitman ©   (2004-08-05 15:01) [19]


> Kergma   (05.08.04 14:48) [18]


и все же прислушайся к совету [15]

Инди или не Инди, но NNUDP - выбор, оставляющий желать лучшего



Страницы: 1 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
14-1091186602
WondeRu
2004-07-30 15:23
2004.08.22
Какая часть Вашего дохода уходит на "поддержание"...


14-1091463976
Мазут Береговой
2004-08-02 20:26
2004.08.22
Вот такая музыка у меня вышла.


6-1087901569
NLO
2004-06-22 14:52
2004.08.22
UDP


3-1091015329
MORA
2004-07-28 15:48
2004.08.22
подчинённая таблица


1-1091721922
mouse_web
2004-08-05 20:05
2004.08.22
Как узнать разрешение экрана