Merhaba,
Sizin atama yapmak istediğiniz nesne bir sınıf (class) içinde tanımlı ve siz form içinde tanımlı "pointer procedure" e atama yapmak istiyorsunuz. Bu ikisi türleri farklı olduğu için birbirinin yerine kullanılamaz. Dolayısı ile atama yapmak istediğiniz prosedürü ya TForm içinde tanımlayacaksınız ya da TEntitys içinde tanımlayacaksınız.
Ancak TEntitys tanımlarınızda bir eksiklik var. procedure tanımlarının başına "class" ifadesini eklemeniz gerekiyor. Böylece Delphi bu tanımların "pointer procedure" olmadığını anlayacaktır. Kodunuzu aşağıdaki şekilde değiştirirseniz çalışacaktır.
TEntitys tanımı:
Kod: Tümünü seç
Type
TEntitys = class
private
class procedure prc_SC_OKCWrite(Sender: TObject; Socket: TCustomWinSocket);
public
class procedure prc_Socket_Yazdir(_AForm:TForm; _iId: Integer);
end;
Atama yapılacak private prosedür:
Kod: Tümünü seç
class procedure TEntitys.prc_SC_OKCWrite(Sender: TObject; Socket: TCustomWinSocket);
begin
//
end;
TEntitys public procedure:
Kod: Tümünü seç
class procedure TEntitys.prc_Socket_Yazdir(_AForm:TForm; _iId: Integer);
var
SC_OKC: TClientSocket;
begin
try
SC_OKC := TClientSocket.Create(_AForm);
SC_OKC.ClientType := ctNonBlocking;
SC_OKC.Address := '127.0.0.1';
SC_OKC.Port := 35782;
SC_OKC.OnWrite := prc_SC_OKCWrite;
SC_OKC.Active := True;
SC_OKC.Active := False;
SC_OKC.Free;
SC_OKC := nil;
except
//
end;
end;
Bu noktada bir iki konuda dikkatinizi çekmek isterim.
1- Değişken tanımlama her ne kadar programcının kendi tasarrufunda olsa da programlama dilinin kabul görmüş genel kullanımlarına uymakta her zaman fayda vardır. Aşağıdaki birkaç örnek değişken isimi yerine alternatif önerileri kullanmanız hem okumasını hemde yazmasını kolaylaştıracaktır.
prc_SC_OKCWrite yerine prcScOkcWrite
_AForm yerine Form veya AForm
_iId yerine Iid
2- SC_OKC değişkenini aşağıdaki şekilde kullanmanızda fayda var. Aksi halde örnek kod bir hata oluşması durumunda hafıza kaçağına sebep olacaktır.
Kod: Tümünü seç
SC_OKC := TClientSocket.Create(_AForm);
try
SC_OKC.ClientType := ctNonBlocking;
SC_OKC.Address := '127.0.0.1';
SC_OKC.Port := 35782;
SC_OKC.OnWrite := prc_SC_OKCWrite;
SC_OKC.Active := True;
SC_OKC.Active := False;
finally
FreeAndNil(SC_OKC);
end;
Eğer kullanıcıdan saklamak istediğiniz bir hata varsa bunu sadece ilgili bölümü try..except bloğu içine alarak yapmanız daha iyi olur.