Entwickler-Ecke

Multimedia / Grafik - Zeichnen in mehreren Ebenen


Hack Webber - Di 04.02.03 15:31
Titel: Zeichnen in mehreren Ebenen
Hallo zusammen,

ich versuche verzweifelt mehrere Ebenen zu zeichen. Da ich an einen oszilloskop programm arbeite, würde ich gerne das Raster in der ersten ebene zeichenen und das signal in der zweiten. Wenn ich nun das signal entferne möchte ich einen unversehrten Hintergrund haben ohne ihn neu zeichen zu müßen. Ich möchte aber kein DirectX benutzen.

Kennt jemand eine Möglichkeit?


Aya - Di 04.02.03 16:19

Hi,

nimm einfach 2 TImage's... :)
Die packste genau übereinander und machst "Transparent = true"

Dann stellste als Transparent Color noch Weiß (oder was du willst) ein, und dann sollte es gehen...

Au'revoir,
Aya


Hack Webber - Di 04.02.03 16:40
Titel: Das geht so nicht
Du meinst

Quelltext
1:
Image2.Picture.Bitmap.TransparentColor := clWhite;                    

es wird immernoch weiß angezeigt und es flackert wie sau

Moderiert von user profile iconTino: Code-Tags hinzugefügt.


Aya - Di 04.02.03 16:47

gegen das Flackern mach mal im OnCreate:


Quelltext
1:
Form1.DoubleBuffered.=True;                    


und für das Transparent...


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  with Image1.Picture.Bitmap do begin
    Transparent:=true;
    TransparentColor:=clWhite;
    Canvas.Brush.Color:=clWhite;
    Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));
    Canvas.Pen.Color:=clBlack;
    Canvas.LineTo(100,100);
  end;


Das sollte gehen.

Au'revoir,
Aya~

PS: Du mußt allerdings ein TBitmap geladen haben. mit JPEG etc geht's net


Hack Webber - Di 04.02.03 16:58

Es ist das zweit Image zwar transparent.
Aber wenn ich darauf was zeichne ist das garnicht zu sehn.
Auch nicht gerade gut ;-)


Hack Webber - Di 04.02.03 17:00

mein onCreate sieht so aus :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.FormCreate(Sender: TObject);
begin
     Form1.DoubleBuffered:=True;
     
     Image1.Picture.Bitmap.Canvas.Brush.Color := clRed;
     Image1.Picture.Bitmap.Canvas.FillRect(Rect(0, 0, Image1.Width, Image1.Height));

     Image2.Picture.Bitmap.Transparent := True;
     Image2.Picture.Bitmap.TransparentColor := clWhite;
     Image2.Picture.Bitmap.Canvas.Brush.Color := clWhite;
     Image2.Picture.Bitmap.Canvas.FillRect(Rect(0,0,Image2.Width,Image2.Height));

     Image2.Picture.Bitmap.Canvas.Brush.Color := clBlack;
     Image2.Picture.Bitmap.Canvas.Rectangle(PosX, 20, PosX + 10, 30);     

     PosX := 20;

     Application.OnIdle := Workloop;
end;


Moderiert von user profile iconTino: Code-Tags hinzugefügt.


Aya - Di 04.02.03 17:08

Hi,

wie gesagt... du mußt erstmal ein Bitmap laden... :)
Image1.Picture.Bitmap.LoadFromFile()

Ne andere lösung dafür weiß ich leider nich ^^

Au'revoir,
Aya


Tino - Di 04.02.03 17:11

@Hack Webber: Bitte verwende in Zukunft die Code-Tags [http://www.delphi-forum.de/faq.php?mode=bbcode] um Deinen Sourcecode. Dadurch kann man Deine Postings besser lesen!

Gruß
TINO


Hack Webber - Di 04.02.03 17:11

Ich glaub ich habs. Danke mal. Ich hoffe das das klappt.
Falls jemand noch ne Lösung hat. Bitte melden.


Simon Joker - Mi 05.02.03 11:21

Hi

ihr habt vergessen der Bitmap zusagen wie gross sie denn nun sein soll!

Tut's einfach so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
...

Image1.Picture.Bitmap.Canvas.Brush.Color := clRed;
  //Füge das noch ein !!!!
  Image1.Picture.Bitmap.Width:=Image1.Width;
  Image1.Picture.Bitmap.Height:=Image1.Height;
  //-----

  Image2.Picture.Bitmap.Transparent := True;
  Image2.Picture.Bitmap.TransparentColor := clWhite;
  Image2.Picture.Bitmap.Canvas.Brush.Color := clWhite;
  //Füge das noch ein !!!!
  Image2.Picture.Bitmap.Width:=Image2.Width;
  Image2.Picture.Bitmap.Height:=Image2.Height;
  //-----
  //Zum Testen
  Image2.Picture.Bitmap.Canvas.MoveTo(0,0);
  Image2.Picture.Bitmap.Canvas.LineTo(Image2.Width,Image2.Height);
...


Bei mir funktioniert es nur wenn das Image auf transparent gesetzt ist. Sonst wird das automatisch wieder auf transparent = false gesetzt.