2010-02-19 6 views
4

je veux incorporer un fichier (n'importe quel type de type) à mon application exe et être capable d'extraire dans la télécommande pour l'utiliser, je sais comment faites-le par embarqué dans la ressource, mais je ne veux pas placer les fichiers dans le répertoire de l'application, je veux stocker tous les fichiers (comme .rec) dans mon exe, dans C# il est possible de stocker comme fichier texte, puis lire Par FileStream mais en Delphi, les fichiers de ressources sont séparés du fichier exe. est-il une solution pour faire cela? Merci beaucoup!fichier intégré dans l'application delphi exe (pas comme un fichier séparé de l'application)

+4

Vous avez mal compris quelque chose. En Delphi, comme dans tous les environnements de développement, les ressources sont séparées * lors du développement *. Après avoir compilé et lié votre programme, les ressources sont * dans * le fichier EXE. Vous pouvez faire la même chose en C#, bien que vous n'utilisiez pas un FileStream pour le lire parce que vous ne voudriez pas lire votre fichier EXE entier juste pour obtenir votre fichier incorporé. –

+0

Sachez également que vous pouvez avoir besoin de privilèges d'administration sur la machine cible si vous souhaitez exécuter cet exécutable après l'avoir extrait sous Vista/Win7. – skamradt

Répondre

16

Vous devez créer un fichier .rc et l'ajouter à votre projet. Le contenu du fichier RC est comme:

FIXED48     IMAGE   ..\Resources\Fixed48x48.png 
MENU16     IMAGE   ..\Resources\Menu16x16.png 
TICK   SOUND  ..\Resources\Tick.wav 
PING   SOUND  ..\Resources\Ping.wav 

Maintenant, une fois que vous faites construire, vous pouvez charger une de ces fikles utilisant un TResourceStream:

procedure TdmReportGeneral.InsertLogo(Memo: TStringList; View: TfrView); 
var 
    S: TResourceStream; 
begin 
    if (View is TfrPictureView) and (View.Name = 'Logo') then begin 
     S := TResourceStream.Create(0, 'FIXED48', 'IMAGE'); 
     try 
      // do something useful... TfrPictureView(View).Picture.MetaFile.LoadFromStream(S); 
     finally 
      S.Free(); 
     end; 
    end; 
end; 
2

Vous devriez être en mesure d'obtenir le compilateur Delphi liez votre ressource à votre EXE en l'ajoutant en tant que pragma {$ R myresource.res} dans une unité de votre projet. Vous pouvez ensuite obtenir un handle via un appel à FindResource lorsque vous avez besoin de le lire.

Cette article vous guide tout au long des étapes appropriées.

+0

ma question est-ce que comment ajouter le fichier rec dans le projet (je ne veux pas faire un lien à partir d'un répertoire) je veux que mon exe publié juste être un fichier .exe, sans aucune dépendance – sam

+0

thx à tous (Jim McKeeth) oui, il sera importé – sam

1

DelphiDabbler a a great article sur ce même sujet. Ils incluent même 2 exemples de projets à télécharger qui montrent comment intégrer un fichier en tant que ressource et comment le lire.

Vous pouvez télécharger un worked example que montre ce que nous avons décrit ici - il utilise le code ci-dessus. Le fichier zip contient une paire de projets. Le premier est un programme qui incorpore un fichier texte riche fourni dans un fichier de ressources. Le deuxième programme inclut le fichier de ressource et affiche le texte enrichi dans un composant d'édition riche comme ci-dessus.

Questions connexes