Форум: "Основная";
Текущий архив: 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.047 c