[ anon68680 @ 30.07.2007. 10:28 ] @
| Dakle potrebna mi je sto manja aplikacija, a da bih to izveo moram pre svega da izbacim Forms unit. Posto ne mogu jednostavno da ga izbacim iz uses clause sklonio sam ceo unit.pas i koristim Project1.dpr fajl za pisanje coda.
Da bi program ostao aktivan i po zavrsetku svih komandi ubacio sam while loop sa GetMessage() i sve to izgleda ovako nekako:
Code:
program Project1;
uses
Windows;
var
clsocket: TClientSocket;
{$R *.res}
begin
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
Napravio sam svoju classu kako bih mogao da definisem svoje event handlere. Potrebni su mi handleri za TClientSocket ili TidIRC (jos razmisljam o ovome, ali i nije mnogo bitno za moj trenutni problem). Sve je to izgledalo ovako:
Code:
program Project1;
uses
Windows,
ScktComp;
type
TClsocket = class(TClientSocket)
procedure onWrite2(Sender: TObject; Socket: TCustomWinSocket);
end;
var
Msg: Tmsg;
clsocket: TClientSocket;
{$R *.res}
procedure TClsocket.onWrite2(Sender: TObject; Socket: TCustomWinSocket);
begin
{wirte stuff... nebitno }
end;
begin
TClsocket.Create(clsocket);
clsocket.OnWrite:=TClsocket.onwrite2; >>>>> ovde se javlja error tipa, Incompatible types TSocketNotifyEvent and procedure
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
Gde sam pogresio? Ne kapiram bas najbolje ovo sa classama.. |
[ NemesisMMX @ 30.07.2007. 11:06 ] @
Mislim da ne treba da nasledjujes svoju klasu iz TClientSocket vac da clentsocket bude filed tvoje klase.
U konstruktoru moras da kreiras instancu i da napravis povezivanje.
Onda napravis instancu svoje klase u kodu aplikacije:
type
TClsocket = class
procedure onWrite2(Sender: TObject; Socket: TCustomWinSocket);
FClient : TClientSocet;
end;
procedure TClsocket.onWrite2(Sender: TObject; Socket: TCustomWinSocket);
begin
{wirte stuff... nebitno }
end;
constructor TClSocket.Create;
begin
CLient := TClientSocket.Create(Application);
Client.OnWrite := onWrite2;
end;
begin
clsocket := TClsocket.Create(aplication);
end;
[ anon68680 @ 31.07.2007. 10:06 ] @
zar ne treba i constructor gore da se definise? A i brljavi mi sa .Create.. valjda zato sto ne koristim nikakve unite.
[ NemesisMMX @ 31.07.2007. 10:19 ] @
Da,
type
TClsocket = class
procedure onWrite2(Sender: TObject; Socket: TCustomWinSocket);
FClient : TClientSocet;
Constructor Create;
end;
zaboravio sam.
Kako ti brljavi sa Create? Jel mozes malo detaljnije da objasnis?
Ja sam stavio da je owner application. Application je definisan u forms unitu tako da ako neces da koristis forms jednostavno umesto application koristi nil.
I nemoj da zaboravis da unistis objekte pri izlasku iz aplikacije.
Takodje mi nije jasno zasto ne koristis unite.
Ne mora svaki unit da ima formu.
Jednostavno izaberes New->Unit.
Izbaci forms iz uses klauzule kad ga vec ne koristis i to je to.
[ staleks @ 31.07.2007. 12:57 ] @
A zbog cega uopste onda pocinjes da pravis projekat kao WinApplication ? Zasto jednostavno ne pravis obicnu Console app. ?
Onda nemas potrebe da izbacujes forme, nego po potrebi dodajes unit-e koji tebi odgovaraju.
Pozdrav
[ anon68680 @ 01.08.2007. 22:30 ] @
.Create brljavi u smislu da kaze: Unknown function ili tako nesto.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.