Results 1 to 7 of 7

Thread: Uitlezen file detail (Album, Artiest, etc)

  1. #1

    Uitlezen file detail (Album, Artiest, etc)

    In de windows explorer kan met de keuze van kolommen informatie worden getoond die (voor muziek) aangeeft van welk album een .mp3 nummer is en welk artiest het nummer uitvoert. Ook meer items kunnen worden weergegeven.
    Ik heb hier wat gevonden, wat lijkt te werken in Delphi. In Lazarus loopt de procedure GetExtFileInfo uit Post #3 vast op de regel
    Code:
    OleFolderItem := OleFolder.ParseName(ExtractFileName(sFileName));
    Hoe kan ik met Lazarus de file details uitlezen?

  2. #2
    Specifiek voor MP3's is er de ID3 tag waarin dat soort informatie vaak te vinden is.
    1+1=b

  3. #3
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,098
    MaartenW: wat tips:

    - pass alleen widestrings naar activex, niet ansistrings. Definieer wat locale variabelen met widestring, en geef die dan door.
    - mogelijk ook nodig om unit activex gebruiken
    - lazarus heeft default properties niet altijd door met activex.
    Last edited by marcov; 16-Mar-20 at 14:34.

  4. #4
    @Goleztrol en @Marcov: Goleztrol heeft me goed aan het werk gezet. Ik ben daar een flink eind mee gekomen.
    Hierdoor ben ik nog niet aan de opmerkingen van Marcov toegekomen.

    Ik beloof het resultaat hier wat later te posten.
    Reeds dank voor de hulp door suggesties!

  5. #5
    Wanneer ik onderstaande code uitvoer als onderdeel van de oorspronkelijke vraag:
    Code:
    { TForm1 }
    uses
      comobj;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Shell : Variant;
      OleFolder : OleVariant;
      OleFolderItem, OleDetail: OleVariant;
      WsFilePath : WideString;
      WsFileName : WideString;
      C, I: Integer;
    
    begin
      Shell := CreateOleObject('Shell.Application');
      WsFilePath := WideString('C:\');
      OleFolder := Shell.Namespace(WsFilePath); //('C:\');
      WsFileName := 'bootTel.dat';
      OleFolderItem := OleFolder.ParseName(WsFileName); //('bootTel.dat');
      C := 288 ;
      for I := -1 to C - 1 do
       begin
        //get file info using index ...
        OleDetail := OleFolder.GetDetailsOf(OleFolderItem, I);
       end;
    end;
    Wordt Shell in alle gevallen IDispatch($langgetal)
    Voor OleFolder krijg ik alleen een niet-nil IDispatch bij een vaste tekst ('C:\'). Wanneer ik de WideString WsFilePath gebruik is het resultaat IDispatch(nil).
    Hetzelfde voor OleFolderItem. Deze laatste wordt alleen zonder AV uitgevoerd wanneer OleFolder niet nil is

    Ik doe waarschijnlijk iets fout, maar wat?

  6. #6
    Zover ik weet moet de parameter van .Namespace een variant zijn !!

    Dit werkt dus beter:
    fpc Code:
    1. var
    2.   Shell : Variant;
    3.   OleFolder : OleVariant;
    4.   OleFolderItem, OleDetail: OleVariant;
    5.   WsFilePath : Variant; // <----- dit veranderen in variant
    6.   WsFileName : Variant; // <----- dit veranderen in variant
    7.   C, I: Integer;
    8. begin
    9.   Shell := CreateOleObject('Shell.Application');
    10.   WsFilePath := 'C:\';          // <----------- geen WideString cast nodig
    11.   OleFolder := Shell.Namespace(WsFilePath);
    12.   WsFileName := 'bootTel.dat';
    13.   OleFolderItem := OleFolder.ParseName(WsFileName);
    14.   C := 288 ;
    15.   for I := -1 to C - 1 do
    16.    begin
    17.     //get file info using index ...
    18.     OleDetail := OleFolder.GetDetailsOf(OleFolderItem, I);
    19.    end;
    20. end;

  7. #7
    Fantastisch! Ik kan weer verder...
    Grote dank!

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •