Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi problem mit picture bei image (https://www.delphipraxis.net/84162-problem-mit-picture-bei-image.html)

flori-da 12. Jan 2007 12:23


problem mit picture bei image
 
hallo..ich hab folgendes problem:

ich lade von einer imageliste auf ein image verschiedene bitmaps(bilder).
aber sie vermischen sich.
as heißt das neu geladene bitmap legt sich einfach auf as alte darauf.
> und das sieht scheiße aus.
ich hab auch refresh bzw. repaint eingebaut.was muss ich da noch berücksichtigen?
was kann ich da machen..irdendwie die bilder immer wieder löschen?? :gruebel:
vielleicht wisst ihr weiter.

Quellcode:
Delphi-Quellcode:
imagelist1.getbitmap(1,image2.picture.bitmap);
image2.Refresh;
sleep(100);
imagelist1.getbitmap(2,image2.picture.bitmap);
image2.refresh;
sleep(100);
imagelist1.getbitmap(0,image2.picture.bitmap);
danke schon mal..

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

himitsu 12. Jan 2007 12:34

Re: problem mit picture bei image
 
Du hast bestimmt war mit Transparenz?

Lösche vorher einfach den Inhalt von image2 :zwinker:

etwa in der Art:
Delphi-Quellcode:
image2.picture.bitmap.clear;
imagelist1.getbitmap(1,image2.picture.bitmap);
oder so
Delphi-Quellcode:
image2.picture.bitmap.pen.color := hintergrundfarbe;
image2.picture.bitmap.brush.color := hintergrundfarbe;
image2.picture.bitmap.rectangle(...);
imagelist1.getbitmap(1,image2.picture.bitmap);
...


[add]
Zitat:

Quellcode:
ach ja, schau dir doch bitte mal die [code]-Tags an :stupid:

flori-da 12. Jan 2007 16:14

Re: problem mit picture bei image
 
Es funktionieren beide lösungen nicht..

1.
Zitat:

image2.picture.bitmap.clear;
delphi sagt da bei mir das clear ein undefinierter bezeichner ist..
ich habs mal mit picture.destroy versucht > bringt aber auch nichts

2.
Zitat:

image2.picture.bitmap.pen.color := hintergrundfarbe;
image2.picture.bitmap.brush.color := hintergrundfarbe;
image2.picture.bitmap.rectangle(...);
imagelist1.getbitmap(1,image2.picture.bitmap);
das geht auch nicht, weil ich hinter dem image ein weiteres image habe..
das eine image soll praktisch auf den anderen image herrum laufen und sich dabei bewegen.
also.. ??? :wall:
was kann ich noch versuchen??

Blackheart 12. Jan 2007 16:57

Re: problem mit picture bei image
 
Delphi-Quellcode:
Image1.Picture:=Nil;

MrKnogge 12. Jan 2007 17:03

Re: problem mit picture bei image
 
Zitat:

Zitat von Blackheart
Delphi-Quellcode:
Image1.Picture:=Nil;

Und das Opject vom Typ TPicture wäre dann weiterhin in meinem Speicher :roll:
Wenn dann bitte
Delphi-Quellcode:
Image1.Picture.Free;

flori-da 12. Jan 2007 17:31

Re: problem mit picture bei image
 
also...

das mit
Zitat:

Image1.Picture.Free;
funktioniert nicht.da bekomme ich eine fehlermeldung sobald ich die procedur starte.

und die andere variante mit
Zitat:

Image1.Picture:=Nil;
läuft..ABER mit weißen hintergrund..und das ist das was ich gerade nicht wollte.
also sieht man dann ein weißes viereck um meine figur..
ich zeig euch einfach mal die ganze procedure:

Delphi-Quellcode:
procedure TForm1.KeyFirst(var vorher: TWMKey);
begin
  case vorher.CharCode of
       VK_LEFT : begin
                       KeyLeft;
                       imagelist1.getbitmap(1,image2.picture.bitmap);
                       image2.Refresh;
                       sleep(100);
                       image2.Picture.free;
                       imagelist1.getbitmap(2,image2.picture.bitmap);
                       image2.refresh;
                       sleep(100);
                       image2.picture.free;
                       imagelist1.getbitmap(0,image2.picture.bitmap);
                  end;
       VK_UP   : KeyUp;
       VK_RIGHT : begin
                       KeyRight;
                       imagelist1.getbitmap(3,image2.picture.bitmap);
                       image2.Refresh;
                       sleep(100);
                       image2.Picture:=nil;
                       imagelist1.getbitmap(4,image2.picture.bitmap);
                       image2.refresh;
                       sleep(100);
                       image2.picture:=nil;
                   end;
       VK_DOWN : KeyDown;
       VK_ESCAPE: Close;
  end;
  imagelist1.getbitmap(0,image2.picture.bitmap);
  inherited;
end;
außerdem ist mein bewegungsablauf noch nicht so wie ich ihn haben möchte:
ich will , dass ,solange ich die pfeiltaste (links oder rechts) drücke, zwei bilder abwechselnt gezeigt werden..
und wenn ich nichts drücke soll das andere bild kommen (wie die figur steht);
bis jetzt ist es so, (wenn ich das mit image2.picture:=nil; benutze) dass alle drei bilder immer abwechselnt erscheinen..
das bild wo die figur steht sieht man immer dazwischen wenn die figur läuft..
habt ihr vielleicht dazu ne idee?

vielen dank für eure unterstützung :thumb:

flori-da 17. Jan 2007 16:36

Re: problem mit picture bei image
 
So..
das Problem habe ich immer och nicht beheben können.
allerdings habe ich die ganze sache etwas übersichtlicher gestaltet.
Ich habe mich vorerst für die notlösung mit
image1.picture:= nil
entschieden. Aber zufrieden bin ich damit noch nicht.

Delphi-Quellcode:
unit Spiel_01;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Image2: TImage;
    ImageList1: TImageList;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure show (NR:integer);
  public
    { Public-Deklarationen }
    procedure KeyFirst(var vorher: TWMKey);message CM_DIALOGKEY;
    procedure KeyLeft;
    procedure KeyUp;
    procedure KeyRight;
    procedure KeyDown;

  end;

const s=8;
var   Form1: TForm1;


implementation

procedure TForm1.KeyFirst(var vorher: TWMKey);
begin
  case vorher.CharCode of
       VK_LEFT : begin
                       KeyLeft;
                       show(4);
                       KeyLeft;
                       show(5);
                       KeyLeft;
                       show(6);
                       KeyLeft;
                       show(5);
                       KeyLeft;
                       show(4);
                  end;
       VK_UP   : KeyUp;
       VK_RIGHT : begin
                       Keyright;
                       show(1);
                       Keyright;
                       show(2);
                       Keyright;
                       show(3);
                       Keyright;
                       show(2);
                       Keyright;
                       show(1);
                   end;
       VK_DOWN : KeyDown;
       VK_ESCAPE: Close;
  end;
  show(0);
  inherited;
end;

procedure TForm1.show(nr:integer);
begin
     image2.picture:=nil;
     imagelist1.getbitmap(Nr,form1.image2.picture.bitmap);
     image2.Refresh;
     sleep(100);
end;


//Bild nach Links verschieben
procedure TForm1.KeyLeft;
begin
  Image2.Left := Image2.Left - s;
  If Image2.Left < image1.left then image2.left:= image2.left + s;
end;

//Bild nach Oben verschieben
procedure TForm1.KeyUp;
begin
  Image2.Top := Image2.Top - s;
  If Image2.top < image1.top then image2.top:= image2.top + s;
end;

//Bild nach Rechts verschieben
procedure TForm1.KeyRight;
begin
  Image2.Left := Image2.Left + s;
  If (Image2.Left+Image2.Width) > (image1.left + image1.Width) then image2.left:= image2.left - s;
end;

//Bild nach Unten verschieben
procedure TForm1.KeyDown;
begin
  Image2.Top := Image2.Top + s;
  If (Image2.top+Image2.height) > (image1.top + image1.height) then image2.top:= image2.top - s;
end;

{$R *.DFM}


procedure TForm1.FormCreate(Sender: TObject);
begin
 // double.buffered:=true;
 image2.top:=776;
 image2.left:=24;
 image28.Picture.Bitmap.TransparentColor:=clwhite;
 image29.Picture.Bitmap.TransparentColor:=clwhite;
 image30.Picture.Bitmap.TransparentColor:=clwhite;
 image31.Picture.Bitmap.TransparentColor:=clwhite;
 image32.Picture.Bitmap.TransparentColor:=clwhite;
end;
end.
also..ich hoffe ihr habt noch ein paar kreative Ideen für mich, wie ich mein problem lösen kann..
thank you
der flo


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