Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.032 c
1-1091507493
vic
2004-08-03 08:31
2004.08.22
Есть в delphi функция удаления пробелов в строке слева и справа?


1-1092119059
sdw_syscoder
2004-08-10 10:24
2004.08.22
Как разместить надпись или кнопку в правой стороне ToolBar a


14-1091620589
Максим
2004-08-04 15:56
2004.08.22
License error


14-1091605212
Layner
2004-08-04 11:40
2004.08.22
Почему такая дискриминация русского???


1-1091891903
Maxim
2004-08-07 19:18
2004.08.22
GetDir





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский