26. april 2002 - 16:03Der er
37 kommentarer og 1 løsning
Opret egen event?
Jeg har et projekt med to tilhørende 'dimser'..
En Unit1 som indeholder en form som bruges som interface, og Unit2 som indeholder en protokolspecifikation, Server/Client-specifikationer m.m.
Er det muligt at lave sin egen event til Unit2? Dvs. hvis jeg f.eks. har en ServerRead()-Event på Unit2, kan jeg så omforme den, så det der sker i min even på Unit2 omformes som en Event på Unit1, samt der overføres nogle variabler?
Et hurtigt eksempen..
---- Unit2 ---
procedure ServerRead(bla, blabla: TBlabla); var ID, Status: Integer; begin ... ... ... if Status <> StatusX then begin ID := bla bla Status := bla bla { på en eller anden måde køre StatusChange-eventen } end; end;
---- Unit1 ----
procedure ProtocolChangeStatus(ID, Status: Integer); begin ... ... ... end;
----------------------
Således at ProtocolChangeStatus() kørers hver gang at Status ændres...
procedure ServerRead(bla, blabla: TBlabla); var ID, Status: Integer; begin ... ... ... if Status <> StatusX then begin ID := bla bla Status := bla bla AktuelForm.ProtocolChangeStatus(ID, Status); end; end;
[Error] Unit2.pas(11): '=' expected but identifier 'LoginAccept' found [Error] Unit2.pas(11): ';' expected but ':' found [Error] Unit2.pas(11): '=' expected but ';' found
procedure SendServerCmd(UserID, Cmd, Param: String); begin LoginAccept; UDPClient := TIdUDPClient.Create(nil); if HostAddr = '' then begin ShowMessage('No Host'); Exit; end else if pos(':',HostAddr) <= 1 then begin ShowMessage('Invalid Host'); Exit; end else if UserID = '' then begin ShowMessage('Invalid account'); Exit; end; UDPClient.Host := copy(HostAddr,0,pos(':',HostAddr)-1); UDPClient.Port := StrToInt(copy(HostAddr,pos(':',HostAddr)+1,4)); if (Auth = False) and (Cmd <> '1000') then begin ShowMessage('Must be auth at server first'); Exit; end; try UDPClient.Send(copy(UserID,0,7)+copy(Cmd,0,4)+Param); except ShowMessage('Connection Error') end; UDPClient.Destroy; end;
procedure UDPServerUDPRead(Sender: TObject; ABinding: TIdSocketHandle); var ServerQuery: String; Cmd: String; Param: String; begin ServerQuery := UDPServer.ReceiveString(); Cmd := copy(ServerQuery,0,4); Param := copy(ServerQuery,3,Length(ServerQuery)-4); if Cmd = '1000' then begin if Param <> '1' then begin ShowMessage('Login Error'); Exit; end else begin Auth := True; end end end;
procedure LogonToAsio(UserID, Pass: String); begin SendServerCmd(UserID,'1000',Pass); end;
En klasser (class i Delphi) er faktisk noget du bruger hele tiden! Dine knapper er en klasse, tekstfelter er klasser, timeren er en klasse osv.
En klasse er noget der kan indeholde både variabler og procedurere. Din form er også en klasse. Som når du f.eks. skriver: Form1.Edit1.Text := 'Davs'; Så finder vi først Form1. Den har variablen Edit1 som så har property'en Text.
Du skriver f.eks. også Form1.Canvas.LineTo(15, 200); Canvas er så en klasse som oprettes sammen med formen og har ligeledes nogle variabler og procedurere.
TMinKlasse = class(TObject) {Når du skriver TObject kan du arve fra den. Dette behøver du ikke ved TObject, men hvis du f.eks. skal lave en ny TButton, så er det jo smart at skrive TMinNyeKnap = class(TButton)}
private {skriv de variabler/procedurere/funktioner der kun skal være tilgængelige for din klasse}
public {skriv de variabler/procedurere/funktioner der skal være tilgængelige for dem der bruger din klasse som variabel}
Det er sådan set ikke så svært, og du vil få en meget bedre kode ud af det!
Prøv at slå ordet class op i hjælpen, det kunne være det kunne hjælpen! :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.