Autor Beitrag
Lurnon
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 33



BeitragVerfasst: Do 31.08.06 09:07 
Also ich schildere kurz den Ablauf:
zuerst kreiere ich ein bitmap mit r1.create (r1 ist der Varibalenname),
dann lasse ich dieses Zeichnen mit dem draw Befehl, wie kann ich das Bitmap nun wieder vom Bildschirm entfernen ? .destroy funktionierte (erweckte zumindest den Anscheinen) nicht, also wie funktioniert es?

Danke im Vorraus,
Lurnon
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 31.08.06 09:28 
Moin und :welcome: im Forum!

Ganz einfach und zwei Methoden:

a) Du löst ein Neuzeichnen des "Bildschirms" aus
b) Du merkst dir vor dem Zeichnen den Inhalt des "Bildschirms" und stellst ihn wieder her

Genaueres, wenn du mal erklärst, was denn "Bildschirm" bei dir ist. ;)

Etwas mehr Code könnte sicher auch nicht schaden. :?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Lurnon Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 33



BeitragVerfasst: Sa 02.09.06 11:26 
Hier der gewünschte Quellcode:
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:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
unit editor;

interface

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

type
  TForm1 = class(TForm)
    gitter: TImage;
    front: TImage;
    links: TImage;
    rueck: TImage;
    rechts: TImage;
    mauer: TImage;
    boden: TImage;
    procedure frontClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure rueckClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  spielfeld:array[1..30,1..20] of string[3];
  r1,r2,r3,r4: TBitMap;
  aktiv:boolean;
  ausgew:string[3];
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
  begin
  aktiv:=false;
  end;

procedure TForm1.frontClick(Sender: TObject);
begin
  if aktiv=false then
    begin
        r1:=TBitMap.create;
        r1.LoadFromFile('C:\Delphi\laby1\quer1.bmp');
        canvas.draw(720,0,r1);
        r2:=TBitMap.create;
        r2.LoadFromFile('C:\Delphi\laby1\quer2.bmp');
        canvas.draw(720,23,r2);
        r3:=TBitMap.create;
        r3.LoadFromFile('C:\Delphi\laby1\langs1.bmp');
        canvas.draw(720,0,r3);
        r4:=TBitMap.create;
        r4.LoadFromFile('C:\Delphi\laby1\langs2.bmp');
        canvas.draw(743,0,r4);
        aktiv:=true;
        ausgew:='hun';
      end
    else
      begin
        r1:=TBitMap.create;
        r1.LoadFromFile('C:\Delphi\laby1\quer1.bmp');
        canvas.draw(720,0,r1);
        r2:=TBitMap.create;
        r2.LoadFromFile('C:\Delphi\laby1\quer2.bmp');
        canvas.draw(720,23,r2);
        r3:=TBitMap.create;
        r3.LoadFromFile('C:\Delphi\laby1\langs1.bmp');
        canvas.draw(720,0,r3);
        r4:=TBitMap.create;
        r4.LoadFromFile('C:\Delphi\laby1\langs2.bmp');
        canvas.draw(743,0,r4);
        aktiv:=true;
        ausgew:='hun';
      end;
end;

procedure TForm1.rueckClick(Sender: TObject);
begin
  if aktiv=false then
    begin
        r1:=TBitMap.create;
        r1.LoadFromFile('C:\Delphi\laby1\quer1.bmp');
        canvas.draw(744,0,r1);
        r2:=TBitMap.create;
        r2.LoadFromFile('C:\Delphi\laby1\quer2.bmp');
        canvas.draw(744,23,r2);
        r3:=TBitMap.create;
        r3.LoadFromFile('C:\Delphi\laby1\langs1.bmp');
        canvas.draw(744,0,r3);
        r4:=TBitMap.create;
        r4.LoadFromFile('C:\Delphi\laby1\langs2.bmp');
        canvas.draw(767,0,r4);
        aktiv:=true;
        ausgew:='hun';
      end
    else
      begin
        r1:=TBitMap.create;
        r1.LoadFromFile('C:\Delphi\laby1\quer1.bmp');
        canvas.draw(744,0,r1);
        r2:=TBitMap.create;
        r2.LoadFromFile('C:\Delphi\laby1\quer2.bmp');
        canvas.draw(744,23,r2);
        r3:=TBitMap.create;
        r3.LoadFromFile('C:\Delphi\laby1\langs1.bmp');
        canvas.draw(744,0,r3);
        r4:=TBitMap.create;
        r4.LoadFromFile('C:\Delphi\laby1\langs2.bmp');
        canvas.draw(767,0,r4);
        aktiv:=true;
        ausgew:='hob';
      end;
end;

end.



So mir geht es jetzt darum, dass ich in den beiden else Anweisungen der Bedingungen die Grafiken r1 bis r4 löschen kann, sodass auf der Form (im fertigen Programm), dann nicht mehr zu sehen sind.

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
edit: Danke für das hinzufügen der Delphi-tags. Jetzt fehlt bloß noch ne Antwort
Bääääär
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Sa 02.09.06 20:22 
Grundsätzlich gilt: Man kann ein gezeichnetes Bitmap nicht "löschen". Mann kann es nur "übermalen".

Was ist denn sonst noch auf der Form? Nur der Hintergrund? Dann zeichne einfach ein Rechteck mit der Hintergrundfarbe über die Bitmaps.
Ansonsten musst du das, was vorher das war wieder drüber zeichnen. Also z.B. vorher einen Screenshot machen und speichern, und die Stellen, wo jetzt deine Bitmaps sind mit den Pixeln, die vorher da waren überzeichnen. (wissde wie? =))

The Bääääär
Lurnon Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 33



BeitragVerfasst: Sa 02.09.06 20:59 
Ok, danke für die Hilfe euch beiden. Da ich unter den neu gezeichneten Elementen kleine Grafiken habe, ist das mit dem überzeichenen relativ simpel bei mir. Trotzdem würde mich eine Umsetzung nach der Beschreibung von Bäääär interessieren, also wie kann ich eine solche Variante umsetzen?
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: So 03.09.06 17:00 
eine andere Möglichkeit wäre evtl. das form (das control) sich neu zeichnen zu lassen (mit invalidate)...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
begin
  canvas.Rectangle(10,10,60,30);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  invalidate;
end;


dies löscht natürlich alles, was auf dem Canvas manuell gemalt wurde und im onPaint nicht neu gemalt wird.

von daher würde ich vorschlagen deinen zeichen-code nach onPaint zu verlagern und flags abzurufen. Diese flags setzt du in den buttonClick-Events gefolgt von dem Invalidate.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
type
  TForm1 = class(TForm)
...
  private
    { Private-Deklarationen }
    drawrect:boolean;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
  drawrect:=not drawrect;
  invalidate;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  if drawrect then
    canvas.Rectangle(10,10,60,30);
end;


Gruß Frank

_________________
EB FE (die wahrscheinlich kürzeste Endlosschleife der Welt :) )
BA 01 00 00 00 52 EB 09 BB 4D 11 86 7C FF D3 EB 0D E8 F2 FF FF FF 63 68 61 72 6D 61 70 00 C3