Autor Beitrag
rafi@work
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 147

Win2000 Prof
D7 Enterprise
BeitragVerfasst: Mi 01.12.04 19:00 
Weiss jemand wie ich folgende Zeichnung darstellen kann, ohne das diese flackert?? Ich habe mich auch schon informiert und gelesen, dass es besser wäre das ganze in ein Bitmap zu packen, aber ich raff das ganze irgendwie nicht, und ich muss dringend eine Lösung haben.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
//-------------------------------Linie von Punkt A zu Punkt B--------------------------------------------------

     canvas.Pen.Width := 2;
     canvas.MoveTo(Shape3.Left+round(shape3.Width/2),shape3.Top+round(shape3.Height/2));
     canvas.LineTo(shape1.Left+round(shape1.Width/2),shape1.Top+round(shape1.Height/2));

//--------------------------Linie von Kreismittelpunkt zu Punkt A----------------------------------------------

     canvas.MoveTo(shape2.Left+round(shape2.Width/2),shape2.Top+round(shape2.Height/2));
     canvas.LineTo(shape1.Left+round(shape1.Width/2),shape1.Top+round(shape1.Height/2));


Kann mir jemand helfen?

Grüsse
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 01.12.04 19:12 
im oncreate:
ausblenden Delphi-Quelltext
1:
form1.doublebuffered:=true					
greg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119

Windows2000, WindowsXP
D5 Prof
BeitragVerfasst: Mi 01.12.04 19:14 
Hallo Rafi,

ich hab da mit Delphi bzw. mit Windows auch noch keine Erfahrung. Als ich sowas gemacht habe waren die Computer generell am flackern aber es läuft wohl darauf hinaus, das Objekt erst sichtbar zu machen, wenn das Zeichnen abgeschlossen ist oder aber in ein 'unsichtbares' Objekt zu zeichnen und dann am Stück auf die Canvas zu kopieren. So ist das wohl auch mit dem Bitmap gemeint. Du erzeugst ein 'unsichtbares' Bitmap, zeichnest dort und kopierst den gesamten Inhalt dann am Stück auf Deine Canvas.

Gruß
Gregor
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mi 01.12.04 19:14 
Mhhh, ich denke, die Suche spuckt da viele Tipps aus :evil:.
Aber nagut, hier ein kurzes Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;
  with Bitmap do begin
    try
      Height := 100;  //Größe setzen
      Width := 100;
      with Canvas do
        //Jetzt mal drauf
      //So nun auf den Orginal-Canvas "kopieren"
      IrgendeinCanvas.Draw(00, Bitmap);
    finally
      Bitmap.Free;
    end;
  end;
Nimm dafür am besten eine PaintBox und reagiere auf OnPaint. Ansonsten empfiehlt es sich eine globale Variable zu benutzen, wenn oft gezeichnet werden muss. Außerdem geht es noch einen Tick schneller mit BitBlt anstatt Draw.

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
rafi@work Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 147

Win2000 Prof
D7 Enterprise
BeitragVerfasst: Mi 01.12.04 19:16 
Zitat:
form1.doublebuffered:=true


das habe ich schon eingebaut, somit flackern bei mir dann die Shapes bei einer Bewegung nicht mehr, aber die zwei Striche (siehe Code oben) flackern so immer noch :(
rafi@work Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 147

Win2000 Prof
D7 Enterprise
BeitragVerfasst: Mi 01.12.04 19:21 
@ greg, danke für deine ausführliche Erklärung :)
@ wulfskin, werde mir mal deinen Code näher anschauen, und versuche es hinkriege, melde mich wieder!

P.S. Soo gehe jetzt aber zuerst etwas essen, mein Magen ruft nach Futter ;)
P.P.S. werde mich ev. morgen melden, jetzt bin ich zu müde um noch was hinzukriegen..

Gruss



Moderiert von user profile iconUGrohne: Postings gemerged.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 01.12.04 20:15 
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:
procedure TForm1.FormCreate(Sender: TObject);
begin
  { Bitamp erzeugen }
  bmp := TBitmap.Create;
  { Hintergrundfarbe únd Stift dicke }
  bmp.Canvas.Brush.Color := clRed;
  bmp.Canvas.Pen.Width := 3;
  { Größe festlegen }
  bmp.Width := Paintbox1.Width;
  bmp.Height := Paintbox1.Height;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  { Rechteck zeichnen }
  bmp.Canvas.Rectangle(5,57575);
  { OnPaint der Paintbox auslösen }
  PaintBox1.Repaint;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  { Bitmap freigeben }
  bmp.Free;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  { bei Bedarf neu zeichnen }
  BitBlt(PaintBox1.Canvas.Handle, 00, bmp.Width, bmp.Height, bmp.Canvas.Handle,
    00, SrcCopy);
  { ist schon rot, da wir es in OnCreate der Form rot gemacht haben }
end;