Autor Beitrag
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Sa 11.07.09 18:24 
*push*

_________________
Die Lösung ist nicht siebzehn.
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: 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... :P
Mitmischer 1703 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: 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 :D ..

So, ich hoffe, nun war es verständlicher ;)

_________________
Die Lösung ist nicht siebzehn.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Sa 11.07.09 19:22 
Etwas auf die Schnelle, vielleicht reicht es.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function ExtractRes(ResType, ResName, ResNewName: string): Boolean;
var
  Res: TResourceStream;
begin
  //Result := False;
  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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure HlpStart;
var
  HLP_FILE: String;
begin
  //GetTempDir ist eine Funktion die den Temp-Pfad zurück gibt
  HLP_FILE := GetTempDir + 'Hilfe.hlp';

  if ExtractRes('HLPFILE', 'FILE', HLP_FILE) then
      ...
end;


Die RC-Datei sah bei mir übrigens so aus:

ausblenden Quelltext
1:
FILE HLPFILE Hilfe.hlp					

_________________
Popov
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 11.07.09 19:24 
Ach ja, stimmt, SaveToFile gibts da ja auch, schon wieder vergessen. :oops:
Das ist natürlich kürzer, auch wenns intern das selbe macht. :D
Mitmischer 1703 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: So 12.07.09 15:52 
user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
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"


Schon mal Setup.exe ohne Anführungszeichen versucht? Ich kann mich mal erinnern mal mit Anführungszeichen Probleme gehabt zu haben. Kann mich an Details aber nicht mehr genau erinnern.

_________________
Popov
Mitmischer 1703 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 12.07.09 16:17 
Das Problem liegt ganz woanders. Es gibt wohl Probleme mit dem übergebenen String. :shock:
Siehe Debugger...
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Mo 13.07.09 08:14 
user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
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):

ausblenden volle Höhe Delphi-Quelltext
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:
{ RC-Datei }
/****************************************************************************
ProtelText.rc
*****************************************************************************/

PROTELOPTIONS  RCDATA  res\ProtelOptions.txt
PROTELCLASSES  RCDATA  res\ProtelClasses.txt
PROTELRULES  RCDATA  res\ProtelRules.txt

{ in dpr }
{$R 'res\ProtelText.res' 'res\ProtelText.RC'}
{%File 'res\ProtelClasses.txt'}
{%File 'res\ProtelOptions.txt'}
{%File 'res\ProtelRules.txt'}

{ ich habe die Files mit ins Projekt aufgenommen, damit sie überwacht werden - sonst passiert bei Änderungen einfach nichts }

{im Programm }
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: 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.

ausblenden 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
    // was auch immer ..
  finally
    RStream.Free;
  end;
end;

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P