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???
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
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.