PROBLEM=Jeg har en 2 unit'er kaldet cardclasses og cardfkt. Og denne unit skal bruges under både interface og implementation i en anden unit kaldet gui. Men det kan den jo ikke eller hvad???
Hvis du skriver følgende i den unit som skal bruge den kan du både se den under interface men også implementations delen i Delphi.
Eksempel :
Du har din unit kaldet gui i den skriver du under uses følgende
Uses cardclasses,cardfkt
Men hvis du kun skal bruge dem i nogle funktioner eller procedure i unit GUI, så vil jeg råde dig til at lige dem under implementation for der spare de plads på din stack.
I det tilfælde hvor der er opeationer som du har behov for at benytte gensidigt, altså at du i de 2 unit har en operation som du vil kalde fra Gui og du i GUI har en operation som du vil kalde fra de 2 andre - så vil det være en fordel at ekspotere disse til en 4 unit.
{ her kan du placere globale erklæringer af f.eks. pile } var p1,p2: TPile;
procedure TFrmBord.EraseRect(HFillrect,VFillRect: TRect); begin Canvas.brush.Color:=Color; Canvas.FillRect(HFillRect); Canvas.FillRect(VFillRect); end;
procedure TFrmBord.DrawEmptyPile(aType: integer;x1,y1: integer); const d=5; var i: integer; begin case aType of 1: _BackDraw(Canvas,x1,y1,14); 2: _BackDraw(Canvas,x1,y1,13); else Canvas.Pen.Color:=clLime; for i:=0 to 1 do Canvas.RoundRect(x1+i,y1+i,x1+CardWidth-i,y1+CardHeight-i,d,d); end end;
procedure TFrmBord.CardDrawInverted(x,y,CardNr: integer); begin _CardDrawInverted(FrmBord.Canvas,x,y,CardNr); end;
procedure TFrmBord.CardDraw(x,y,CardNr: integer); begin _CardDraw(FrmBord.Canvas,x,y,CardNr); end;
procedure TFrmBord.BackDraw(x,y,BackNr: integer); begin _BackDraw(FrmBord.Canvas,x,y,BackNr); end;
procedure TFrmBord.FormPaint(Sender: TObject); begin CTable.Refresh; end;
procedure TFrmBord.Afslut2Click(Sender: TObject); begin close end;
procedure TFrmBord.FormClose(Sender: TObject; var Action: TCloseAction); begin CTable.Clear; end;
procedure NewGame; { Kaldes ved start af nyt spil; skriv evt. initialiseringer ved start af nyt spil; HUSK først at kalde free for alle skabte objekter fra evt. tidligere spil } begin p1 := TPile.Create(20, 20, 0, 0); CTable.addPile(p1); p1.make52; p2 := TPile.Create(100, 50, 0, 20); CTable.addPile(p2); end;
procedure ProgInit; { Kaldes ved programstart; skriv evt. initialiseringer ved programstart i denne procedure } begin ShowMessage('hejhej') end;
procedure MouseDown(Pile: TPile; Card: TCard); { kaldes ved MouseDown i bunken Pile på kortet Card; skriv kode der skal udføres ved MouseDown } var c: TCard; begin if Pile=p1 then begin showmessage('Jeg blev kørt!!'); end; end;
procedure MouseUp(Pile: TPile; Card: TCard); { kaldes ved MouseUp i bunken Pile på kortet Card; skriv kode der skal udføres ved MouseUp } var c: TCard; begin end;
procedure TFrmBord.FormCreate(Sender: TObject); begin ProgInit; end;
procedure TFrmBord.Afslut1Click(Sender: TObject); begin NewGame; end;
procedure TFrmBord.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var p: TPile; c: TCard; begin CTable.GetPileCardAt(x,y,p,c); if p<>nil then gui.MouseDown(p,c); end;
procedure TFrmBord.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var p: TPile; c: TCard; begin CTable.GetPileCardAt(x,y,p,c); if p<>nil then gui.MouseUp(p,c); end;
det er min mousedown der ikke virker jeg troede det var usses:
procedure TFrmBord.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var p: TPile; c: TCard; begin CTable.GetPileCardAt(x,y,p,c); if p<>nil then gui.MouseDown(p,c); end;
procedure MouseDown(Pile: TPile; Card: TCard); { kaldes ved MouseDown i bunken Pile på kortet Card; skriv kode der skal udføres ved MouseDown } var c: TCard; begin if Pile=p1 then begin showmessage('Jeg blev kørt!!'); end; end;
Man kan godt bruge . når man kalder procedure fra en unit, det betyder at man ikke behøver use den aktuele unit, da man med . fortæller hvilken unit man vil ha' : "system.delete" referer altså til delete proceduren i system unit'en
/Martin
Synes godt om
Ny brugerNybegynder
Din løsning...
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.