Toon posts:

[Delphi] Structuur verschil

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik kwam iets (voor mij) nogal wazig tegen:
als je een "form-unit" aan maakt verschilt de basis opbouw van de "normale"-units, dus die zonder form erbij.

dus "form-unit"
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
unit Unit1;

interface         // Defines the external view of this unit

Uses
  Forms, Classes;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject); //Hier de functies/procedures, dus na de uses
  end;

var
  Form1: TForm1;

Implementation 
{$R *.dfm}


en de "normale-unit"
code:
1
2
3
4
5
6
7
8
9
10
11
12
unit Unit1;

interface
function getLyrics(): String;   
function test(): TStringList; //Kan dus niet omdat de classes unit nog niet is "geused"      

Implementation 
Uses
  Classes; //nu pas wordt classes met TStringList  geimporteerd

var
 blaat : TStringList; //Hier nergens last van.


Ik heb dus last van de laatste soort.
Want ik wil namelijk een functie hebben die een TStringList "result", maar dat kan niet omdat de TStringList nog niet is geimported.

Ik heb oa al geprobeert om de volgorde op de "form-unit" manier te zetten, maar de compiler was het niet echt met mij eens.

Is het mogenlijk om eerst uses classes, etc; er neer te zetten en daarna de definities van de functies, zodat ik ook, ander soort types kan gebruiken?

  • vinnie1908
  • Registratie: September 2001
  • Laatst online: 19-08 10:51

vinnie1908

Appel != peer

Nee dat kan niet :) Als je je interface wil laten weten wat er in die unit staat, moet je die ook daar usen...

Wat is het probleem om Classes in je interface te usen?

"Sometimes I have a difficult time handling myself in social situations. I just start scampering around neurotically, frantically jumping all over guests. I think it all goes back to when I was raised in the wild by miniature schnauzers."


  • Paul
  • Registratie: September 2000
  • Laatst online: 19-08 15:39
wat is er mis met
unit Unit1;
interface

Uses Classes;

function getLyrics(): String;
function test(): TStringList;

Implementation
function getLyrics(): String;
begin
//
end;
function test(): TStringList;
begin
//
end;
End.

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 17:59

Knutselsmurf

LED's make things better

Even uit mijn hoofd: Als je een unit X used in je interface van een unit Y, dan is in feite de inhoud van unit X ook beschikbaar als je gebruikers unit Y gebruiken. Alle units die je alleen in je implementation gebruikt, en daar dus ook pas in je uses-statement zet, blijven onzichtbaar voor de gebruikers van je unit Y.

Het kan dus nuttig zijn om alle type-definities die je zelf maakt in een aparte unit te stoppen en die in de interface al te usen en alle procedures/handige functies die je ergens nog bruikt in een andere unit en die pas in je implementation te usen

- This line is intentionally left blank -


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 02:19

Reptile209

- gers -

Oftwel, ter aanvulling op Paul Nieuwkamp, je mag een uses zowel na de interface als na de implementation zetten. Beide uses hebben dan hun eigen scope! Dus een uses na de implementation doet niks in de interface, een uses in de interface geldt voor de hele code (incl. prototypes) die daar na komen. Het makkelijkste is om de uses direct na de interface te zetten.
Als dit je volledig onbekend voorkomt, zou ik je wel wat meer achtergrondkennis over Delphi aanraden. Zie je plaatselijke bieb daarvoor :).

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
unit Unit1;

interface
uses Classes;  //bladiebla

function w00t: boolean;
...

implementation

//evt nog een keertje
uses Woei1; 

// en hier de rest van je code


Owja, als je dus een unit A en B hebt die elkaar nodig hebben, moet je de ene in de interface includen en de ander in de implementation. Of nog beter: eens kijken naar de opbouw van je units, want meestal kan het wel netter.

[ Voor 14% gewijzigd door Reptile209 op 15-06-2003 01:57 ]

Zo scherp als een voetbal!


Verwijderd

Topicstarter
@Iedereen: Hartstikke bedankt, ik zat ff klem er mee, maar nu kan ik weer verder :D
@ Reptile209: Ik heb hier Mastering Delphi 6 zien liggen, is dat iets als extra achtergrond kennis?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Sheddy: sowieso goed, en zoek anders eens op Amazon rond, doe een searchquery op 'Programming Delphi' en sort op 'Avg User Rating'. De boeken die op Amazon 5 sterren scoren zijn over het algemeen goed hun geld waard.

[edit]
Damn krijg Amazon search niet geinlined hier... :'(

[ Voor 255% gewijzigd door curry684 op 15-06-2003 12:02 ]

Professionele website nodig?

Pagina: 1