Komunikator z KŚ-E 06/2004 błąd

0

Niestety ja muszę teraz napisać ten temat:
wyskakuje mi błąd:

[Error] Unit1.pas(15): Undeclared identifier: 'TPackage'

wiem, wiem nie zadeklarowałem typu, tylko że błąd wyświetla się właśnie na deklaracji!
Źrudło programu:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  StdCtrls;

type
  TClientOnReceive = class(TThread)

private

ActiveP: TPackage;[tu się wyświetla błąd]

procedure Action;

protected

procedure Execute;

override;


end;
  TForm1 = class(TForm)
    wiadomosci: TMemo;
    dowyslania: TMemo;
    IP: TEdit;
    port: TEdit;
    nick: TEdit;
    polacz: TButton;
    IdTCPClient1: TIdTCPClient;
    procedure polaczClick(Sender: TObject);
    procedure dowyslaniaKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TClientOnReceive.Action;

begin

glowna.wiadomosci.Lines.Add ('[' + ActiveP.UserNick + ']: ' + ActiveP.Txt);

end;

procedure TClientOnReceive.Execute;

begin

while not Terminated do

begin

if not glowna.IdTCPClient1.Connected then

Terminate

else

try

glowna.IdTCPClient1.ReadBuffer(ActiveP, SizeOf (ActiveP));

Synchronize(Action);

except

end;

end;

end;

procedure TForm1.polaczClick(Sender: TObject);
begin
try

IdTCPClient1.Host := ip.Text;

IdTCPClient1.Port:= StrToInt(port.Text);

IdTCPClient1.Connect(10000);


ClientRecive := TClientOnReceive.Create(True);

ClientRecive.FreeOnTerminate:=True;

ClientRecive.Resume;


except

on E: Exception do MessageDlg ('polaczenie niemozliwe: '+#13+E.Message, mtError, [mbOk], 0);

end;
end;

procedure TForm1.dowyslaniaKeyPress(Sender: TObject; var Key: Char);
var

SendPackage:TPackage;

begin

if (key = #13) then

begin

wyslij.BevelOuter:=bvRaised;

SendPackage.UserNick := nick.Text;

SendPackage.Txt := dowyslania.Text;


IdTCPClient1.WriteBuffer (SendPackage, SizeOf (SendPackage), true);

dowyslania.text:='';

end;

end;

end.

proszę o pomoc, a nie o komentarze :(

0

komentarz musi byc bo nie ma czegos takiego jak "Źrudło". Jest tylko "źródło".
a co do pytania to sam sobie odpowiedziales: jesli nie zadeklarowales typu TPackage to skad kompilator ma wiedziec co to znaczy?

0
  1. rób wcięcia
  2. a gdzie jest deklaracja tego TPackage? jeśli w jakimś unicie, to musisz go dodać do sekcji uses.
0

Hę? to co ja mam wpisać w usues bo już nie wiem

0

a można dokładniej i kroczek po kroczku?

0

Użyłem google i znalazłem art na temat komunikatora w Delphi. Tyle że gdybyś go przeczytał zamiast kopiować bezmyślnie kawałek kodu to znalazłbyś tam np.

TPackage = record
UserNick,
Txt : string[255];
end;
0

Że niby co ?
A skąd mamy wiedzieć, co to do jasnego Windows'a jest TPackage ?

0

dobra. jedno zrobione teraz następne:

[Error] Klient.pas(70): Undeclared identifier: 'ClientRecive'

;]

0

Hmmm... Możliwe bo raczej to zrobiłem już na początku(jakbyś nie zauważył jest już to w kodzie programu):
[quote]
Teraz przystąpimy do napisania funkcji, która będzie obsługiwać zdarzenie przesyłu danych do klienta - ClientReceive. A to co jest pod spodem wpisujemy tuż po słowie type znajdującym się na początku kodu naszego programu:

TClientOnReceive = class(TThread)
private
ActiveP: TPackage;
procedure Action;
protected
procedure Execute;
override;

end;
[/quote]
i oh! niemożliwe! wciąż jest ten sam błąd!

1

Zacznij od podstaw, a nie od pisania komunikatorów! Tam masz mocno niekompletny kod, a tu nikt nie będzie go za ciebie krok po kroku poprawiał.

[Error] Klient.pas(70): Undeclared identifier: 'ClientRecive'

Proste - Kompilator nie ma pojęcia co to ma być ClientReceive

Patrzmy dalej, w kodzie jest ClientRecive := TClientOnReceive.Create(True); więc już wiemy jakiego typu powinno być to ClientReceive

Więc z tego wynika, że przy deklaracji zmiennych zabrakło wpisu

var
   ClientRecive : TClientOnReceive;

Jak poznasz już podstawy, to będziesz wiedział gdzie to wpisać...

0

I o to chodziło! Dziękuję wszystkim zaangażowanym, to już wszystko :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1