Benötige Funktion tchart.ZoomPercent(x)
-
- Beiträge: 201
- Registriert: Do 24. Jan 2013, 21:22
Benötige Funktion tchart.ZoomPercent(x)
Hallo,
für die Portierung eines alten Delphi6-Programmes nach LAZ benötige ich eine tchart.ZoomPercent(x) - Funktion.
Die Oberfläche des alten Delphi6-Prog's hatte zusätzlich zu den Zoom-Mausfunktionen 3 Button's
(zoom+) , mit tchart.ZoomPercent(105) , für 105% .
(1:1) , mit tchart.undozoom (Delphi) , das geht ja mit tchart.zoomfull (Lazarus) .
(zoom-) , mit tchart.ZoomPercent(95) , für 95% .
Das Aussehen der Programmoberfläche soll indentisch mit dem Delphi-Orginal sein und die User sind es gewohnt diese Buttons zu nutzen.
Hat jemand eine Idee , wie man so eine Funktion bei (TChart unter Lazarus) umsetzten / nachbauen könnte?
Gruß
Frank
für die Portierung eines alten Delphi6-Programmes nach LAZ benötige ich eine tchart.ZoomPercent(x) - Funktion.
Die Oberfläche des alten Delphi6-Prog's hatte zusätzlich zu den Zoom-Mausfunktionen 3 Button's
(zoom+) , mit tchart.ZoomPercent(105) , für 105% .
(1:1) , mit tchart.undozoom (Delphi) , das geht ja mit tchart.zoomfull (Lazarus) .
(zoom-) , mit tchart.ZoomPercent(95) , für 95% .
Das Aussehen der Programmoberfläche soll indentisch mit dem Delphi-Orginal sein und die User sind es gewohnt diese Buttons zu nutzen.
Hat jemand eine Idee , wie man so eine Funktion bei (TChart unter Lazarus) umsetzten / nachbauen könnte?
Gruß
Frank
www.flz-vortex.de
Re: Benötige Funktion tchart.ZoomPercent(x)
Für spezielle Zoom-Anforderungen kannst du ein TChartToolset aufs Formular setzen und eines der Zoom-Tools verwenden:
Für Zoomen mit Hilfe eines externen Buttons, unabhängig von den ChartTools, kannst du die Eigenschaft LogicalExtent verändern. Das definiert den sichtbaren Ausschnitt des Charts, als DoubleRect mit den Punkten a und b für die linke untere und rechte obere Ecke.
- ZoomDrag = Aufziehen eines Zoom-Rechtecks mit der Maus,
- ZoomClick = Zoomen beim Klicken in den Chart,
- ZoomMouseWheel = Zoomen mit dem Mausrad.
Für Zoomen mit Hilfe eines externen Buttons, unabhängig von den ChartTools, kannst du die Eigenschaft LogicalExtent verändern. Das definiert den sichtbaren Ausschnitt des Charts, als DoubleRect mit den Punkten a und b für die linke untere und rechte obere Ecke.
Code: Alles auswählen
uses
TAChartUtils, TAGeometry;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
Zoom(1.05);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Zoom(1/1.05);
end;
procedure TForm1.Zoom(AFactor: Double);
var
ext: TDoubleRect;
oldW, oldH: Double;
newW, newH: Double;
dx, dy: Double;
begin
ext := Chart1.LogicalExtent;
oldW := ext.b.x - ext.a.x;
oldH := ext.b.y - ext.a.y;
newW := oldW * AFactor;
newH := oldH * AFactor;
dx := (newW - oldW) / 2;
dy := (newH - oldH) / 2;
Chart1.LogicalExtent := DoubleRect(ext.a.x-dx, ext.a.y-dy, ext.b.x+dx, ext.b.y+dy);
end;
-
- Beiträge: 201
- Registriert: Do 24. Jan 2013, 21:22
Re: Benötige Funktion tchart.ZoomPercent(x)
Hallo wp_xyz ,
vielen Dank für deine Hilfe.
Die Zoomfunktionen per TChartToolset kenne ich und nutze sie regelmäßig.
Mein Problem war halt eine Steuerungs-Möglichkeit von außen.
Habe deine Zoom-Funktion getestet und eingebaut , funzt prima.
Wäre es nicht schick , wenn man für zukünftige TCHart-Versionen die Methode tchart.ZoomPercent(x) generell einbaut?
Das würde es dann wieder etwas kompatibler machen.
Gruß
Frank
vielen Dank für deine Hilfe.
Die Zoomfunktionen per TChartToolset kenne ich und nutze sie regelmäßig.
Mein Problem war halt eine Steuerungs-Möglichkeit von außen.
Habe deine Zoom-Funktion getestet und eingebaut , funzt prima.
Wäre es nicht schick , wenn man für zukünftige TCHart-Versionen die Methode tchart.ZoomPercent(x) generell einbaut?
Das würde es dann wieder etwas kompatibler machen.
Gruß
Frank
www.flz-vortex.de
Re: Benötige Funktion tchart.ZoomPercent(x)
Frank Ranis hat geschrieben:Wäre es nicht schick , wenn man für zukünftige TCHart-Versionen die Methode tchart.ZoomPercent(x) generell einbaut?
Das würde es dann wieder etwas kompatibler machen.
Ich habe jetzt in der Unit TAChartTeeChart zwei Helper-Routinen ZoomPercent und UndoZoom eingefügt, die diese Methoden im TChart zur Verfügung stellen, wenn TAChartTeeChart in der Uses-Zeile enthalten ist. Da TAChart zu TeeChart ohnehin nicht sehr kompatibel ist, finde ich es nicht angebracht, diese Methoden direkt in TChart einzubauen, die recht naheliegend direkten TChart-Methoden entsprechen.
Im Unterschied zu meiner hier im Forum präsentierten Prozedur wird der Zoom-Faktor als Prozentsatz eingegeben (105), nicht als Faktor (1.05).
Hast du ZoomRect schon einmal angewendet? Das benötigt das Zoom-Rechteck in Pixel-Koordinaten, und das Beispiel der TeeChart-Hilfe erscheint mir falsch, da sich die als Rechteck verwendeten Koordinaten auf das gesamte Control zu beziehen scheinen, nicht aber auf den durch die Achsen aufgespannten Bereich:
Code: Alles auswählen
//Zoom in example:
Chart1.ZoomRect( Rect( 5,5,Chart1.Width-5,Chart1.Height-5 ) );
//Zoom out example:
Chart1.ZoomRect( Rect( -5,-5,Chart1.Width+5,Chart1.Height+5 ) );
-
- Beiträge: 201
- Registriert: Do 24. Jan 2013, 21:22
Re: Benötige Funktion tchart.ZoomPercent(x)
Hallo wp_xyz ,
Das ist super.
Kann man deine aktuelle Unit 'TAChartTeeChart' irgendwo herunterladen ?
Ist das dann in Zukunft Standard im Lazarus-Paket ?
Habe ich versucht , mein Compiler meckert aber , kennt er nicht .
Aktuell benutze ich immer nocht 'Lazarus 1.8.0 r56594 FPC 3.0.4 i386-win32-win32/win64' .
Gruß
Frank
wp_xyz hat geschrieben:
Ich habe jetzt in der Unit TAChartTeeChart zwei Helper-Routinen ZoomPercent und UndoZoom eingefügt, die diese Methoden im
TChart zur Verfügung stellen, wenn TAChartTeeChart in der Uses-Zeile enthalten ist. Da TAChart zu TeeChart ohnehin nicht sehr
kompatibel ist, finde ich es nicht angebracht, diese Methoden direkt in TChart einzubauen, die recht naheliegend direkten
TChart-Methoden entsprechen.
Das ist super.
Kann man deine aktuelle Unit 'TAChartTeeChart' irgendwo herunterladen ?
Ist das dann in Zukunft Standard im Lazarus-Paket ?
wp_xyz hat geschrieben:Hast du ZoomRect schon einmal angewendet? Das benötigt das Zoom-Rechteck in Pixel-Koordinaten, und das Beispiel der TeeChart-Hilfe erscheint mir falsch, da sich die als Rechteck verwendeten Koordinaten auf das gesamte Control zu beziehen scheinen, nicht aber auf den durch die Achsen aufgespannten Bereich:
CODE: ALLES AUSWÄHLEN
//Zoom in example:
Chart1.ZoomRect( Rect( 5,5,Chart1.Width-5,Chart1.Height-5 ) );
//Zoom out example:
Chart1.ZoomRect( Rect( -5,-5,Chart1.Width+5,Chart1.Height+5 ) );
Habe ich versucht , mein Compiler meckert aber , kennt er nicht .
Aktuell benutze ich immer nocht 'Lazarus 1.8.0 r56594 FPC 3.0.4 i386-win32-win32/win64' .
Gruß
Frank
www.flz-vortex.de
Re: Benötige Funktion tchart.ZoomPercent(x)
Frank Ranis hat geschrieben:Hallo wp_xyz ,
Kann man deine aktuelle Unit 'TAChartTeeChart' irgendwo herunterladen ?
Ist das dann in Zukunft Standard im Lazarus-Paket ?
TAChartTeeChart gibt es schon lange. Die neue Version ist im Trunk enthalten und wird in v2.2 offiziell enthalten sein (ein neues Feature, daher kommt es noch nicht in die v2.0). Du kannst mal versuchen, die aktuelle Version von TAChartTeeChart unter https://svn.freepascal.org/cgi-bin/view ... ot=lazarus herunterzuladen und in dein Lazarus-Verzeichnis components/tachart zu kopieren (vorher ein Backup der alten Datei machen) und damit die IDE neu zu kompilieren. Ich kann nicht versprechen, ob sich die neue Version mit Laz 1.8 verträgt.
Frank Ranis hat geschrieben:Hallo wp_xyz ,wp_xyz hat geschrieben:Hast du ZoomRect schon einmal angewendet? [...]
Habe ich versucht , mein Compiler meckert aber , kennt er nicht .
Da hast du mich falsch verstanden. Ich meinte: ausprobiert mit Delphi, nicht mit Lazarus. In Lazarus' TAChart gibt es ZoomRect nicht, weil die übergebenen Parameter für mich unsinnig sind.
-
- Beiträge: 201
- Registriert: Do 24. Jan 2013, 21:22
Re: Benötige Funktion tchart.ZoomPercent(x)
Hallo wp_xyz,
Ja , falsch verstanden.
ZoomRect brauch dann aber auch nicht mehr , weil ich ja vom Delphi weg zum LAZ gewechselt bin.
Ich möchte ja mit all meinen alten Projekten umziehen und da im Delphi-Prog das chart.zoompercent(x) benutzt wurde , welches
ja dort prima funzte , war das halt beim Portieren aufgefallen .
Genau das habe ich jetzt gemacht.
1) Unit TAChartTeeChart von
https://svn.freepascal.org/cgi-bin/view ... ot=lazarus
gesaugt.
2) Die alte Unit TAChartTeeChart.pas in TAChartTeeChart_alt.pas umbenannt
3) Deine aktuelle TAChartTeeChart.pas eingefügt und Lazarus neu kompiliert.
4) Im Programm , unter Uses die TAChartTeeChart eingetragen .
Es funzt ohne Macken (abwärtskompatibel , genial , genial) , ich bin begeistert , Du bist ein Held .
Gruß
Frank
wp_xyz hat geschrieben:Da hast du mich falsch verstanden. Ich meinte: ausprobiert mit Delphi, nicht mit Lazarus.
In Lazarus' TAChart gibt es ZoomRect nicht, weil die übergebenen Parameter für mich unsinnig sind.
Ja , falsch verstanden.
ZoomRect brauch dann aber auch nicht mehr , weil ich ja vom Delphi weg zum LAZ gewechselt bin.
Ich möchte ja mit all meinen alten Projekten umziehen und da im Delphi-Prog das chart.zoompercent(x) benutzt wurde , welches
ja dort prima funzte , war das halt beim Portieren aufgefallen .
wp_xyz hat geschrieben:TAChartTeeChart gibt es schon lange.
Die neue Version ist im Trunk enthalten und wird in v2.2 offiziell enthalten sein (ein neues Feature, daher kommt es noch nicht in
die v2.0). Du kannst mal versuchen, die aktuelle Version von TAChartTeeChart unter https://svn.freepascal.org/cgi-bin/view ...
ot=lazarus herunterzuladen und in dein Lazarus-Verzeichnis components/tachart zu kopieren (vorher ein Backup der alten Datei
machen) und damit die IDE neu zu kompilieren. Ich kann nicht versprechen, ob sich die neue Version mit Laz 1.8 verträgt.
Genau das habe ich jetzt gemacht.
1) Unit TAChartTeeChart von
https://svn.freepascal.org/cgi-bin/view ... ot=lazarus
gesaugt.
2) Die alte Unit TAChartTeeChart.pas in TAChartTeeChart_alt.pas umbenannt
3) Deine aktuelle TAChartTeeChart.pas eingefügt und Lazarus neu kompiliert.
4) Im Programm , unter Uses die TAChartTeeChart eingetragen .
Es funzt ohne Macken (abwärtskompatibel , genial , genial) , ich bin begeistert , Du bist ein Held .
Code: Alles auswählen
procedure TForm1.Button5Click(Sender: TObject);
begin
Chart1.ZoomPercent(105);
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
Chart1.ZoomPercent(95);
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
chart1.UndoZoom;
end;
Gruß
Frank
www.flz-vortex.de