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

Вниз

назначение обработчика внутри класса   Найти похожие ветки 

 
Ken   (2004-11-25 12:03) [0]

Уважаемые мастера, хочу всунуть в свой класс Сокет и описать все обработчики внутри класса! При етом необходимо, чтоб сокет снаружы класса вообще не был виден!

Пишу:

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

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Edit1: TEdit;
   Button4: TButton;
   procedure Button4Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

type TMyClass = class
     private
     pOnConnect : procedure;
     ti : integer;
     MySocket : TClientSocket;

     public
     constructor Create;
     destructor Destroy;

end;

var
 Form1: TForm1;
 MyClass : TMyClass;

implementation

{$R *.dfm}

constructor TMyClass.Create;
begin
MySocket := TClientSocket.Create(nil);
MySocket.Host:="127.0.0.1";
MySocket.Port:=1234;
MySocket.OnConnect := pOnConnect;
inherited Create;
end;

destructor TMyClass.Destroy;
begin
MySocket.Close;
inherited Destroy;
end;


Компилятор ругаеться на MySocket.OnConnect := pOnConnect; Ошибка: Несовместим указатель метода и процедура

Вопрос такой:
Как грамотно ето обьявить и в какой части кода описать ету процедуру, чтоб вне класса она вообще небыла видна?


 
TUser ©   (2004-11-25 12:11) [1]

procedure of object


 
Ken   (2004-11-25 12:13) [2]


> TUser

теперь ругаеться на Parametr list differ! Та же самая строка


 
TUser ©   (2004-11-25 12:15) [3]

OnEvent: TNotifyEvent;

TNotifyEvent = procedure (Sender: TObject) of object;


 
Ken   (2004-11-25 12:15) [4]

Вписал pOnConnect : procedure(Sender: TObject;
     Socket: TCustomWinSocket) of object; и заработало.


 
Digitman ©   (2004-11-25 12:16) [5]

TMyClass = class
  private
    procedure DoConnect(Sender: TObject; Socket: TCustomWinSocket);
...
    MySocket : TClientSocket;

  public
    constructor Create;
    destructor Destroy; override;
end;

constructor TMyClass.Create;
begin
// inherited Create; //необязательно для прямого наследника TObject
MySocket := TClientSocket.Create(nil);
MySocket.Host:="127.0.0.1";
MySocket.Port:=1234;
MySocket.OnConnect := DoConnect;
end;


 
Digitman ©   (2004-11-25 12:19) [6]


> Ken   (25.11.04 12:15) [4]
> Вписал pOnConnect : procedure(Sender: TObject;
>      Socket: TCustomWinSocket) of object; и заработало.


не заработало, а компиляция безошибочно прошла
а работать это не будет, потому что у тебя это лишь указатель на метод, но не собственно метод, который еще декларировать и реализовать нужно


 
Ken   (2004-11-25 12:25) [7]


> Digitman

Понял. переписал и заработало уже как надо! Спасибо.

У меня еще такой вопрос:
Как получить 4 байта, содержащие мой ip?


 
Ken   (2004-11-25 12:37) [8]

Мастера, подскажите пожалуйста, как получить 4 байта, содержащие мой ip адресс?


 
Digitman ©   (2004-11-25 12:49) [9]

строковое представление этого адреса ты можешь получить вызовом MySocket.Socket.LocalAddress

далее, чтобы получить те самые "4 байта" из этого стр.представления, чеши макушку сам ... не так уж и сложно ...



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

Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
4-1098134964
Piter
2004-10-19 01:29
2004.12.12
Отлов сообщения о повторном выводе иконки


1-1101379411
denis24
2004-11-25 13:43
2004.12.12
findcomponent на другой форме


3-1100598126
Дмитрий_Д
2004-11-16 12:42
2004.12.12
SQL / Напомните комманду пожалуйста!


14-1100936489
gn
2004-11-20 10:41
2004.12.12
Microsoft категорически отвергает обвинения в пиратстве


14-1101266176
ИМХО
2004-11-24 06:16
2004.12.12
Динамо Киев - Рома Италия 2-0





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский