Gå til innhold

Anbefalte innlegg

Heisan. Jeg holder på med et Delphi program som skoleoppgave. Programmet skal kunne laste inn ID3-tagen fra mp3-filer inn i en TStringGrid, deretter skal jeg kunne forandre på informasjonen for så å skrive den til filen igjen.

Jeg har lykkes med å laste inn ID3 tagen og legge den til i Stringgriden, med mye hjelp fra http://delphi.about.com/od/multimedia/l/aa112800d.htm

ID3-informasjonen blir lastet inn i en egendefinert record, slik:

 

type

TID3Rec = packed record

Tag : array[0..2] of Char;

Title,

Artist,

Comment,

Album : array[0..29] of Char;

Year : array[0..3] of Char;

Genre : Byte;

end;

 

Etter dette er det liten sak å bruke informasjonen. Men hvordan kan jeg effektivt skrive den nye infoen tilbake til en slik TID3Rec? Ettersom Title, Artist, Album, Comment og Year er array's, kan jeg ikke bare skrive "id3.title:=stringgrid1.cells[x,y]". Jeg har prøvd meg med å fylle inn en og en bokstav, slik:

 

for a:=0 to 29 do

id3.title[a]:=Stringgrid1.Cells[x,y][a];

 

Dette fungerte like dårlig. Noen som har noe forslag?

Endret av meuchmeister
Lenke til kommentar
Videoannonse
Annonse

Noe sånt?

 

type
 TID3Rec = packed record
    case integer of
         1: (Album : array[0..29] of Char);
         2: (PCharAlbum : PChar);
 end;

...

var
    Album: String;
    ID3: TID3Rec;
begin
    Album := StgGrid.Cells[1, 1];
    if Length(Album) < High(ID3.Album) then begin
         ID3.PCharAlbum := PChar(Album);
    end else begin
         // error message
    end;
end;

Lenke til kommentar

Det var verdt å prøve, men det har seg nå sånn at hele resten av programmet mitt bygger på hvordan recorden TID3Rec er. Forandrer jeg den så kan jeg like godt skrive alt sammen på nytt. Men om du titter på den linken jeg la ut i første post, så finner du en beskrivelse av et program som leser og skriver id3 tags på samme måte som mitt. Jeg har "stjålet" prosedyren som skal skrive informasjonen tilbake til fila derfra, da jeg ikke kom noen vei med dette. Men som du ser i koden der, har de droppa å skrive akkurat den lille biten jeg har problemer med. Altså biten der jeg må mate inn en ferdig sammensatt TID3Rec, og banen til fila som skal skrives.

Jeg regner derfor med at det skal være mulig å få løst problemet uten å måtte forandre hele TID3Rec.

 

Det finnes vel ingen måte å "fortelle" en array at den bare skal ta de f.eks. 15 første tegna i en string? Uten å pelle ut ett og ett tegn, altså?

 

For dette fungerer faktisk, selv om det ikke hjelper meg stort:

 

id3.Title:='Hei';

Endret av meuchmeister
Lenke til kommentar

Jeg strippet bare bort resten av recorden for å vise konseptet. Det du ser er det som kalles en "structure union" på godt C (++). Det betyr at du har to variabelnavn for samme minneområde. Så resten av programmet trenger ikke å bry seg om at TID3Rec.Album av typen array of char nå også har fått nytt navn og en ny type i tillegg til de gamle: TID3Rec.PCharAlbum av typen PChar.

Endret av tsg1zzn
Lenke til kommentar

Jeg laget noe engang, men finner ikke backup cd for det programmet.

 

Det jeg husker var at jeg endret den til:

type
TID3Rec = packed record
Tag : array[1..3] of Char;
Title,
Artist,
Comment,
Album : array[1..30] of Char;
Year : array[1..4] of Char;
Genre : Byte;
end;

 

Men resten husker jeg dessverre ikke.

Lenke til kommentar

Sorry altså, men det fungerer ytters dårlig med resten av programmet mitt, selv om du sier det ikke skal ha noe å si. Jeg har gjort til punkt og prikke hva du sa, og resultatet når jeg åpner filer da kan du se selv her.

 

Edit: Den øverste fila på lista på bildet er det ikke no å bry seg om. Den er totalt ødelagt etter mine forsøk på å skrive ny ID3-tag!

Endret av meuchmeister
Lenke til kommentar

Fant ut av det. Var bare meg som dumma meg ut. En liten variabel som av en eller annen merkelig grunn nullstiller seg selv. Men jeg har enda et spørsmål. Føler ikke det er nødvendig å starte en ny tråd for dette, ettersom tittelen på denne er såpass dekkende.

 

Når jeg åpner en .txt-fil dobbelklikker jeg på den. notepad.exe blir da startet fordi windows assosierer filtypen med programmet. Det første som skjer etter at notepad.exe starter er at den laster inn filen jeg akkurat klikket på. Hvordan får jeg til dette i Delphi? Om noen skjønner hva jeg mener?

 

Og en annen ting. Når jeg bruker en vanlig savedialog til å lagre en txt fil med programmet mitt, og deretter åpner den i f.eks notepad, blir innholdet i fila vist med en masse andre tegn rundt. Hva er gærnt? Jeg har skrudd av rich text støtten.

Lenke til kommentar
Fant ut av det. Var bare meg som dumma meg ut. En liten variabel som av en eller annen merkelig grunn nullstiller seg selv. Men jeg har enda et spørsmål. Føler ikke det er nødvendig å starte en ny tråd for dette, ettersom tittelen på denne er såpass dekkende.

8203133[/snapback]

 

Akkuratt. Dette burde vi egentlig ha sett. Jeg ser det jaffal i ettertid :blush:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...