Avatar billede dilling-hansen Nybegynder
26. juni 2007 - 14:33 Der er 4 kommentarer og
1 løsning

Iconer pakket i en DLL

Ja som titlen siger, så har jeg en masse iconer som jeg skal bruge til nogen mapper, idennem en desktop.ini fil. men så vil jeg gerne have alle mine iconer pakket sammen i en DLL, ligesom de fleste windows mapper bruger Shell32.dll.
jeg har fundet det her, http://www.gdgsoft.com/gconvert/
det virker sådan set okay, men skal bruge noget der er freeware, eller bare en måde man kan gøre det selv.
håber der er nogen der kan hjælpe :)
Jeg lægger det i den her kategodi, for det første fordi det program jeg laver der skal bruge det her skriver jeg i delphi, og så kunne jeg ikk lige se hvor jeg ellers skulle hen af ;)
Avatar billede hrc Mester
26. juni 2007 - 15:37 #1
Du laver en rc-fil:

  MYICON1          ICON    DISCARDABLE    "MYICON1.ICO"
  MYICON2          ICON    DISCARDABLE    "MYICON2.ICO"
  ...

I en prompt i filens katalog kører du derefter BRCC32 <fil>.rc som genererer en res-fil

I din dll-fil {$R <fil>.res} og oversætter.

Det burde være det.
Avatar billede dilling-hansen Nybegynder
26. juni 2007 - 15:41 #2
øøh.. er ikke helt hardcore til delphi ;) har aldrig brugt dll eller rc filer før :/
Avatar billede hrc Mester
27. juni 2007 - 12:41 #3
Denne disciplin er nu ikke specifik Delphi, nærmere generel Borland (CodeGear). I en teksteditor laver du en rc-fil, eksempelvis ikoner.rc, hvori du angiver ikonerne du vil have med. I kataloget hvor ikoner og rc-filen ligger, åbnes en kommandoprompt hvori du kører Borlands Ressource file Compiler "BRCC32 ikoner.rc". Den laver en ikoner.res-fil som du skal have linket til dit DLL.

I Delphi (afh. version) finder du DLL-Wizzard'en som genererer skallen til en dll:


{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  Classes;

{$R *.res}
{$R IKONER.RES}

begin
end.

Når den oversættes vil den indeholde res-filen.

Næste opgave er et snuppe data fra den og gemme det som et eksternt programs ikon. Du kan enten fiske ikonerne ud, uden at bruge DLL'et som andet end en ikoncontainer, eller du kan bygge logik ind, der eksempelvis returner en/flere ikoner.
Avatar billede dilling-hansen Nybegynder
27. juni 2007 - 14:06 #4
Inden jeg kaster mig ud i det der. Så vil det virke på samme måde som f.eks. Shell32.dll, hvor jeg kan hente iconerne ud gennem en desktop.ini fil
eks:
[.ShellClassInfo]
ConfirmFileOp=0
InfoTip=Audiobooks
IconFile=..\..\Settings\Icons.dll
IconIndex=2

for hvis man ikke kan det, så kan jeg ikke rigtigt bruge det til noget ;)
Avatar billede hrc Mester
28. juni 2007 - 00:14 #5
Vil antage at Explorer kalder dll'et med et funktionskald der returnerer ikonen, sådan som jeg foreslog. Det må du ind på MDSN og søge lidt efter.
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