AGB  ·  Datenschutz  ·  Impressum  







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

eingebunde Resourcen abfragen (RCDATA)

Offene Frage von "thomasschaf"
Ein Thema von thomasschaf · begonnen am 15. Mär 2012 · letzter Beitrag vom 19. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2   
thomasschaf

Registriert seit: 13. Aug 2011
63 Beiträge
 
FreePascal / Lazarus
 
#1

eingebunde Resourcen abfragen (RCDATA)

  Alt 15. Mär 2012, 18:53
Delphi-Version: 5
Hallo,

wie kann ich eingebunde Resourcen auslesen ?
Der Typ ist RC_DATA.

Ich kann sie übrigens mit dem "Resource Hacker" auslesen.


Thomas
Miniaturansicht angehängter Grafiken
screenshott54n.png  
Thomas
Lazarus IDE v0.9.30.4 Beta
FreePascal 2.6.0
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

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

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 15. Mär 2012, 19:04
Stichwort: TResourceSteam.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
thomasschaf

Registriert seit: 13. Aug 2011
63 Beiträge
 
FreePascal / Lazarus
 
#3

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 15. Mär 2012, 23:00
Stichwort: TResourceSteam.
TResourceStream.Create(HINSTANCE, '99303', RT_RCDATA); gibt leider die Fehlermeldung:

der angegebene ressourcentyp wurde nicht in der image-datei gefunden

Ist die Syntax denn dem Screenshot zufolge richtig ??
Thomas
Lazarus IDE v0.9.30.4 Beta
FreePascal 2.6.0
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 15. Mär 2012, 23:08
Nein, es muss heißen TResourceStream.CreateFromID(HINSTANCE, 99303, RT_RCDATA) , da du hier eine Ressource nach einer ID (=Nummer) und nicht nach einem Namen (=String) lädst. Ich persönlich bin ja eher ein Freund von benannten Ressourcen, aber wie du deine Ressourcen verwaltest, ist natürlich dir überlassen.
  Mit Zitat antworten Zitat
thomasschaf

Registriert seit: 13. Aug 2011
63 Beiträge
 
FreePascal / Lazarus
 
#5

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 15. Mär 2012, 23:33
Leider funktioniert das auch nicht und gibt den selben Fehler aus.

Wie kommst du denn darauf, dass ich nach einer Nummer suche ?
Dort, wo im Screenshot 99303 steht, könnte auch ein String stehen.

Im Anhang habe ich noch ein Beispiel erstellt.

Ist es denn sicher, dass man die Resourcen auslesen kann, wenn sie im "Resource Hacker" angezeigt werdne oder gibt es da noch Spezialfälle, die es zu unterscheiden gibt ?
Miniaturansicht angehängter Grafiken
screenshot7lxk.png  
Thomas
Lazarus IDE v0.9.30.4 Beta
FreePascal 2.6.0
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 15. Mär 2012, 23:42
Dort, wo im Screenshot 99303 steht, könnte auch ein String stehen.

Im Anhang habe ich noch ein Beispiel erstellt.
Ah ok, dann hab ich das falsch gesehen, sorry. Dann sollte dein Beispiel aber eigentlich funktionieren.

Ist wirklich sicher, dass die Ressource auch in der Exe ist und du nicht mit Reshacker versehentlich die falsche Datei untersucht hast?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 15. Mär 2012, 23:48
Wie hast du diese Resource erstellt?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
thomasschaf

Registriert seit: 13. Aug 2011
63 Beiträge
 
FreePascal / Lazarus
 
#8

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 15. Mär 2012, 23:48
Es ist sicher, dass ich die richtige Datei mit dem Resourcehacker geöffnet habe.

Zwei mögliche Probleme sehe ich:
- Ich arbeite mit Lazarus, nicht mit Delphi.
- Die Resource, die ich auslesen möchte, habe ich auch in die exe-Datei geschrieben (mit einem anderen Programm über UpdateResource).
-> Es könnte also sein, dass die Resource nicht "ordentlich" reingeschrieben worden ist, obwohl ich sie mit dem reshacker sehen kann (daher auch die Frage, ob es da noch Unterschiede/Spezialfälle gibt)
--> Wenn ich die Resource in die exe-Datei schreibe und diese starte, sieht das Design auch anders aus (siehe screenshot), es wurden also die Resourcen, die für das Design verantwortlich sind, entfernt?
Miniaturansicht angehängter Grafiken
screenshott12v.png  
Thomas
Lazarus IDE v0.9.30.4 Beta
FreePascal 2.6.0
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 16. Mär 2012, 02:10
Es kann sein, dass das Design des Programms aus der Ressource geladen wird und du mit deiner veränderung selbiger, diese irgendwie zerstörst. Er somit die benötigten Daten nicht mehr bekommt.

Ich kann dir nur dazu raten, dich vorher mit Tutorials zu dem Thema Ressourcen zu befassen. Google ist da dein Freund
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
thomasschaf

Registriert seit: 13. Aug 2011
63 Beiträge
 
FreePascal / Lazarus
 
#10

AW: eingebunde Resourcen abfragen (RCDATA)

  Alt 16. Mär 2012, 14:40
Ich habe mich in der Zwischenzeit mit dem Thema Resourcen sehr ausgiebig beschäftigt, trotzdem kann ich mir nicht erklären, warum die Resource nicht gefunden werden kann, aber mit einem anderen Programm (Resource Hacker) angezeigt werden kann.

Könnte jemand vielleicht mit Delphi folgenden Code compilen und die exe hier im Forum anhängen ?
Delphi-Quellcode:
function TForm1.GetResValue(resname: string): string;
var
  RS: TResourceStream;
begin
  try
    RS := TResourceStream.Create(hinstance, resname, RT_RCDATA);
    ShowMessage('(1)');
    RS.Free;
    ShowMessage('(2)');
    SetString(Result, RS.Memory, RS.Size);
  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;
mit folgenden Komponenten:
- Editfeld: "Edit1"
- Button: "Button1"

Dann könnte ich testen, ob es möglich ist, die Resource abzufragen, die ich in eine exe reinschreibe.

Grüße
Thomas
Lazarus IDE v0.9.30.4 Beta
FreePascal 2.6.0
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf