Avatar billede hreiff Nybegynder
22. juli 2003 - 10:52 Der er 6 kommentarer og
2 løsninger

finalization - hvordan?

Jeg har importeret et gammelt projekt fra delphi 1 (til 7), og får en fejlmeddelelse som jeg skal brug lidt hjælp til.

Jeg har en record (som godt nok ser lidt anderledes ud, men i princippet):

type
  tFiltype = record
    i: integer;
    r: real;
    a: array[1..10] of integer;
  end;

og en variabel (under protected)

  tfrmMain = class  ....
    ...
    protected
      Minfil: File of tfiltype;

jeg får fejlen:
Type 'TFilType' needs finalization - not allowed in file type

Hvad gør jeg her ?
Avatar billede borrisholt Novice
22. juli 2003 - 11:17 #1
øøøh ?

Jeg har lige prøvet det her :

type
  TFiltype = record
    i: Integer;
    r: real;
    a: array[1..10] of Integer;
  end;

  TMinHest = class
  protected
    Minfil: file of tfiltype;
  end;


Det virker fint

Jesn B
Avatar billede kustoden Nybegynder
22. juli 2003 - 11:22 #2
Nu skriver du, at recorden ser lidt anerledes ud, og det kan godt være hele humlen.

Hvis du har en String (String ikke String[xx]) så holder den ikke, for records, der bruges til filer skal have en fast defineret længde. En String i Delphi 1 er, som jeg husker det 256 tegn, og i D7 op til 2G afhængig af operativsystem.

Prøv også at flytte erklæringen af a ud af recorden :

type
TMyArray = Array[1..10] of integer
...
...
  TFilType = record
...
...
  a : TMyArray;
...
Avatar billede hreiff Nybegynder
22. juli 2003 - 11:40 #3
Hmmm. Nu har jeg plukket de relevante dele ud i et tomt projekt:
(og får fejlen)


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TCommentData = Record
    Decanter    : String;
    Made_By    : String;
    Line1      : String;
    Line2      : String;
    Line3      : String;
    Line4      : String;
  End;

type
  TBeregningsData = Record
    BackDrive          : Integer;
    BowlSpeed          : Real;
    BowlSpeedNr        : Integer;
    Differential_Speed : Real;
    Conveyor_Torque    : Real;
    Liquid_Radius      : Real;
    Feed_Flow          : Real;
    Feed_Density      : Real;
    MEff              : Real;
  End;

  TFilType = Record
    Decanter          : Integer;
    BeregningsData    : TBeregningsData;
    Comment            : TCommentData;
    FilKode            : Array [1..10] of Integer;
  End;


type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  protected
    DataFil                                    : File of TFilType;   
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
Avatar billede borrisholt Novice
22. juli 2003 - 11:41 #4
NÅÅE der er fordi du bruger en string i din Record. Her er så To muligheder engen brug ShortString, grimt og flylder meget eller brug TReader og TWriter.

Jens B
Avatar billede borrisholt Novice
22. juli 2003 - 11:44 #5
Nu læste jeg lige at du porter fra D1 til D7

En streng i d1 <> en streng i d7 !!!!!
Avatar billede hreiff Nybegynder
22. juli 2003 - 11:49 #6
Ok, det var strengene. Det var jeg ikke lige opmærksom på.
Jens, hvis du giver et svar, deler jeg point.
Avatar billede borrisholt Novice
22. juli 2003 - 11:52 #7
OKI

i D2+ er en D1 streng = ShortString
Avatar billede borrisholt Novice
22. juli 2003 - 11:54 #8
Men sæt dig ind i TReader og TWriter
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester