Autor Beitrag
zero_cool1986
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

MS DOS ;)
D6
BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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
    { Private declarations }
  public
    { Public declarations }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Sa 27.08.05 01:24 
image1.clear;
oder
image1.canvas.clear;

oder sowas?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 27.08.05 01:58 
Man zeichnet nicht auf ein TImage, dafür ist es nicht gedacht. Zum Zeichnen ist eine Paintbox vorgesehen:
ausblenden volle Höhe Delphi-Quelltext
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
    { Private declarations }
    MyBitmap: TBitmap;
    a, b, c, d: Cardinal;
  public
    { Public declarations }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 74

Win xp
D7 ET
BeitragVerfasst: Di 30.08.05 18:22 
Um ein Bild im Image zu löschen machst du:
ausblenden Delphi-Quelltext
1:
image1.picture:=nil;					

Dann kannst was neues reinzeichnen.

..

_________________
Dieser Beitrag enthält keine Schreibfehler.
Das sind versteckte Hinweise.
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Di 30.08.05 18:56 
user profile iconTM hat folgendes geschrieben:
Um ein Bild im Image zu löschen machst du:
ausblenden Delphi-Quelltext
1:
image1.picture:=nil;					

Dann kannst was neues reinzeichnen.

..

Jep, das ist korrekt. Musste ich auch schon einigen Usern mitteilen, dass das so geht.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Johnson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Fr 19.05.06 16:55 
hallo,

ich habe ein bild mit einer prozedur ein bild eingefügt,
ausblenden 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Do 15.06.06 10:52 
user profile iconJohnson hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
a:=0;
if a=0 then 
begin



hier liegt der Fehler. Wenn du bei jedem procedure-aufruf a auf 0 setzt, dann ists egal, was der timer macht, in der if-schleife ist a immer 0 :wink:

_________________
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)