| Autor |
Beitrag |
zero_cool1986
      
Beiträge: 95
MS DOS ;)
D6
|
Verfasst: Sa 27.08.05 00:54
hi, ich habe einen timer und der setzt die werte für image1.canvas.elipse.(a,b,c,d); jede sekunde neu das Problem er löscht das alte bild nicht der code: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Image1: TImage; Button1: TButton; Image2: TImage; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1; a:integer; b:integer; c:integer; d:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin image1.canvas.Ellipse(0,b,c,d);
end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Image2.Top:=Image2.Top-2;
b:=b+10; c:=c+10; d:=d+10; Button1.click; end;
procedure TForm1.FormCreate(Sender: TObject); begin a:=0; b:=50; c:=200; d:=200; end;
end. |
|
|
en!gma
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Sa 27.08.05 01:24
image1.clear;
oder
image1.canvas.clear;
oder sowas?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 27.08.05 01:58
Man zeichnet nicht auf ein TImage, dafür ist es nicht gedacht. Zum Zeichnen ist eine Paintbox vorgesehen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
| type TForm1 = class(TForm) PaintBox1: TPaintBox; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure PaintBox1Paint(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormDestroy(Sender: TObject); private MyBitmap: TBitmap; a, b, c, d: Cardinal; public end;
var Form1 : TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin MyBitmap := TBitmap.Create; MyBitmap.Width := Paintbox1.Width; MyBitmap.Height := paintbox1.Height;
a := 0; b := 50; c := 200; d := 200; end;
procedure TForm1.PaintBox1Paint(Sender: TObject); begin BitBlt(Paintbox1.Canvas.Handle, 0, 0, Paintbox1.Width, Paintbox1.Height, MyBitmap.Canvas.Handle, 0, 0, SRCCOPY); end;
procedure TForm1.Timer1Timer(Sender: TObject); var rect: TRect; begin MyBitmap.Canvas.FillRect(MyBitmap.Canvas.ClipRect); MyBitmap.Canvas.Ellipse(a, b, c, d); Inc(b, 10); Inc(c, 10); Inc(d, 10); rect := Paintbox1.BoundsRect; InvalidateRect(Handle, @rect, False); end;
procedure TForm1.FormDestroy(Sender: TObject); begin FreeAndNil(MyBitmap); end; |
Man zeichnet auf ein Bitmap im Speicher und kopiert es bei Bedarf auf den Canvas. Das kann auch der Canvas der Form sein, es muss keine Paintbox sein.
|
|
TM
      
Beiträge: 74
Win xp
D7 ET
|
Verfasst: Di 30.08.05 18:22
Um ein Bild im Image zu löschen machst du:
Delphi-Quelltext
Dann kannst was neues reinzeichnen.
..
_________________ Dieser Beitrag enthält keine Schreibfehler.
Das sind versteckte Hinweise.
|
|
Amateur
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: Di 30.08.05 18:39
refresh oder repaint... aber irgendwie versteh ich die frage net so ganz...
du hast nen btimap zur laufzeit erzeugt und da malste rein und das wird dann auf dem form gezeichnet? und du willst das bitmap wieder frei von was gezeichnetem machen?
probier ma befehle wie refresh,repaint,clear...
könnten ja funzen....
_________________ "Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Di 30.08.05 18:56
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Johnson
      
Beiträge: 30
|
Verfasst: Fr 19.05.06 16:55
hallo,
ich habe ein bild mit einer prozedur ein bild eingefügt,
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Timer1Timer(Sender: TObject); begin Canvas.draw(x1,0,Bild); Canvas.draw(x2,0,Bild); end;
procedure TForm1.FormCreate(Sender: TObject); begin [...] Bild:=TBitmap.Create; Bild.LoadFromFile('erstes_bild.bmp'); x1:=0; Form1.width:=Bild.Width; x2:=Form1.Width; end; |
und dann hab ich nen timer, der nach 10 sekunden eine neue form aufruft.
in dieser 2.form ist auch ein timer, der nach 10 sekunden diese 2.form wieder schließen soll. (das ist nur eine vereinfachte übung zu meinem hauptprogramm. da läuft normalerweise noch mehr ab.)
nachdem die 2.form wieder geschlossen ist, soll das hintergrundbild gelöscht werden und dafür nen neues erstellt werden.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.FormCreate(Sender: TObject); begin a:=0; if a=0 then begin Bild:=TBitmap.Create; Bild.LoadFromFile('erstes_bild.bmp'); x1:=0; Form1.width:=Bild.Width; x2:=Form1.Width; end; if a=1 then begin bild.Destroy; Bild:=TBitmap.Create; Bild.LoadFromFile('2._bild.bmp'); x1:=0; Form1.width:=Bild.Width; x2:=Form1.Width; end; |
die if schleife ist dazu da, eben die verschiedenen bilder zuerstellen. dafür wird in dem timer von form2 das a immer erhöht (inc(a)).
warum erstellt der kein neues bild?
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 15.06.06 10:52
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
|