Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi ressource datei liest keine Integer werte aus! (https://www.delphipraxis.net/47461-ressource-datei-liest-keine-integer-werte-aus.html)

Janek5024 11. Jun 2005 15:24


ressource datei liest keine Integer werte aus!
 
Hallo erst mal!
Ich hab vom Studium her folgende Aufgabe bekommen:
Ich soll ein Programm schreiben mit welchem ich Bilder vor und zurück anschauen kann! Kein einlesen über das Programm sondern sollen alle im Programm verankert sein! (nich lachen... ich studiere Maschinenbau)
Meine Lösung wäre gewesen über ein simplen zählmechanismus Bild für Bild durch zu schalten. es sellte sich aber heraus dass ich keine integer werte bekomme um sie zu addieren.
Da habe ich glücklicherweise gelesen dass es über ne resource gehen könnte. So hab ich's gemacht.

Zitat:

Also. Pack die Bitmaps in eine Ressource. Wie das geht steht hier: http://www.delphipraxis.net/viewtopi...t=326&highligh ... e+resource
Anstatt jetzt Namen zu vergeben wie im Beispiel 'calogo', nimmst du eine Zahl: 1, 2, 3, ....
Lden tust du sie dann mit:
Quellcode: markieren

Image1.Picture.Bitmap.LoadFromResourceName(HInstan ce, MAKEINTRESOURCE(1));

Und mit Random kannst du nun eine zufällige Zahl erzeugen und entsprechend einsetzen. Fertig.


nun kann ich aber doch nicht integerwerte benutzen... denn mein PC hängt sich jedesmal auf....

mein Programm:


DER BUTTON
----------

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
begin
x:=x+1;
Image1.Picture.Bitmap.LoadFromResourceName(HInstance, MAKEINTRESOURCE(x));
end;

end.
DIE RESource
-------------

SourceCode RCDATA "uSampleForm.pas"
1 BITMAP "1.bmp"
2 BITMAP "2.bmp"
3 BITMAP "baby256.bmp"
4 BITMAP "p4.bmp"
5 BITMAP "lego.bmp"
6 BITMAP "Junky.bmp"
7 BITMAP "MR.bmp"


Kann mir bitte einer sagen was ich falsch gemacht habe

[edit=alcaeus]Delphi-Tags eingefuegt. In Zukunft bitte selbst machen. Danke :) Mfg, alcaeus[/edit]

Die Muhkuh 11. Jun 2005 15:38

Re: ressource datei liest keine Integer werte aus!
 
Hi,

Delphi-Quellcode:
var
  x: Integer;
begin
  x := x + 1; // Hier ist X nicht 1 oder 2, sondern undefiniert.
 ...
end;
So sollte es klappen:

Delphi-Quellcode:
var
  x: Integer;
begin
  x := 1;
  ...
end;

Janek5024 11. Jun 2005 15:40

Re: ressource datei liest keine Integer werte aus!
 
Auch wenn ich einfach nur
x:=1 setze klappt es leider nicht

jfheins 11. Jun 2005 15:41

Re: ressource datei liest keine Integer werte aus!
 
Dumme frage: Bist du dir sicher, dass du die ressource eingebunden hast ?

Die Muhkuh 11. Jun 2005 15:43

Re: ressource datei liest keine Integer werte aus!
 
Vllt. hier noch was:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
begin
x:=x+1;
Image1.Picture.Bitmap.LoadFromResourceName(HInstance, IntToStr(x));
end;
oder vllt. auch:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
begin
x:=x+1;
Image1.Picture.Bitmap.LoadFromResourceID(HInstance, x);
end;

Janek5024 11. Jun 2005 15:45

Re: ressource datei liest keine Integer werte aus!
 
100% denn wenn ich die namen der Dateien 'eins'
also als string bezeichne und mit

Image1.Picture.Bitmap.LoadFromResourceName(HInstan ce, 'eins');

bspielsweise auslese, klappt es wunderbar, aber ich möchte ja mit 2 einfachen buttons vor und zurück

Die Muhkuh 11. Jun 2005 16:01

Re: ressource datei liest keine Integer werte aus!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ich glaube das Problem liegt hier:

Zitat:

Zitat von sakura
Name der Resource (gleiche Bestimmung wir für Pascal Bezeichner)

Pascal Bezeichner dürfen auch nicht mit Zahlen anfangen.

[edit]
Quick and dirty Lösung:

Delphi-Quellcode:
unit umain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ScrollBox1: TScrollBox;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FBildIndex: Integer;
  public
    { Public-Deklarationen }
  end;

const
  Bilder: array [1..5] of String = ('a', 'b', 'c', 'd', 'e');

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FBildIndex := 0; // FBildIndex initialisieren
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Inc(FBildIndex); // FBildIndex um 1 erhöhen

  if (FBildIndex > 5) or (FBildIndex < 1) then // FBildIndex im gültigen Bereich?
    FBildIndex := 1;

  Image1.Picture.Bitmap.LoadFromResourceName(HInstance, Bilder[FBildIndex]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Dec(FBildIndex); // FBildIndex um 1 erhöhen

  if (FBildIndex > 5) or (FBildIndex < 1) then // FBildIndex im gültigen Bereich?
    FBildIndex := 5;

  Image1.Picture.Bitmap.LoadFromResourceName(HInstance, Bilder[FBildIndex]);
end;

end.
Resourcendatei:

Code:
SourceCode RCDATA "umain.pas"
a BITMAP "Adjust Colour.bmp"
b BITMAP "accounts.bmp"
c BITMAP "Acrobat.bmp"
d BITMAP "Address Book.bmp"
e BITMAP "Adjust Brightness.bmp"
[/edit]

[edit2] Kleines Beispiel angehängt [/edit2]

Muetze1 11. Jun 2005 16:13

Re: ressource datei liest keine Integer werte aus!
 
Moin!

@Spider: Du gibst hier Lösungen und Code ohne dich auch nur mal mit den Resourcen auseinander gesetzt zu haben. Die scheint der Sinn von MakeIntResource() etc überhaupt nix zu sagen.

@Threadersteller:

Wenn du die Bilder mit "one" laden kannst, dann liegt das Problem in der deiner RES Datei, wo dann immernoch als Bezeichner keine Zahl sondern "one" drinne steht. Du musst deine Bezeichner wie z.B. "one" durch eine einfache "1" ersetzen und dann kannst du es auch mit MakeIntResource laden. Auch musst du, wenn du das Resourcen-Compile-Skript (.rc) geändert hast, die Resource neu erstellen mit dem Resourcencompiler und dann die neue Resource einkompilieren. Danach sollte dann das Laden der Bilder über den Namen "one" nicht mehr funktionieren, wohl aber mit MakeIntResource(1).

MfG
Muetze1

Die Muhkuh 11. Jun 2005 16:19

Re: ressource datei liest keine Integer werte aus!
 
Zitat:

Zitat von Muetze1
Moin!

@Spider: Du gibst hier Lösungen und Code ohne dich auch nur mal mit den Resourcen auseinander gesetzt zu haben. Die scheint der Sinn von MakeIntResource() etc überhaupt nix zu sagen.

Hi,

so ganz unrecht hast du nicht, aber ich habe es selbst mit MakeIntResource versucht und bekomme immer eine Zugriffverletzung.
Wie oben geschrieben, ist das eine Quick and Dirty Lösung, die aber vollkommen funktioniert.

Muetze1 11. Jun 2005 16:21

Re: ressource datei liest keine Integer werte aus!
 
Moin!

Mir ging es nicht nur darum, sondern u.a. auch um den Vorschlag direkt ein Integer anzugeben anstatt des PChar's - was schon böse ist.

Deine Lösung habe ich mir nicht weiter angeschaut - zumindest sollte sich der Threadersteller seine Lösung raussuchen...

MfG
Muetze1

Die Muhkuh 11. Jun 2005 16:26

Re: ressource datei liest keine Integer werte aus!
 
Zitat:

Zitat von Muetze1
Moin!

Mir ging es nicht nur darum, sondern u.a. auch um den Vorschlag direkt ein Integer anzugeben anstatt des PChar's - was schon böse ist.

Deine Lösung habe ich mir nicht weiter angeschaut - zumindest sollte sich der Threadersteller seine Lösung raussuchen...

MfG
Muetze1

Hi,

da muss ich aber was übersehen haben. Wo wird ein PChar Parameter verlangt?

MakeIntResource verlangt Word,
LoadFromResourceName verlangt Cardinal und String,
LoadFromResourceID verlangt Cardinal und Integer.

Janek5024 11. Jun 2005 16:28

Re: ressource datei liest keine Integer werte aus!
 
Zitat:

Zitat von Muetze1
Moin!

@Spider: Du gibst hier Lösungen und Code ohne dich auch nur mal mit den Resourcen auseinander gesetzt zu haben. Die scheint der Sinn von MakeIntResource() etc überhaupt nix zu sagen.

@Threadersteller:

Wenn du die Bilder mit "one" laden kannst, dann liegt das Problem in der deiner RES Datei, wo dann immernoch als Bezeichner keine Zahl sondern "one" drinne steht. Du musst deine Bezeichner wie z.B. "one" durch eine einfache "1" ersetzen und dann kannst du es auch mit MakeIntResource laden. Auch musst du, wenn du das Resourcen-Compile-Skript (.rc) geändert hast, die Resource neu erstellen mit dem Resourcencompiler und dann die neue Resource einkompilieren. Danach sollte dann das Laden der Bilder über den Namen "one" nicht mehr funktionieren, wohl aber mit MakeIntResource(1).

MfG
Muetze1

das mit 'one' sind natürlich alles stringwerte das problem ist ... gerade mit den integer zahlen geht es nicht, denn da gibt mir mein pc doch aus dass er die res nicht findet

Also nun zu SPIDER:

das klappt, aber das mit dem array is mir ganz schön kompliziert :oops: naja hauptsache ich hab was womit ich arbeiten kann

Danke

Muetze1 11. Jun 2005 16:30

Re: ressource datei liest keine Integer werte aus!
 
Moin!

Zitat:

Zitat von Spider
da muss ich aber was übersehen haben. Wo wird ein PChar Parameter verlangt?

MakeIntResource verlangt Word,
LoadFromResourceName verlangt Cardinal und String,
LoadFromResourceID verlangt Cardinal und Integer.

Da hast du recht, das sind die VCL Routinen - ich war mehr bei den WinAPI Funktionen. Die Dinge sind richtig von dir (das mit LoadFromResourceID() sollte auch wie angegeben klappen - bis auf den Fakt, das x einen Zufallswert enthält. Die Warnung des Compilers, das der Inhalt von x wahrscheinlich uninitalisiert ist, kommt ja nicht umsonst.

MfG
Muetze1

Luckie 11. Jun 2005 18:54

Re: ressource datei liest keine Integer werte aus!
 
Zitat:

Zitat von Janek5024
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
begin
x:=x+1;
Image1.Picture.Bitmap.LoadFromResourceName(HInstance, MAKEINTRESOURCE(x));
end;

end.
DIE RESource
-------------

SourceCode RCDATA "uSampleForm.pas"
1 BITMAP "1.bmp"
2 BITMAP "2.bmp"
3 BITMAP "baby256.bmp"
4 BITMAP "p4.bmp"
5 BITMAP "lego.bmp"
6 BITMAP "Junky.bmp"
7 BITMAP "MR.bmp"

Wenn das so alles stimmt, dann liegt es eindeutig daran, das in X zu dem Zeitpunkt bestimmt nicht eins oder so drinne steht. Loaklae variablen werden nicht initialisiert. Da steht also irgendwas drinne. dazu addierst du jetzt eins. Der resultiernde Wert liegt jetzt mit sehr hoher Wahrscheinlichkeit nicht zwischen 1 und 7.

Janek5024 11. Jun 2005 20:34

Re: ressource datei liest keine Integer werte aus!
 
ach so! jo das war's! vielen DANK noch mal an alle! :hello:

Muetze1 12. Jun 2005 00:42

Re: ressource datei liest keine Integer werte aus!
 
Moin!

Zitat:

Zitat von Janek5024
ach so! jo das war's! vielen DANK noch mal an alle! :hello:

Ach, und was hast du denn auf Reaktion zum 1. Beitrag getan?
Und warum meintes du dann im 2. Beitrag, dass es nicht klappt?

Und es wurde insgesamt 4x in diesem Thread auf diese nicht intialisierte Variable hingewiesen und niemals drauf reagiert worden. Auch brachte es keine Änderung laut deiner Aussage (2. Antwort). Also wieso denn jetzt auf einmal?

Ich kapier es manchmal wirklich nicht...

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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