Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TrackBar Zoomen in einer Paintbox (https://www.delphipraxis.net/163802-trackbar-zoomen-einer-paintbox.html)

Blubbel 17. Okt 2011 10:57

AW: TrackBar Zoomen in einer Paintbox
 
gut ok... Danke schön :thumb:

Blubbel 19. Okt 2011 09:39

AW: TrackBar Zoomen in einer Paintbox
 
Gibt es noch andere Möglichkeiten zum Zoomen?

DeddyH 19. Okt 2011 09:43

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

Blubbel 19. Okt 2011 09:52

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 :?

DeddyH 19. Okt 2011 09:55

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.

Blubbel 19. Okt 2011 09:58

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:

DeddyH 19. Okt 2011 10:13

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;

Blubbel 19. Okt 2011 10:27

AW: TrackBar Zoomen in einer Paintbox
 
Alles klr danke dir! ich guck mal was ich da so machen kann:thumb:

Blubbel 21. Okt 2011 10:39

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;

DeddyH 21. Okt 2011 10:44

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 06:34 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz