![]() |
tbitmap bewegen
tag leutz,
alos ich hab jetzt schon ziemlich lang gesucht un auch sachen gefunden... aber bei mir funzt des alles ned so ganz, oder ich bin einfach zu blöd dafür.
Delphi-Quellcode:
also wenn ich den ersten button drück malt er was er soll, aber wenn ich dann den andren drück passiert gar nix. könnt ihr vllt mal erklären was da bei bitblt so alles in den klammern steht. was zb die werte wo jetzt a und b steht sind.
procedure TForm1.Button1Click(Sender: TObject);
begin a:=150; b:=150; bmp[0]:= tbitmap.Create; bmp[0].LoadFromFile('b_rot.bmp'); bmp[0].TransparentColor:=clblue; bmp[0].Transparent:=true; bmp[0].Width:=50; bmp[0].Height:=50; canvas.Draw(150,150,bmp[0]); end; procedure TForm1.Button2Click(Sender: TObject); begin a:=a+5; b:=b+10; BitBlt(pb.Canvas.Handle,a,b,bmp[0].width,bmp[0].Height,bmp[0].Canvas.Handle,a,b,SrcCopy); end; thx |
Re: tbitmap bewegen
Am besten erstmal in der Delphi-Hilfe nachschauen ...
|
Re: tbitmap bewegen
... oder einfach wieder Draw() nutzen anstatt BitBlt()
|
Re: tbitmap bewegen
ich will ja ber dass es verschoben wird. wenn ich wieder draw hernehm
dann erstellt er ja n neues un des alte bleibt da. dann müsstet ihr mir noch sagen wie ich des alte wieder lösch. mit free?? |
Re: tbitmap bewegen
so, habs jetzt n paar tage ruhen lassen uns dann heute nochmal probiert.
also des verschieben geht ja, nur is es kein richtiges verschiebn, sonder er kopiert des image ja nur an ne andre stelle. aber eigentlich soll der des verschieben... was muss ich dann noch machen, dass der des source image löscht,übermalt, was auch immer. hauptsache es is dann nur noch 1 mal da. bin dankbar für jede antwort. greetz juli |
Re: tbitmap bewegen
Zitat:
![]() |
Re: tbitmap bewegen
ok, wenn ich jetzt nich ends der noob in delphi wär
könnt ich des vllt hinkriegn... was muss ich in die klammer schreiben?? die hilfe hilft mir nicht besonders viel ok, habs dann auch rausgefunden, THX jetzt hab ich aber n image als hintergrundbild, un des löscht der ja dann auch. wär gut wenn sich des vermeiden lassen könnte. geht des?? |
Re: tbitmap bewegen
Du könntest einen kompletten Paint-Algorithmus schreiben so wie bei "professionellen" und auch 3-D-Spielen:
Für jede Änderung einfach alles neu zeichnen, d.h.
Delphi-Quellcode:
procedure paint;
begin Hintergrund ablegen; Image ablegen; end; |
Re: tbitmap bewegen
is des nich viel zu aufwändig?? also von der resourcen her??
mir is da grad aufgefallen, dass ich auch einfach statt bitblt herzunehmen, die canvas leeren könnt un dann alles einfach an ner neuen stelle zeichne... is doch theoretisch des gleiche. oder?? |
Re: tbitmap bewegen
Wenn du es mit bitblt machst nicht.
Die Paint Procedure von der VCL macht es ja so und so, wenn du eine neue Komponente drüberschiebst oder so. Und da auch bei allen modernen Spielen diese Methode gewählt wird... Du darfst natürlich nicht jedes Mal das Bild neu von der Festplatte laden ;) Einfach in der form.create in eine bitmap-Variable laden und immer bei Gebrauch verwenden ;) //edit: Du könntest natürlich auch an der Stelle, wo das Bild zuerst war, mit Bitblt irgendwie (sie Delphihilfe) den entsprechenden Teil des Hintergrundbildes drüberkopieren und dann das Bitmap an der neuen Position ablegen, aber wenn du was etwas komplexeres machst (mehrere Bitmaps ;)), läuft dir das alles ziemlich schnell aus den Rudern. |
Re: tbitmap bewegen
hmmm, also ich weiss eigentlich ned genau wo ich die übermalfunktion :lol:
hinschreibn soll. bis jetzt sieht des so aus. aber ich denk mal dass da auch so noch einiges zu verbessern is. zb des mit source and dest bei bitblt.
Delphi-Quellcode:
einfach mal comment dazu
procedure TForm1.Button1Click(Sender: TObject);
begin a:=150; b:=150; ball[0]:= tbitmap.Create; ball[0].LoadFromFile('b_lemon.bmp'); ball[0].TransparentColor:=clwhite; ball[0].Transparent:=true; ball[0].Width:=50; ball[0].Height:=50; paintbox1.canvas.Draw(150,150,ball[0]); end; procedure TForm1.Button2Click(Sender: TObject); begin a:=a+10; b:=b+20; BitBlt(paintbox1.canvas.handle,a,b,50,50,canvas.handle,a-10,b-20,srccopy) end; THX |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 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 by Thomas Breitkreuz