Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Opet ja i moje komponente :D

[es] :: Pascal / Delphi / Kylix :: Opet ja i moje komponente :D

[ Pregleda: 2029 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Opet ja i moje komponente :D03.01.2006. u 18:17 - pre 223 meseci
Napravim komponentu, ima 3 buttona i jedan memo..i napravim paket i dodam ga i kad ga stavim na formu, na formi se ne pojavi nista vec mi samo javi gresku 'Control " has no parent window'!!! Na ovaj sam nacin radio i proslu komponentu (koja me isto zezala al je radilo na ovaj nacin, al ova ipak zeza)..bilo bi pozeljno sto brzi odgovor :))


Evo cijeli kod:
Code:

unit PasswdSK;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, Dialogs,
  WinSock,StdCtrls;

type
  TPasswdSK = class(TCustomPanel)
  private
    { Private declarations }

    procedure ServerAktivan(Sender: TObject);
    procedure Spoji(Sender: TObject);
    procedure IPlist(Sender: TObject);
  protected
    { Protected declarations }
  public
    { Public declarations }

    ServerAktivanBtn:TButton;
    SpojiBtn:TButton;
    IPBtn:TButton;
    IPLst:TMemo;

    constructor Create(AOwner:TComponent); override;
    destructor Destroy; override;

  published
    { Published declarations }
    property Align;
    property Anchors;
    property AutoSize;
    property BiDiMode;
    property Color nodefault;
    property Constraints;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property Font;
    property ParentBiDiMode;
    property ParentColor;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property OnClick;
    property OnContextPopup;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDock;
    property OnStartDrag;

  end;


procedure Register;

implementation




procedure TPasswdSK.ServerAktivan(Sender: TObject);
var sock_data:TWSAData;
    sock_error:integer;
    m_socket,AcceptSocket:TSocket;
    ServerService:SockAddr_in;
begin
sock_error:=WSAStartUp(2,sock_data);

if sock_error<>0 then begin
                      MessageDlg('Error 1',mtError,[mbOK],0);
                      WSACleanup;
                      exit;
                      end

                 else begin
                      //ako je dobro
                      m_socket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
                      if m_socket=SOCKET_ERROR then
                             begin
                             MessageDlg('Error 2',mtInformation,[mbOK],0);
                             WSACleanup;
                             exit;
                             end

                                                else
                             begin
                             //ako je dobro
                             ServerService.sin_family:=AF_INET;
                             ServerService.sin_addr.s_addr:=inet_addr('127.0.0.1');
                             ServerService.sin_port:=htons(13);

                             try
                             bind(m_socket,ServerService,SizeOf(ServerService));
                             except begin
                                    MessageDlg('Error 3',mtError,[mbOK],0);
                                    end; end;

                             listen(m_socket,1);
                             AcceptSocket:=SOCKET_ERROR;

                             MessageDlg('Cekam klijenta..',mtInformation,[mbOK],0);

                             while AcceptSocket=SOCKET_ERROR do
                               begin
                               AcceptSocket:=accept(m_socket,nil,nil);
                               end;

                             MessageDlg('Klijent je uspjesno spojen!',mtInformation,[mbOK],0);

                             end;
                      end;

WSACleanup;
end;


procedure TPasswdSK.Spoji(Sender: TObject);
var sock_data:TWSAData;
    sock_error:integer;
    m_socket:TSocket;
    ServerService:SockAddr_in;
begin
sock_error:=WSAStartUp(2,sock_data);

if sock_error<>0 then begin
                      MessageDlg('Error 1',mtError,[mbOK],0);
                      WSACleanup;
                      exit;
                      end

                 else begin
                      //ako je dobro
                      m_socket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
                      if m_socket=SOCKET_ERROR then
                             begin
                             MessageDlg('Error 2',mtInformation,[mbOK],0);
                             WSACleanup;
                             exit;
                             end

                                                else
                             begin
                             //ako je dobro
                             ServerService.sin_family:=AF_INET;
                             ServerService.sin_addr.s_addr:=inet_addr('127.0.0.1');
                             ServerService.sin_port:=htons(13);

                             try
                             Connect(m_socket,ServerService,SizeOf(ServerService));
                             MessageDlg('Uspjesno smo spojeni sa serverom!',mtInformation,[mbOK],0);
                             except begin
                                    MessageDlg('Error 3',mtError,[mbOK],0);
                                    end; end;

                             end;
                      end;


WSACleanup;
end;

function GetIp:TStrings;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: array[0..63] of Char;
  I: Integer;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  Result := TstringList.Create;
  Result.Clear;
  GetHostName(Buffer, SizeOf(Buffer));
  phe := GetHostByName(buffer);
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  I    := 0;
  while pPtr^[I] <> nil do
  begin
    Result.Add(inet_ntoa(pptr^[I]^));
    Inc(I);
  end;
  WSACleanup;
end;


procedure TPasswdSK.IPlist(Sender: TObject);
begin
IPLst.Lines:=GetIp;
end;


constructor TPasswdSK.Create(AOwner:TComponent);
begin
inherited Create(AOwner);

    ServerAktivanBtn:=TButton.Create(self);
    ServerAktivanBtn.Parent:=self;
    with ServerAktivanBtn do
      begin
      Top:=10;
      Left:=10;
      Caption:='ServerAktivan';
      OnClick:=ServerAktivan;
      end;

    SpojiBtn:=TButton.Create(self);
    SpojiBtn.Parent:=self;
    with SpojiBtn do
      begin
      Top:=60;
      Left:=10;
      Caption:='Spoji';
      OnClick:=Spoji;
      end;


    IPBtn:=TButton.Create(self);
    IPBtn.Parent:=self;
    with IPBtn do
      begin
      Top:=110;
      Left:=10;
      Caption:='IP adrese';
      OnClick:=IPList;
      end;

    IPLst:=TMemo.Create(self);
    IPLst.Parent:=self;
    with IPLst do
      begin
      Top:=160;
      Left:=10;
      Clear;
      end;

Height:=300;
Width:=300;


end;


destructor TPasswdSK.Destroy;
begin
inherited Destroy;
end;


procedure Register;
begin
  RegisterComponents('Samples', [TPasswdSK]);
end;

end.




Unaprijed hvala, p0z!!!
 
Odgovor na temu

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.adsl.sezampro.yu.



+1 Profil

icon Re: Opet ja i moje komponente :D03.01.2006. u 20:33 - pre 223 meseci
Nisam siguran koja tacno linija koda pravi problem, ali postavljanje nekih property-ja i pozivanje nekih metoda nekim kontrolama nije moguce kada nemaju "validni" parent.

Na primer, mozda

IPLst.Clear;

podize exception ako IPLst.parent=nil ili IPLst.parent.parent=nil (znaci nema pravog "vidljivog" roditelja)...


Mozes da prebacis sav kod osim kreiranja kontrola u preklopljenu SetParent proceduru.

znaci u konstruktoru ostavis

ServerAktivanBtn:=TButton.Create(self);
ServerAktivanBtn.Parent:=self;

a ostatak property-ja stavi u SetParent

TPasswdSK = class(TCustomPanel)
...
public
...
procedure SetParent(AParent: TWinControl); override;
...
end;

procedure TPasswdSK.SetParent(AParent: TWinControl);
begin
inherited;

with ServerAktivanBtn do
begin
Top:=10;
Left:=10;
Caption:='ServerAktivan';
OnClick:=ServerAktivan;
end;
...
end;


Ako ne uspeva, pokusaj isto ali umesto SetParent probaj sa Loaded procedurom koja biva pozvana kada se komponenta do kraja ucita iz DFM fajla.
 
Odgovor na temu

Passwd

Član broj: 54624
Poruke: 640
*.adsl.net.t-com.hr.



Profil

icon Re: Opet ja i moje komponente :D03.01.2006. u 21:27 - pre 223 meseci
Neda mi se sad palit delphi sav se smrdo, tako da cu sutra probat ovo sto si napisao..al nesto su mi se zamjerile te komponente

poz i thx
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Opet ja i moje komponente :D

[ Pregleda: 2029 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.