Hi!
Habe folgendes Problem. Ich habe eine visuelle Komponente, die ich von TCustomPanel ableite.
Nun will ich in diese Ausgabe der Komponente auch hinein- bzw. hinauszoomen können. Damit man
aber nun die neu berechnete Ausgabe auch komplett bewundern kann, bräuchte man Scrollbalken, um
den kompletten Bereich anschauen zu können. Die hab ich auch angelegt, die werden auch angezeigt,
aber wenn ich den Regler verschiebe tut sich nichts am Bild. Ich hab bestimmt hundert Dinge vergessen
zu beachten. Könnte mir da vielleicht jemand auf die Sprünge helfen? Das wäre toll, danke!!
Delphi-Quellcode:
constructor Create(AOwner: TComponent);
begin
ScrollBarHor := TScrollBar.Create(Self);
ScrollBarHor.Parent := Self;
ScrollBarHor.Align := alBottom;
ScrollBarHor.Kind := sbHorizontal;
ScrollBarHor.Visible := False;
ScrollBarHor.SmallChange := 5;
ScrollBarHor.LargeChange := 50;
ScrollBarHor.OnScroll := ScrollBarHorScroll;
ScrollBarVer := TScrollBar.Create(Self);
ScrollBarVer.Parent := Self;
ScrollBarVer.Align := alRight;
ScrollBarVer.Kind := sbVertical;
ScrollBarVer.Visible := False;
ScrollBarVer.SmallChange := 5;
ScrollBarVer.LargeChange := 50;
ScrollBarVer.OnScroll := ScrollBarVerScroll;
end;
Delphi-Quellcode:
procedure TCustomTreemapChart.Zoom;
var
Scale: Double;
Image: TImage;
begin
IsZoom := True;
ScrollBarVer.Visible := True;
ScrollBarHor.Visible := True;
Scale := (100 + ZoomFactor) / 100;
ZoomRect.Left := 0;
ZoomRect.Top := 0;
ZoomRect.Right := Round(Width * Scale);
ZoomRect.Bottom := Round(Height * Scale);
if (ZoomRect.Bottom < Height) or (ZoomRect.Right < Width) then
begin
ScrollBarVer.Visible := False;
ScrollBarHor.Visible := False;
IsZoom := False;
ZoomRect := Rect(0,0,Width,Height);
end;
if (ZoomRect.Bottom > 3*Height) or (ZoomRect.Right > 3*Width) then
begin
IsZoom := False;
exit;
end;
DoublebufferedBitmap.Height := ZoomRect.Bottom - ScrollBarHor.Height;
DoublebufferedBitmap.Width := ZoomRect.Right - ScrollBarVer.Width;
ScrollBarHor.Min := 0;
ScrollBarHor.Max := DoublebufferedBitmap.Width;
ScrollBarVer.Min := 0;
ScrollBarVer.Max := DoublebufferedBitmap.Height;
DrawChart(DoublebufferedBitmap.Canvas, ZoomRect);
Canvas.Draw(0,0, DoublebufferedBitmap);
end;