Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mit Firemonkey Bild aus Ressource laden (https://www.delphipraxis.net/178603-mit-firemonkey-bild-aus-ressource-laden.html)

Haus117 16. Jan 2014 20:25

Mit Firemonkey Bild aus Ressource laden
 
Hey Leute,

ich benutze Delphi Starter XE5 und würde gerne ein Bild der exe direkt hinzufügen. Daher habe ich schon die .rc-Datei erstellt und in eine .res-Datei umgewandelt.
MIt einer normalen VLC-FOrmular-Anwendung bekomme ich es mit folgender Zeile auch super hin.

Image1.Picture.Bitmap.LoadFromResourceName(hinstan ce, 'bild1');

Nur in Firemonkey-Desktopanwendungen gibt es den Befehl nicht. Firemonkey möchte ich aber nutzen, da ich die Floatanimation davon nutze um Panels sanft ein und auszublenden. Habe daher folgendes probiert:

procedure TForm1.Button1Click(Sender: TObject);
var InStream: TResourceStream;
begin
InStream := TResourceStream.Create(HInstance, 'Bild1', RT_RCDATA);
try
Image1.Bitmap.LoadFromStream(InStream);
finally
InStream.Free;
end;
end;

da sagt er mit aber immer, das er die Ressourcendatei nicht finden kann. Vielleicht kann mir ja einer von euch helfen.

Mavarik 16. Jan 2014 23:54

AW: Mit Firemonkey Bild aus Ressource laden
 
Fehler in der RC Datei?

Ich mache es so...
GlobalScale ist der Bildschirmfaktor Retina usw.

Delphi-Quellcode:
Procedure TMyForm.LoadBild(FImage:TImage;ResName:String);
var
  RS : TResourceStream;
begin
  FImage.MultiResBitmap.Clear;

  if GlobalScale < 2.0
    then begin
           RS := TResourceStream.Create(HInstance,ResName+'Low',RT_RCDATA);
           FImage.MultiResBitmap.LoadItemFromStream(RS,1.0);
           FreeAndNil(RS);
         end
    else begin
           RS := TResourceStream.Create(HInstance,ResName+'High',RT_RCDATA);
           FImage.MultiResBitmap.LoadItemFromStream(RS,2.0);
           FreeAndNil(RS);
        end;
end;
Mavarik

Union 17. Jan 2014 06:55

AW: Mit Firemonkey Bild aus Ressource laden
 
Wenn man keinen doppelten Source mag:
Delphi-Quellcode:
Procedure TMyForm.LoadBild(FImage:TImage;ResName:String);
var
  RS : TResourceStream;
  Factor : single;
  Resolution : string;
begin
  FImage.MultiResBitmap.Clear;

  if GlobalScale < 2.0 then
  begin
    Factor := 1.0;
    Resolution := 'Low';
  else
  begin
    Factor := 2.0;
    Resolution := 'High';
  end;

  RS := TResourceStream.Create(HInstance,ResName+Resolution,RT_RCDATA);
  FImage.MultiResBitmap.LoadItemFromStream(RS, Factor);

  FreeAndNil(RS);
end;

Haus117 17. Jan 2014 11:18

AW: Mit Firemonkey Bild aus Ressource laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Procedurennamen hab ich mal den Punkt entfernt weil er mir das sonst als rot anzeigt. Oder hatte der Punkt nen bestimmten Grund?
DIe rotmarkierten Sachen zeigt er mir als Fehler an. Was mache ich falsch?
Und einfach FImage durch Image1 ersetzen funktioniert auch nicht...

Union 17. Jan 2014 11:53

AW: Mit Firemonkey Bild aus Ressource laden
 
Die Prozedur war als Methode eines TMyForm-Objekts deklariert. Wenn Dein Formularobjekt anders heißt, musst Du das anpassen und im Objekt ebenfalls deklarieren. GlobalScale ist eine gobale Variable, die mußt Du ebenfalls vorher deklarieren und füllen.

Mavarik 17. Jan 2014 11:58

AW: Mit Firemonkey Bild aus Ressource laden
 
Bzw.

Delphi-Quellcode:
Function GlobalScale:Single;
var
 ScreenSrv: IFMXScreenService;
begin
    if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenSrv)) then
      Result := ScreenSrv.GetScreenScale
    else
      Result:= 1.0;
end;

hsg 17. Jan 2014 12:22

AW: Mit Firemonkey Bild aus Ressource laden
 
... und ein 'end' vor dem rot unterstrichendem 'else' würde einen weiteren Fehler beseitigen.

Mavarik 17. Jan 2014 12:27

AW: Mit Firemonkey Bild aus Ressource laden
 
Zitat:

Zitat von hsg (Beitrag 1244107)
... und ein 'end' vor dem rot unterstrichendem 'else' würde einen weiteren Fehler beseitigen.

Ich war's nicht...:stupid:

Sir Rufo 17. Jan 2014 12:41

AW: Mit Firemonkey Bild aus Ressource laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn du dir CnWizards installierst, dann würde dir so ein Fehler sofort auffallen. (Achte mal auf die Linien zwischen dem
Delphi-Quellcode:
begin
und
Delphi-Quellcode:
end
)
Anhang 40553

Haus117 17. Jan 2014 15:30

AW: Mit Firemonkey Bild aus Ressource laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
OKay, das mit dem end hätte ich sehen müssen^^ aber der Wizard ist ne coole Idee.

also mein Formular-Objekt ist zB. mein Button oder der Name meiner Form?
denn
Delphi-Quellcode:
Procedure Form1.LoadBild(FImage:TImage;ResName:String);
scheint es noch nicht zu sein.

wenn ich die Funktion einfüge fehlt bestimmt noch ne Bibliothek oder Uni oder sowas? denn er unterstreicht mir wieder folgendes:

Sir Rufo 17. Jan 2014 15:34

AW: Mit Firemonkey Bild aus Ressource laden
 
Dann geh mit dem Cursor in der IDE auf das rot unterstrichene und drücke ganz beherzt Shift+Ctrl+A.

Oder du benutzt die Online-Hilfe Delphi-Referenz durchsuchenTPlatformServices, Delphi-Referenz durchsuchenIFMXScreenService

Haus117 17. Jan 2014 19:22

AW: Mit Firemonkey Bild aus Ressource laden
 
Jetzt mal unabhängig von diesem Scale, er findet meine Ressource ja nicht. Und das obwohl ich unter {$R *.dfm} das hier schreibe
{$R Test.res}. Und in der test.re steht: Bild1 BITMAP "C:\Users\blablabla\Desktop\Foto.bmp".
dann müsste doch eigentlich auch

RS := TResourceStream.Create(HInstance,Bild1hight,RT_RCD ATA);
FImage.MultiResBitmap.LoadItemFromStream(RS, 2);

funktionieren oder nicht?

Union 17. Jan 2014 20:02

AW: Mit Firemonkey Bild aus Ressource laden
 
Sollte die Datei nicht test.rc heißen? Und der Include {$R 'test.res' 'test.rc'} ?

Mavarik 18. Jan 2014 10:27

AW: Mit Firemonkey Bild aus Ressource laden
 
Zitat:

Zitat von haus117 (Beitrag 1244186)
jetzt mal unabhängig von diesem scale, er findet meine ressource ja nicht. Und das obwohl ich unter {$r *.dfm} das hier schreibe
{$r test.res}. Und in der test.re steht: Bild1 bitmap "c:\users\blablabla\desktop\foto.bmp".
Dann müsste doch eigentlich auch

rs := tresourcestream.create(hinstance,bild1hight,rt_rcd ata);
fimage.multiresbitmap.loaditemfromstream(rs, 2);

funktionieren oder nicht?

rt_rcdata <> bitmap

Sir Rufo 18. Jan 2014 11:21

AW: Mit Firemonkey Bild aus Ressource laden
 
Zitat:

Zitat von Haus117 (Beitrag 1244186)
Jetzt mal unabhängig von diesem Scale, er findet meine Ressource ja nicht. Und das obwohl ich unter {$R *.dfm} das hier schreibe
{$R Test.res}. Und in der test.re steht: Bild1 BITMAP "C:\Users\blablabla\Desktop\Foto.bmp".
dann müsste doch eigentlich auch

RS := TResourceStream.Create(HInstance,Bild1hight,RT_RCD ATA);
FImage.MultiResBitmap.LoadItemFromStream(RS, 2);

funktionieren oder nicht?

Könntest du bitte um den Quellcode die
Code:
[DELPHI]
[/DELPHI]
Tags setzen?

Dann würde das so aussehen
Delphi-Quellcode:
RS := TResourceStream.Create(HInstance,Bild1hight,RT_RCDATA);
FImage.MultiResBitmap.LoadItemFromStream(RS, 2);

Haus117 18. Jan 2014 14:49

AW: Mit Firemonkey Bild aus Ressource laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Okay, habs gelöst. Danke an alle die mir geholfen haben. Der Trick war folgender:
Bild einfach per Drag&Drop unter "Projekverwaltung" (oben rechts) auf die Projekt.exe ziehen. Damit ist alles an rc und res Daten erstellt was man braucht. Den Namen der Ressource findet man dann in der rc Datei die im Projektordner erstellt wurde. Außerdem erscheint ein Ordner in der "Projektverwaltung" in welchem das Bild steckt. Wenn man das dort anklickt, erscheint im "Objektinspektor" (unten links) die Eigenschaften zum TResourceStream. Dort war Ressourcentyp BITMAP eingestellt und ich musste das einfach nur auf RT_RCDATA ändern..... warum auch immer ihm das im Quelltext nicht gereicht hat.

Sir Rufo 18. Jan 2014 16:19

AW: Mit Firemonkey Bild aus Ressource laden
 
Warum ihm das im Quelltext nicht gereicht hat?

Nun ganz einfach, du sagst im OI, dass das Bild in der Ressource als BITMAP liegen soll und im Quelltext, dass du aus der Ressource etwas vom Typ RT_RCDATA holen willst.

Beide Sachen haben doch erst einmal nichts miteinander zu tun.

Mavarik 18. Jan 2014 21:27

AW: Mit Firemonkey Bild aus Ressource laden
 
Zitat:

Zitat von Haus117 (Beitrag 1244255)
Okay, habs gelöst.

LOL
Zitat:

Zitat von Haus117 (Beitrag 1244255)
Ressourcentyp BITMAP eingestellt und ich musste das einfach nur auf RT_RCDATA ändern.....

hmm wer hat's geschrieben?

Haus117 20. Jan 2014 14:16

AW: Mit Firemonkey Bild aus Ressource laden
 
Hast recht, das war die Lösung. Ich konnte nur leider nicht riechen, dass es das nochmal als Einstellung gibt.^^

himitsu 20. Jan 2014 14:39

AW: Mit Firemonkey Bild aus Ressource laden
 
Zitat:

Zitat von Union (Beitrag 1244193)
Und der Include {$R 'test.res' 'test.rc'} ?

Schade, daß Dieses nicht direkt in der DCC32 verbaut ist.

Scheinbar funktioniert es nur, wenn es in der DPR drin steht und Delphi das dann auch in die Projektverwaltung (aktuell DPROJ) übernommen hatte, dann wird da beim Inline-Compilieren auch der Resourcen-Compiler angeschmissen und die RES aus der RC neu kompiliert.

Union 20. Jan 2014 15:18

AW: Mit Firemonkey Bild aus Ressource laden
 
Es funktioniert auch wenn es nicht in der DPROJ steht. Dann muss die .res aber einmalig durch einen Aufruf von brcc32 manuell erstellt werden. Danach wird die .res dann immer automatisch aktualisiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz