| Autor |
Beitrag |
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Fr 10.07.09 09:54
Hi DF!
Ich bin grade bei diesem Bildschirm (Screen). Und jetzt? Wie kann ich jetzt die Resourcen entpacken? Über den Namen Resource_1 kann ich auf jeden Fall nicht auf die Resource zugreifen... Hat das was mit ResourceString zu tun?
Einloggen, um Attachments anzusehen!
_________________ Die Lösung ist nicht siebzehn.
|
|
Mitmischer 1703 
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Sa 11.07.09 18:24
*push*
_________________ Die Lösung ist nicht siebzehn.
|
|
turboPASCAL
      
Beiträge: 193
Erhaltene Danke: 1
Win XP / Vischda
D6 PE / D2005 PE
|
Verfasst: Sa 11.07.09 18:38
Naja, die Infos sind mächtig dürftig und auf dem Bildchen kann man auch nicht besonders viel erkennen.
Für jemanden der nun deine Frage liest, lässt sich schlecht nachvollziehen was du für ein Problem hast.
_________________ Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus...
|
|
Mitmischer 1703 
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Sa 11.07.09 19:03
Ok
Ich habe eine Anwendung (*.exe) über den Resourcen-Manager von RAD 09 in mein Programm gepackt  . Die Resource (steht da zumindest) hat den Namen Resource_1. Wie kann ich jetzt mit dieser Resource arbeiten? Ich habe vor die Datei aus meinem Programm heraus an einen Ort auf meiner Platte zu kopieren  ..
So, ich hoffe, nun war es verständlicher 
_________________ Die Lösung ist nicht siebzehn.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 11.07.09 19:20
In jedem Fall kannst du via TResourceStream darauf zugreifen und diesen mit CopyFrom in einen TFileStream kopieren um den Inhalt als Datei zu speichern.
Ob es eine weitere (neue) Möglichkeit ähnlich wie in Visual Studio im Programm gibt, weiß ich zwar nicht, bezweifle ich aber.
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 11.07.09 19:22
Etwas auf die Schnelle, vielleicht reicht es.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function ExtractRes(ResType, ResName, ResNewName: string): Boolean; var Res: TResourceStream; begin Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType)); try Res.SavetoFile(ResNewName); Result := True; finally Res.Free end; end; |
Das ist eine Funktion aus einem meiner Programme. Ich hab eine HLP-Hilfedatei als Ressource dem Programm beigelegt, damit das Programm nicht aus zwei Dateien besteht.
Ich hab es so entpackt und ausgeführt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure HlpStart; var HLP_FILE: String; begin HLP_FILE := GetTempDir + 'Hilfe.hlp';
if ExtractRes('HLPFILE', 'FILE', HLP_FILE) then ... end; |
Die RC-Datei sah bei mir übrigens so aus:
Quelltext 1:
| FILE HLPFILE Hilfe.hlp |
_________________ Popov
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 11.07.09 19:24
Ach ja, stimmt, SaveToFile gibts da ja auch, schon wieder vergessen.
Das ist natürlich kürzer, auch wenns intern das selbe macht. 
|
|
Mitmischer 1703 
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: So 12.07.09 13:30
Ok, ich probiers mal aus
Edit: Es funzt nicht! Er sagt mir "ressource resource_1 nicht gefunden"
ich mach den Aufruf mit ExtractRes('RCData', 'Resource_1', 'C:\Setup.exe')
Hier meine Resourcendatei:
Resource_1 RCData "Setup.exe"
Icon_1 Icon "..\\LOGOAPP.ICO"
_________________ Die Lösung ist nicht siebzehn.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: So 12.07.09 15:08
Hast Du denn schon mal nach extractres gesucht?
Und könntest Du nicht vielleicht mit dem Tread 35617, oder 997 weiterkommen...
Also ichg finde die beiden recht vielversprechend - auch wenn ich mich mit diesem Thema eigentlich noch gar nicht auseinandergesetzt habe...
Nein, das ist nicht besserwisserisch oder so gemeint!
Ich habe ja auch ab und an mal Phasen, wo ich einfach strickt an einem Problem verzweifel...
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: So 12.07.09 15:52
|
|
Mitmischer 1703 
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: So 12.07.09 15:56
Ne, die Anführungszeichen machen keinen Unterschied. Frage: Ich hab jetzt die .rc Datei mit ($R) eingefügt. War das richtig oder muss ich das mit der .res machen?
_________________ Die Lösung ist nicht siebzehn.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.07.09 15:59
Ja, wenn du nur die unkompilierte Textdatei in die Exe packst, dann kommt da natürlich auch nicht mehr an, da ist deine Setup.exe ja gar nicht in deiner .exe drin...
Eingebunden werden muss die kompilierte Ressource (.res).
|
|
Mitmischer 1703 
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: So 12.07.09 16:07
Sagt mir immer noch, dess er die Resource nicht findet
Ich glaub, ich werds mit den Resourcen nie lernen. Also:
*.rc Datei öffen (bei mir SetupResource.rc)
Reinschreiben:
Irgendwas Typ "Pfad zur Datei"
Einbinden mit {$R SetupResource.res)
Abrufen mit ExtractRes('Typ', 'Irgendwas', 'NeuPfadsHausen');
So. Funzt net.
Kann mal nicht alternativ die res mit Umschalt+F11 hinzufügen?
_________________ Die Lösung ist nicht siebzehn.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.07.09 16:17
Das Problem liegt ganz woanders. Es gibt wohl Probleme mit dem übergebenen String.
Siehe Debugger...
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: So 12.07.09 21:13
| Zitat: | Ich glaub, ich werds mit den Resourcen nie lernen. Also:
*.rc Datei öffen (bei mir SetupResource.rc)
Reinschreiben:
Irgendwas Typ "Pfad zur Datei"
Hier fehlt noch der Satz in dem du schreibst, daß die die RES Datei korrekt erstellt hast!!!
Einbinden mit {$R SetupResource.res)
Abrufen mit ExtractRes('Typ', 'Irgendwas', 'NeuPfadsHausen');
So. Funzt net. |
_________________ Popov
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Mo 13.07.09 08:14
Mitmischer 1703 hat folgendes geschrieben : | Sagt mir immer noch, dess er die Resource nicht findet
... |
Hallo,
bei mir funktioniert Folgendes, nach einigem Experimentieren, die Res-Funktionen sind wohl recht zickig (z.B. Absturz statt Fehler emldung, wenn res nicht vorhanden):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| /**************************************************************************** ProtelText.rc *****************************************************************************/
PROTELOPTIONS RCDATA res\ProtelOptions.txt PROTELCLASSES RCDATA res\ProtelClasses.txt PROTELRULES RCDATA res\ProtelRules.txt
{$R 'res\ProtelText.res' 'res\ProtelText.RC'}
function TCPAProtelFile.PutFileFromResource (ResName : PChar) : boolean; var RStream : TResourceStream; RResult : longint; buffer : string [130]; done : boolean; nch : Char; begin Result := false; buffer := StrPas (ResName); RStream := TResourceStream.Create (HInstance, buffer, RT_RCDATA); if not Assigned (RStream) then exit; Result := true; done := false; buffer := ''; repeat RResult := RStream.Read (nch,1); if RResult = 0 then done := true else |
Gruss Reinhard
|
|
turboPASCAL
      
Beiträge: 193
Erhaltene Danke: 1
Win XP / Vischda
D6 PE / D2005 PE
|
Verfasst: Mo 13.07.09 08:34
| Zitat: | | Res-Funktionen sind wohl recht zickig (z.B. Absturz statt Fehler emldung, wenn res nicht vorhanden) |
Ja, logisch du verwendest ja auch keine try...finally Statements.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function TCPAProtelFile.PutFileFromResource (ResName : PChar) : boolean; var ... begin Result := false; RStream := TResourceStream.Create (HInstance, ResName, RT_RCDATA); try finally RStream.Free; end; end; |
_________________ Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus...
|
|
|