Also ich habe eine resource datei(.res) in der ich die benötigten version habe.
Struktur sieht so aus:

Dann habe ich ein simples interface, das sieht in etwa so aus:

Da soll man dann einfach die Version auswähle könne nund Patch klicken
Dann bekomme ich immer diese Fehlermeldung:

Quellcode sieht so aus:
Code: Alles auswählen
unit umain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TFMain }
TFMain = class(TForm)
bpatch: TButton;
ComboBox1: TComboBox;
procedure bpatchClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Extractjar(rname:String);
private
{ private declarations }
public
{ public declarations }
end;
var
FMain: TFMain;
implementation
{$R *.lfm}
{$R res/minecraftjar.res}
{ TFMain }
procedure TFMain.bpatchClick(Sender: TObject);
begin
if Combobox1.Text = 'Minecraft 1.5_01'
then Extractjar('1501');
if Combobox1.Text = 'Minecraft 1.4'
then Extractjar('1400');
if Combobox1.Text = 'Minecraft 1.3_01'
then Extractjar('1201');
if Combobox1.Text = 'Minecraft 1.2_02'
then Extractjar('1202');
if Combobox1.Text = 'Minecraft 1.1_02'
then Extractjar('1102');
end;
procedure TFMain.FormCreate(Sender: TObject);
begin
ComboBox1.Items.Add('Minecraft 1.5_01');
ComboBox1.Items.Add('Minecraft 1.4');
ComboBox1.Items.Add('Minecraft 1.3_01');
ComboBox1.Items.Add('Minecraft 1.2_02');
ComboBox1.Items.Add('Minecraft 1.1_02');
end;
procedure TFMain.Extractjar(rname:String);
var
S: TResourceStream;
F: TFileStream;
begin
S := TResourceStream.Create(HInstance, rname, 'RT_RCDATA');
F := TFileStream.Create(ExtractFilePath(ParamStr(0)) + rname, fmCreate);
F.CopyFrom(S, S.Size);
F.Free;
S.Free;
end;
end.
Also der Fehler scheint ja offensichtlich zu sein das er die Ressource nicht findet jedoch ist sie ja da wenn ich mit ResourceHacker nachschaue