AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language FreePascal eingebunde Resourcen abfragen (RCDATA)
Thema durchsuchen
Ansicht
Themen-Optionen

eingebunde Resourcen abfragen (RCDATA)

Ein Thema von thomasschaf · begonnen am 15. Mär 2012 · letzter Beitrag vom 19. Mär 2012
Antwort Antwort
thomasschaf
(Gast)

n/a Beiträge
 
#1

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 16. Mär 2012, 20:15
Könnte bitte jemand den Code mit Delphi kompilieren, mir die exe zukommen lassen (z.B. per Anhang hier im Forum).

Dann könnte ich überprüfen, ob ich die Resource richtig in das Programm reinschreibe.

Delphi-Quellcode:
function TForm1.GetResValue(resname: string): string;
var
  RS: TResourceStream;
begin
  try
    RS := TResourceStream.Create(hinstance, resname, RT_RCDATA);
    ShowMessage('(1)');
    SetString(Result, RS.Memory, RS.Size);
    ShowMessage('(2)');
    RS.Free;
    ShowMessage('(3)');
  except
    ShowMessage(SysErrorMessage(GetLastError));
    Result := '';
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := GetResValue(Edit1.Text);
  if (s <> '') then
    ShowMessage(s);
end;
Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 16. Mär 2012, 20:39
Wie lautet denn GetLastError?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
thomasschaf
(Gast)

n/a Beiträge
 
#3

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 16. Mär 2012, 21:50
Hallo,

die Fehlermeldung ist
"Der angegebene Ressourcentyp wurde nicht in der Image-Datei gefunden".

Was mich sehr wundert ist, dass das Design so komisch aussieht (siehe Screenshot 1).

Zum Test habe ich mal die Resource in ein Programm geschriben, das nicht von mir stammt (in diesem Beispiel in eine Kopie des Windows Calculator) und das Design und alle Funktionalitäten blieben erhalten. Leider verrät er mir selbst nicht, ob dieResource auch drin ist; Resource Hacker hat es aber wieder bestätigt. (siehe Screenshot 2)

Ich habe mir nun eine Function geschrieben, die mir ausgibt, welche Resourcetypen (RC_STRING, RC_ICON, ...) überhaupt gefunden werden:
Delphi-Quellcode:
function LetzterFehler: string; // Hilfsfunktion
begin
  Result := HintenEntfernen(SysErrorMessage(GetLastError), #13#10);
end;

function ResTypeExists(typeid: integer): boolean;
begin
  Result := False;
  try
    TResourceStream.Create(hinstance, 'irgendwasblabla', MakeIntResource(typeid));
    Result := True;
  except
    if isSubStr(LetzterFehler, 'name') then
      Result := True;
  end;
end;
Damit kann festgestellt werden, ob es an dem Typ liegt oder nur an dem Namen, warum die Resource nicht gefunden worden konnte.
Die Fehlermeldungen unterscheiden sich ja nur in folgendem:
  • Der angegebene Ressourcentyp wurde nicht in der Image-Datei gefunden.
  • Der angegebene Ressourcenname wurde nicht in der Image-Datei gefunden

...und dann
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
  sl: TStringList;
  d: DWORD;
begin
  d := GetTickCount;
  sl := TStringList.Create;
  for i := 0 to 1000 do
    if ResTypeExists(i) then
      sl.Add(IntToStr(i));
  ShowMessage('Zeit: ' + IntToStr(GetTickCount - d) + sLineBreak + 'gefunden:' +
    sLineBreak + sl.Text);
  // Ausgabe im Original: 3,5,14,24
  // Ausgabe nach Bearbeiten durch anderes Programm mittels UpdateResource: nichts mehr.
  // (Vergleich: siehe Screenshot 3)
  sl.Free;
end;
Es werden offensichtlich alle Resourcen vernichtet, wenn ich das Programm mit UpdateResource modifiziere.
Aber ResourceHacker versichert mir, dass die Resource RT_RCDATA hinzugefügt worden ist und alles sonst beibehalten worden ist.
Angehängte Grafiken
Dateityp: png Screenshoty7eg.png (16,0 KB, 13x aufgerufen)
Dateityp: png Screenshotxqsr.png (7,5 KB, 12x aufgerufen)
Dateityp: png Screenshotbwpg.png (17,5 KB, 12x aufgerufen)

Geändert von thomasschaf (16. Mär 2012 um 21:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz