AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie nutze ich den TResourceStream richtig?

Ein Thema von Harry Stahl · begonnen am 15. Dez 2013 · letzter Beitrag vom 16. Dez 2013
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#1

AW: Wie nutze ich den TResourceStream richtig?

  Alt 16. Dez 2013, 17:59
OH, nun hab ich es!!

RT_BITMAP ist eine Delphi-Konstante, die in Winapi.windows so definiert ist:
Code:
{$EXTERNALSYM RT_BITMAP}
  RT_BITMAP = MakeIntResource(2);
Ich habe mich von der Beschreibung des Parameters ("Restype: PChar") in "TResourceStream.create" und diversen im Internet falsch kursierenden Beispielen irritieren lassen und ging davon aus, dass hier ein String erwartet wird.

Wenn man es also so schreibt:
ms := TResourceStream.Create(HInstance, 'Bitmap_1', RT_Bitmap); dann funktioniert es wie gewünscht (also nicht 'RT_BITMAP' sondern einfach nur RT_Bitmap).

Und ja: Uwe hat natürlich auch recht, in der Resource ist ein Bitmap-FileStream, den man nicht direkt als Bitmap-Stream laden kann, muss man erst konvertieren (dafür kann man die procedure "TBitmapResource.SaveToStream(Stream: TStream);" aus dem mit Delphi mitgelieferten Demo "ResXplor" etwas abgewandelt verwenden).

Vielen Dank für die hilfreichen Hinweise!

Geändert von Harry Stahl (16. Dez 2013 um 18:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Wie nutze ich den TResourceStream richtig?

  Alt 16. Dez 2013, 19:13
Immer gerne.

PChar bei Verwendung der Windows API kann öfters mal etwas irreführend sein, wenn man fest davon ausgeht, dass ein PChar wirklich ein String ist (was uns die Delphi Compiler Magic ja in den meisten Fällen glauben lässt). Über diesen Fallstrick bin ich damals, auch gestolpert, als ich mich erstmals ausführlich mit Resourcen beschäftigt habe.

Bei API Imports (GetProcAddress) beispielsweise ist es ebenfalls so, dass der "Name" der Funktion als PAnsiChar übergeben wird. Trotzdem akzeptiert die Funktion auch Ordinalwerte.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Wie nutze ich den TResourceStream richtig?

  Alt 16. Dez 2013, 21:48
@Harry

Bei mir stelle ich in der IDE die Farbe für Strings auf rot ein.

Damit hätte dir eigentlich sofort bei TBitmap.LoadFromResource auffallen müssen, dass es dort eben kein string ist, sondern eine Konstante
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie nutze ich den TResourceStream richtig?

  Alt 16. Dez 2013, 21:58
Das hilft nicht viel.

Ich wusste vor Jahren wie es geht und hatte auch im Netz nach Lösungen gesucht, aber ich hatte dennoch auch erst wieder den String gesetzt.
(wunderschön, wieviele fehlerhafte Tutorials es gibt, welche ich auch fast alle durchging, als ich die Sprache des Manifest-Creator auf ResourceStream umstellte)
Und wenn du einfach nicht "weißt", daß dort kein String hingehört, dann wirst du es auch nicht bemerken, egal wie bunt das Ding ist ... das hätte da auch rosa blinken können.

Nja, bei mir war es dann auch noch, daß ich die Resource falsche erstellt hab und es selbst, als ich es beim Rumprobieren, zwischendurch richtig hatte, es dennoch nicht ging.
'ne Stunde später fand ich dann aber selber doch noch die Lösungen .... nicht daß noch jemand mitbekommt, wie doof ich mich da angestellt hatte.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Dez 2013 um 22:00 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 12:51 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