din Artist er af typen ShortString og Text er sikker af typen TCaption som er lig en String, prøv at finde en func. til at konvertere en string til short string, er ikke sikker på delphi har en, ellers brug Copy();
Mht. dit overordnede problem. Kan du ikke bare typecaste den:
TCD.Artist := string(edtArtist.Text);
Hvis vi antager at du vil føje i enden af filen om den allerede findes så er der er en fejl i din procedure. Når du åbner fmOpenWrite så står Position på nul og det betyder at du overskriver eksisterende data.
Du skal åbne den som du gør, men sæt fs.Seek(soFromEnd) ind bagefter.
procedure TfrmEksempel.FormCreate(Sender: TObject); const FileName = 'cder.dat'; var fs : TFileStream; begin if FileExists(CDfil) then fs := TFileSream.Create(cder.dat, fmOpenWrite) else fs := TFileStream.Create(cder.dat, fmCreate); // Glemte også et semikolon her try fs.Seek(soFromEnd);
Jeg var åbenbart dum nok til at kalde FileName for FileName i steddet for CDfil!!! Men nu får jeg en ny fejl meddelelse: Undeclared Identifier: 'TFileStream'
Jeg vil gerne give point men jeg skal bare lige have løst mit problem. Med at TFileStream skal erklæres. Det siger den på trods af at jeg har skrevet "hrc"'s kode af.
Når der er tale om de "indbyggede" klasser, så er det nemmeste at placere markøren på ordet TFileStream og trykke på F1. Derved kommer hjælpen frem og der kan du se hvilken unit den er defineret i - her er det "Classes" som du skal have føjet til en af de to "uses"-sektioner.
Der er muligt at indsætte uses nedenfor interface- og nedenfor implementation-delen.
unit MyData;
interface
uses Classes, SysUtils;
type TMyDataForm = class(TForm) private public end;
implementation
uses DateUtils, Math;
Hvis du inkluderer den i den øverste uses, så kan du gøre brug af den i TMyForm-klassen. Hvis du sætter den ind efter implementation, så kan du kun definere den lokalt som i eksemplet OnCreate (OnCreate er i øvrigt nok ikke det logiske sted at placere den slags kode.
Når jeg skriver "Gøre brug af den i TMyForm-klassen" så mener jeg at du kan lave en, for klassen, global instans. Se det som en pseudo-global variabel som kun klassen kan se.
type TMyDataForm = class(TForm) private fFileStream ::TFileStream; // standard at sætte et "f" foran private "medlemmer" public end;
Nu får jeg en ny fejlmeddelelse! Håber at du stadigvæk er interesseret i at løse alle mine fejl som nok virker meget simple i dine øjne. Jeg får denne fejl: "Not enough actual parameters" , som refererer til mit "fs.Seek(soFromEnd)". Se forresten lige min kommentar til soFromEnd for er ikke 100% sikker på jeg har forstået det (slog "soFromEnd" op i Delphi Help)
try fs.Seek(soFromEnd) // soFromEnd: Offset skal være mindre eller lig med 0. Da man står ved slutningen af streamen og slut-punktet har værdien 0, må værdien højst være 0 da streamen ikke er større.
fs.Seek(soFromEnd) <- mangler parametre her. I delphi help angives det således: function Seek(Offset: Longint; Origin: Word): Longint; virtual; abstract;
Men jeg ved ikke hvordan jeg skal bruge det korrekt.
fordi en string kan være på 2gb og din string[32] kan kun indeholde 32 chars, så hvis du sætter en shortstring lig med en string, kan det gå grueligt galt
Jo, du kan prøve hrc_public@.. Havde overset at du forsøgte at tildele til en typedefinition.
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.