![]() |
Delphi-Version: 5
TrackBar Zoomen in einer Paintbox
Hallo und guten Morgen,
Ich hoffe ich nerve euch nicht langsam aber jetzt habe ich ein neues Problem, wo ich im Internet nicht so recht was nützliches gefunden habe. Ich soll eine Trackbar zum Zoomes einfügen. Habe auch schon einiges versucht, es klappt aber nichts.
Delphi-Quellcode:
Bisher habe ich sowas versucht.
rocedure TForm1.TrackBar1Change(Sender: TObject);
begin case TrackBar1.Position of 0: begin PaintBox1.Width:= 100 + TrackBar1.Position; end; 1: begin PaintBox1.Width:= 200 + TrackBar1.Position; end; end; Bitte um Hilfe ;) Danke euch schon mal |
AW: TrackBar Zoomen in einer Paintbox
Du setzt ja auch nur die Breite neu. Die Höhe fehlt, und nach dem Neusetzen musst Du auch neu zeichnen.
|
AW: TrackBar Zoomen in einer Paintbox
Geändert hat sich was... ich rätsel noch ma ne runde auf jeden fall gehts einiger maßen.
WEnn ich nicht weiter komme schreib ich. Danke |
AW: TrackBar Zoomen in einer Paintbox
Prinzipiell ist das mit ein wenig Prozentrechnung einigermaßen einfach zu realisieren. Beispiel mit einer PaintBox (align = alClient):
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
const Prozent = 95; var Hoehe, Breite, Links, Oben: integer; pb: TPaintBox; begin pb := Sender as TPaintBox; pb.Canvas.Pen.Color := clRed; pb.Canvas.Pen.Width := 3; //Höhe und Breite der Ellipse sollen jeweils 95% des Clientbereichs betragen Hoehe := trunc(pb.ClientHeight / 100 * Prozent); Breite := trunc(pb.ClientWidth / 100 * Prozent); Links := trunc((pb.ClientWidth - Breite) / 2); Oben := trunc((pb.ClientHeight - Hoehe) / 2); pb.Canvas.Ellipse(Links, Oben, Links + Breite, Oben + Hoehe); end; |
AW: TrackBar Zoomen in einer Paintbox
hmmm... sieht ja ganz gut aus... sollen es aber mit einer Trackbar realisieren. Also ganz hinter dem geheimniss bin ich noch nicht gekommen aber es wird schon mal größer... naja gezoomt wirds nicht gerade aber naja ich probiere weiter
|
AW: TrackBar Zoomen in einer Paintbox
Ich reagiere lediglich auf Änderungen der Größe der PaintBox. Ob das nun durch Ändern der Formulargröße oder per Code mittels TrackBar geschieht, spielt doch keine Rolle.
|
AW: TrackBar Zoomen in einer Paintbox
Ja gut denn versuche ich mal mein bestes
|
AW: TrackBar Zoomen in einer Paintbox
Liste der Anhänge anzeigen (Anzahl: 2)
Vielleicht kannst Du mit dieser Anregung was anfangen ...
|
AW: TrackBar Zoomen in einer Paintbox
Wenn ich den Zeiger von der Trackbar wieder zurück schiebe, wird es statt Normal noch kleiner
|
AW: TrackBar Zoomen in einer Paintbox
Ist ein Demo um zu zeigen dass vergrößern und verkleinern geht, Du kannst die Parameter anpassen wie Du sie brauchst ....
|
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.
|
AW: TrackBar Zoomen in einer Paintbox
also in der Paintbox selber (Also wenn ich doppelklicke) hab ich nichts gemacht... läuft alles "extern"
|
AW: TrackBar Zoomen in einer Paintbox
hab mich geirrt... ist doch drin und auf OnPaint
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin DrawGrid(PaintBox1.Canvas, GetScaleValue(TrackBar1.Position)); end; procedure TForm1.TrackBar1Change(Sender: TObject); begin DrawGrid(PaintBox1.Canvas, GetScaleValue(TrackBar1.Position)); end; |
AW: TrackBar Zoomen in einer Paintbox
Aber den Graphen scheinst Du ja nicht im OnPaint zu zeichnen. Wenn, dann alles an der selben Stelle, sonst macht es ja keinen Sinn.
|
AW: TrackBar Zoomen in einer Paintbox
na doch hab ja den graphen als extra prozedur dort drin...
|
AW: TrackBar Zoomen in einer Paintbox
also der Graph wird in einer extra prozedur gezeichnet die im OnPaint mit drin ist. Die Graphen zeichnen sich wenn man die werte ins edit einträgt und einen Button klickt.
|
AW: TrackBar Zoomen in einer Paintbox
Wird in DrawGrid der Graph gezeichnet? Falls ja, dann verstehe ich Dein Problem nicht.
|
AW: TrackBar Zoomen in einer Paintbox
Liste der Anhänge anzeigen (Anzahl: 2)
Kann es sein dass Du sowas versuchst?
|
AW: TrackBar Zoomen in einer Paintbox
ja genau DrawGrid is das koordinatensystem. Also der graph wird ja gezeichnet wenn man den button klickt. und wenn ich es DANACH zommen will, verschwindet der und ich muss ihn nochmal zeichnen lassen
|
AW: TrackBar Zoomen in einer Paintbox
@bummi
ja so ähnlich nur das die Parabel oder graph der gezeichnet wurde ja per knopfdruck ist und beim zoom verschwindet |
AW: TrackBar Zoomen in einer Paintbox
Ich fürchte ich kann Dir überhaupt nicht mehr folgen.
Am besten Du packst Dein komplettes Projekt mal in ein Zip, legst es hoch und beschreibst was ganau wie funktionieren soll, bzw. nicht so funktioniert wie es soll...... |
AW: TrackBar Zoomen in einer Paintbox
Das Problem ist doch anscheinend, dass auf ButtonClick auf eine Zeichenfläche gemalt wird. Sobald diese Zeichenfläche aktualisiert wird, sind die Änderungen natürlich verschwunden. Daher kann es nur so funktionieren: im OnPaint etwas in der Art
- zeichne Koordinatensystem - wenn Graph vorhanden, zeichne Graphen schreiben und im ButtonClick - definiere Graphen - neu zeichnen Fertig ist die Laube. Man kann das natürlich auch auf ein MetaFile oder meinetwegen Bitmap zeichnen und das dann im OnPaint aktualisieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 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