Bitmap als Ressource Einbingen,...

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Bitmap als Ressource Einbingen,...

Beitrag von corpsman »

Guten Morgen,
Ich versuche unter Linux mit FPC 2.4.0 und der aktuellen Lazarus Version aus dem SVN eine Bitmap als Ressource ein zu binden.

Dazu habe ich mich an diesen beiden Beiträgen orientiert :

Link
Link

lazres konnte ich erzeugen und mit Lazres auch eine *.lrs Datei.

Doch egal wie ich diese in mein Projekt einbinde, ich bekomme immer Fehler.

Binde ich sie als {$R xy.lrs} ein kommt :
Error: resource compiler "windres" not found, switching to external mode


Binde ich sie mit {$I xy.lrs} ein, öffnet der Editor beim Compilieren die datei und schreibt :
/sda5/sda5/Tools/Projects/Sample/OpenGL/OpenGL_VCL/vclres.lrs(1,1) Fatal: Syntax error, "BEGIN" expected but "identifier LAZARUSRESOURCES" found


Witziger weise funktioniert das einbinden in meiner "Demo" Applikation die ich gebaut habe.
Das Laden geht aber nicht, habe den Code mal hochgeladen, evtl seht ihr ja den Fehler :)
Dateianhänge
demo.zip
(4.98 KiB) 66-mal heruntergeladen
--
Just try it

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Bitmap als Ressource Einbingen,...

Beitrag von Socke »

Die Lazarus-Resourcen haben mit den "Windows-Resourcen" überhaupt nichts gemeinsam. Die Windows-Variante wird in die Executable gelinkt (und ist damit eigenständiger Bestandteil der Exe-Datei) während die Lazarus-Resourcen intern selbst im Speicher verwaltet werden (Liste mit Strings).
Das hinzufügen von Resourcen zu der Lazarus-Resourcen-Liste erfolgt mit LazarusResources.Add() aus der Unit LResources. Das Programm Lazres konvertiert deine Bitmap-Datei in einen String und packt diesen Funktionsaufruf drumherum. Deshalb musst du die *.lrs Datei auch irgendwo einbinden, wo diese Funktion aufgerufen werden kann (bspw. initialization). Die Fehlermeldung

Code: Alles auswählen

/sda5/sda5/Tools/Projects/Sample/OpenGL/OpenGL_VCL/vclres.lrs(1,1) Fatal: Syntax error, "BEGIN" expected but "identifier LAZARUSRESOURCES" found
besagt ganz einfach, dass die Funktion an einer syntaktisch falschen Stelle (außerhalb einer Funktion, Prozedur o.ä.) aufgerufen wird.

Wenn du auf die Windows-Resourcen, die der FPC jetzt auch unter Linux unterstützt, verwenden willst, musst du zuerst eine rc-Datei basteln (da steht drinnen, wie die Resource heißt, welchen Typ sie hat und welche Datei es sein soll), diese dann mit windres in eine *.res Datei übersetzen und die kann dann mit {$R *.res} eingebunden werden.

Code: Alles auswählen

Error: resource compiler "windres" not found, switching to external mode

Das heißt soviel wie windres nicht vorhanden und du musst es nachinstallieren. Ich weiß aber nicht, inwiefern diese auch für Linux brauchbare Ergbnisse produzieren, da zumindest die Debian Varianten auf Win(CE) abzielen.
Lazarus kann das mit dem Übersetzen der *.rc Datei auch selbst übernehmen (nur in den neueren Versionen, evtl. benötigst du die SVN-Version).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Bitmap als Ressource Einbingen,...

Beitrag von corpsman »

OK ich glaube ich habe den komplett Falschen Ansatz.

Ich möchte am besten Plattform unabhängig in einer Unit Ressourcen ein binden.

=>

Ich habe mir eine Unit gemacht, welche Komponenten implementiert, welche wiederum auf größere Daten zugreifen müssen ( momentan sind das nur Bitmaps )
Am liebsten wäre es mir wie unter Windows und Delphi5 Früher. Sprich einfach nur eine RC Datei erstellen und den Rest übernimmt das System.

Da wie du schreibst dies aber wohl der "Windows" weg ist, sollte es ja auch anders gehen, schließlich arbeite ich eigentlich nur noch unter Linux. Momentan bin ich ja noch in dem Stadium , dass es mal überhaupt gehen soll. Weswegen ich ja auch die Demo in Post 1 hoch geladen habe, denn nicht ein mal da geht es :(.
--
Just try it

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bitmap als Ressource Einbingen,...

Beitrag von Scotty »


MmVisual
Beiträge: 1470
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Bitmap als Ressource Einbingen,...

Beitrag von MmVisual »

Wenn Du einfach ein TImageList verwendest?
Alle Bitmaps mit gleicher Größe in eine Liste. Ist zwar nicht direkt eine Ressource, dafür kann man damit viel einfacher in Lazarus umgehen.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Bitmap als Ressource Einbingen,...

Beitrag von corpsman »

Mit Timage geht es auch nicht

@scotty
Der 1. Link aus meinem 1. Post ist genau dein Link, damit bekomme ich es ja nicht hin.

Momentan löse ich das Problem indem ich die entsprechenden Bilder von Hand nachlade. Das Problem dabei ist eben, dass ich diese zusätzlich noch zur Verfügung stellen muss.

Mittels *.lrs oder Ressource hätte ich mir dies sparen können.
--
Just try it

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bitmap als Ressource Einbingen,...

Beitrag von Scotty »

Der 1. Link aus meinem 1. Post ist genau dein Link, damit bekomme ich es ja nicht hin.

Vielleicht hilft ein Update. Ich habe in den Ressourcen Bitmaps, Waves und Cursors drin. Alles kein Problem, sowohl unter Windows als auch unter Linux.

Code: Alles auswählen

initialization
  {$I umain.lrs}
  {$I main_glyph.res}
  {$I flags.res}
  {$I Sounds.res}

Unter irgendeiner Bedingung ging es jedoch nur, wenn ich im lpr selektiv lade (ohne, dass dort viel drin stehen würde).

Code: Alles auswählen

{$IFDEF WINDOWS}
  {$R <App.name>.rc}
{$ELSE}
  {$R <App.name>.res}  //Error: Error while compiling resources
{$ENDIF}

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Bitmap als Ressource Einbingen,...

Beitrag von corpsman »

Ich habe FPC 2.4.0-rc1 und die SVN Version von gestern. Daran kann es nicht liegen.

Wärst du evtl. bereit mir das Sample aus Post 1 lauffähig zu machen ?

Dann könnte ich mich daran orientieren.
--
Just try it

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Bitmap als Ressource Einbingen,...

Beitrag von Scotty »

Out of the box, mal abgesehen davon, dass das Bild nicht ausgegeben wird (werden kann).

Ubuntu 64bit: Lazarus 0.9.29 r23473M FPC 2.5.1 x86_64-linux-gtk 2 (beta)
Windows XP 32bit (in einer VirtualBox): Lazarus 0.9.29 r22511 FPC 2.5.1 i386-win32-win32/win64

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Bitmap als Ressource Einbingen,...

Beitrag von corpsman »

ui gibt es schon wieder ne neue FPC Version.
da bin ich mit meiner :

Ubuntu 32bit: Lazarus 0.9.29 r23883 FPC 2.4.0-1+ppa1~k

wohl etwas hinter her ..

Out of the box, mal abgesehen davon, dass das Bild nicht ausgegeben wird (werden kann).

Was willst du mir damit sagen ?

Ich habe zumindest nun mal alle Examples von Lazarus durchgeschaut, ein entsprechendes Res example habe ich aber leider nicht gefunden.
--
Just try it

Antworten