![]() |
[DelphiX] Phantom Sprite
Hi,
Also mir ist grad was seltsames passiert. Ich wollte mir eine DXButton Klasse machen. Hier ist sie:
Delphi-Quellcode:
So.. Das eine Problem ist halt das ich in SetCaption die Caption auf das Bild des Sprites malen will. Aber nicht nur das das nicht funktioniert, das Sprite bewegt sich auch noch o.O
TSpriteButton = class
private FSprite: TImageSprite; FTop: Single; FLeft: Single; FCaption: String; FFont: TFont; FPicture: TPictureCollectionItem; FHeight: Word; FWidth: Word; procedure SetCaption(const Value: String); procedure SetFont(const Value: TFont); procedure SetHeight(const Value: Word); procedure SetLeft(const Value: Single); procedure SetPicture(const Value: TPictureCollectionItem); procedure SetTop(const Value: Single); procedure SetWidth(const Value: Word); public constructor Create(Engine: TSprite; APicture: TPictureCollectionItem); property Left: Single read FLeft write SetLeft; property Top: Single read FTop write SetTop; property Width: Word read FWidth write SetWidth; property Height: Word read FHeight write SetHeight; property Image: TPictureCollectionItem read FPicture write SetPicture; property Font: TFont read FFont write SetFont; property Caption: String read FCaption write SetCaption; end; Aber das ist nicht alles. Die Koordinaten des Sprites bleiben unverändert :pale: Wie kann das sein? Das Sprite malt nicht sondern verschiebt sich wobei nichtmal die Koordinaten geändert werden o.Ô. Hier mal die SetCaption Procedure:
Delphi-Quellcode:
Aufruf:
procedure TSpriteButton.SetCaption(const Value: String);
begin FCaption := Value; with FSprite.Image.Picture.Bitmap.Canvas do begin TextOut((Width div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextWidth(Value) div 2), (Height div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextHeight(Value) div 2), Value); end; end;
Delphi-Quellcode:
Gruß
procedure TfrmMain.DXDraw1Click(Sender: TObject);
begin B.Caption := 'HALLO'; end; Neutral General |
Re: [DelphiX] Phantom Sprite
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Es fehlt folgendes, ich weiß aber nicht, ob dies deinen Fehler behebt.
Delphi-Quellcode:
Für mein
procedure TSpriteButton.SetCaption(const Value: String);
begin FCaption := Value; with FSprite.Image.Picture.Bitmap.Canvas do begin TextOut((Width div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextWidth(Value) div 2), (Height div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextHeight(Value) div 2), Value); end; FSprite.Image.Restore //<-- Die Grafik muss neu in den Grafikspeicher geladen werden end; ![]() |
Re: [DelphiX] Phantom Sprite
Wenn ich Restore benutze ist danach das ganze Bild weg :shock:
|
Re: [DelphiX] Phantom Sprite
Kann ich vielleicht jetzt schonmal pushen ? :duck:
weil um 18:00 ist schon wieder der halbe Tag rum :| |
Re: [DelphiX] Phantom Sprite
ich hätte da eine kleine vermutung warum sich das sprit bewegt :
ich weiß jetzt zwar nicht genau ab sich das sprit ständig bewegt oder nur einmal... ich tippe darauf das es sich nur einmal bewegt und zwar:
Delphi-Quellcode:
ich weiß zwar nicht genau was da ausgerechnet wird(ich vermute du willst den button in der mitte aussrichten)
TextOut((Width div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextWidth(Value) div 2),
aber da ist der fehler... schreibe mal an der stelle direkte position angeben.... dan müste das funktionieren bzw. dann dürfte sich das bild nicht mehr bewegen... und warum du nichts siehst hängt auch damit zu sammen warscheinlich schreibst du den text an einer stelle die auserhalb des angeben canvas liegt, weißt du wie ich es meine ? z.b. du hast ein bild: 60X60 Pixel und jetzt schreibst du an 70,10 das ergbnis würdes du nicht sehen.... |
Re: [DelphiX] Phantom Sprite
1. Ich habe gemerkt das sich das Sprite sogar bewegt wenn man IRGENDWAS mit IRGENDEINEM Canvas oder nem Picture macht:
Delphi-Quellcode:
Außerdem habe ich es schon mit Textout(0,0,Value) probiert aber man sieht nix :|
procedure SetCaption(const Value: String);
var APic: TPicture; begin FCaption := Value; APic := TPicture.Create; APic.Bitmap.Canvas.Rectangle(0,0,1,1); // Sprite bewegt sich o.O end; Gruß Neutral General |
Re: [DelphiX] Phantom Sprite
hast du eigentlich die größen festgelegt ?
könntes du mir mal die exe datei senden ? evlt. installeire ich auch noch mal delphiX.... (ich finde solche sachen immer spanned) |
Re: [DelphiX] Phantom Sprite
Dank mimi bekomme ich jetzt Schrift zu sehen und es bewegt sich nichts mehr :)
Thx nochmal :) Also das ganze sieht jetzt vorerst mal so aus (bis alles klappt):
Delphi-Quellcode:
Das Problem ist das das zweite mal die erste Schrift nicht überschrieben wird.. Naja hab ich gedacht dann speicher ich den Index des Sprite-Bildes auch ab und mache es so:
procedure TSpriteButton.SetCaption(const Value: String);
begin FCaption := Value; FSprite.Image.Picture.Bitmap.Canvas.Brush.Style := bsClear; FSprite.Image.Picture.Bitmap.Canvas.Font.Color := clred; FSprite.Image.Picture.Bitmap.Canvas.TextOut(0,0,Value); FSprite.Image.Restore; end;
Delphi-Quellcode:
Lade mir immer ein frisches Bild aus der Liste und male dadrauf.
procedure TSpriteButton.SetCaption(const Value: String);
begin FCaption := Value; FSprite.Image := FSprite.Image.PictureCollection.Items[PicIndex]; FSprite.Image.Picture.Bitmap.Canvas.Brush.Style := bsClear; FSprite.Image.Picture.Bitmap.Canvas.Font.Color := clred; FSprite.Image.Picture.Bitmap.Canvas.TextOut(0,0,Value); FSprite.Image.Restore; end; Aber nix da o.O Wenn ich mit FSprite.Image...Canvas auf das Bild male wird das Bild der Imagelist auch verändert o.O Was mach ich denn da am besten? Gruß Neutral General |
Re: [DelphiX] Phantom Sprite
Zitat:
Wenn du einfach nur wie in der GDI auf ein Canvas Zeichnen möchtest dann mache einfach folgendes:
Delphi-Quellcode:
with DXDraw.Surface.Canvas do
begin Font.Color := clWhite; Brush.Style := bsClear; TextOut(0,0,'Ich bin ein kleiner Text'); Release; {Unweglassbar} end; |
Re: [DelphiX] Phantom Sprite
Ich mal es ja auch nicht auf das Bild der Imagelist sondern auf das Bild des Sprites :|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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