![]() |
AW: TrackBar Zoomen in einer Paintbox
gut ok... Danke schön :thumb:
|
AW: TrackBar Zoomen in einer Paintbox
Gibt es noch andere Möglichkeiten zum Zoomen?
|
AW: TrackBar Zoomen in einer Paintbox
Was genau willst Du denn zoomen? Etwas Selbstgezeichnetes oder eine bestehende Pixelgrafik? Ersteres geht wie gezeigt mit Prozentrechnung oder indem man Vektorgrafik benutzt (TMetafile, TMetaFileCanvas).
|
AW: TrackBar Zoomen in einer Paintbox
Also, ich habe ja die Canvas, auf der schon das Koordinatensystem gezeichnet ist.
Jetzt möchte ich ja dass die komplette Canvas gezoomt werden kann... also nicht nur größer auch kleiner. Wenn die Parabel auch schon darauf gezeichnet wurde, soll auch die mit größer/kleiner gemacht werden können. Also, naja.... mehr oder weniger ein selbergezeichnetes... denk ich :? |
AW: TrackBar Zoomen in einer Paintbox
Was spricht denn gegen ein komplettes Neuzeichnen? Wenn die Berechnungen nicht zu langwierig sind sollte das ja kein Problem sein, anders habe ich das in meinem Beispiel ja auch nicht gemacht.
|
AW: TrackBar Zoomen in einer Paintbox
Also bau ich noch mit ein, dass er den Graphen, der auf "Knopfdruck" gezeichnet wird und das Koordinatensystem neu gezeichnet werden.. hmm.. ok ich versuchs auf jeden fall mal.
Mal gucken wie weit ich komme.:wink: |
AW: TrackBar Zoomen in einer Paintbox
Wie schon gesagt, Du kannst natürlich auch eine Vektorgrafik verwenden. Beispiel:
Delphi-Quellcode:
type
TfrmMetaFileDemo = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); private { Private-Deklarationen } FMetaFile: TMetaFile; public { Public-Deklarationen } end; ... procedure TfrmMetaFileDemo.FormCreate(Sender: TObject); var mcv: TMetaFileCanvas; begin FMetaFile := TMetaFile.Create; FMetaFile.Width := ClientWidth; FMetaFile.Height := ClientHeight; mcv := TMetaFileCanvas.Create(FMetaFile, Canvas.Handle); try mcv.Pen.Style := psClear; mcv.Brush.Color := clRed; mcv.Ellipse(10, 10, 100, 100); mcv.Brush.Color := clBlue; mcv.FillRect(Rect(50, 50, 150, 150)); mcv.Font.Name := 'Arial'; mcv.Font.Size := 20; mcv.Brush.Style := bsClear; mcv.TextOut(20, 20, 'Hallo MetaFile'); finally mcv.Free; end; DoubleBuffered := true; end; procedure TfrmMetaFileDemo.FormDestroy(Sender: TObject); begin FMetaFile.Free; end; procedure TfrmMetaFileDemo.FormPaint(Sender: TObject); begin Canvas.StretchDraw(ClientRect, FMetaFile); end; procedure TfrmMetaFileDemo.FormResize(Sender: TObject); begin Invalidate; end; |
AW: TrackBar Zoomen in einer Paintbox
Alles klr danke dir! ich guck mal was ich da so machen kann:thumb:
|
AW: TrackBar Zoomen in einer Paintbox
mein Zoom funktioniert aber wenn ein Graph vorher gezeichnet wurde verschwindet er... was kann ich da machen? habe schon mal was vorbereitet...
Delphi-Quellcode:
procedure TForm1.RepaintFunction;
begin if btn_Zeichne.??? then begin end; if btn_Zeichne1.??? then begin end; end; Also mein Zoom Funktioniert so:
Delphi-Quellcode:
procedure TForm1.DrawGrid(ACanvas: TCanvas; AScaleFactor: Integer);
var lPoint: TPoint; lCount, lScale, i: Integer; begin ACanvas.Brush.Style:= bsSolid; ACanvas.Brush.Color:= clWhite; ACanvas.FillRect(ACanvas.ClipRect); //X-Achse ACanvas.TextOut(0,0, RectToStr(ACanvas.ClipRect)); ACanvas.MoveTo(0, GetHeight(ACanvas.ClipRect) div 2); //Graph ACanvas.LineTo(GetWidth(ACanvas.ClipRect), GetHeight(ACanvas.ClipRect) div 2); //Mittelpunkt ausrechnen lPoint:= GetCenter(ACanvas.ClipRect); //Scalierungswert festlegen //Mittelpunkt bis Rechts - X-Achse i:= lPoint.X; lCount:= 0; lScale:= AScaleFactor; while i < ACanvas.ClipRect.Right do begin inc(i,lScale); inc(lCount,1); DrawGridCaption(ACanvas, Point(i, lPoint.Y), 0, IntToStr(lCount)); end; //Mittelpunkt bis Links der X-Achse i:= lPoint.X; lScale:= AScaleFactor; lCount:= 0; while i > ACanvas.ClipRect.Left do begin dec(i, lScale); dec(lCount, 1); DrawGridCaption(ACanvas, Point(i, lPoint.Y), 2, IntToStr(lCount)); end; //Y-Achse Von Mittelpunkt nach unten lPoint:= GetCenter(ACanvas.Cliprect); lScale:= AScaleFactor; i:=lPoint.Y; lCount:= 0; while i < ACanvas.ClipRect.Bottom do begin inc(i, lScale); inc(lCount, -1); DrawGridCaption(ACanvas, Point(lPoint.X, i), 1, IntToStr(lCount)); end; //Y-Achse von Mittelpunkt nach oben lPoint:= GetCenter(ACanvas.Cliprect); lScale:= AScaleFactor; i:=lPoint.Y; lCount:= 0; while i > ACanvas.ClipRect.Top do begin dec(i, lScale); dec(lCount, -1); DrawGridCaption(ACanvas, Point(lPoint.X, i), 3, IntToStr(lCount)); end; //Y-Achse ACanvas.MoveTo(GetWidth(ACanvas.ClipRect) div 2, 0); //Graph ACanvas.LineTo(GetWidth(ACanvas.ClipRect) div 2, GetHeight(ACanvas.ClipRect)); end; ..... function GetScaleValue(APos: Integer): Integer; begin Result:= ((APos + 10) + 1) * 10; end; |
AW: TrackBar Zoomen in einer Paintbox
Wann zeichnest Du denn? Anscheinend nicht im OnPaint, das genau dafür gedacht ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz