Einzelnen Beitrag anzeigen

daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#1

Probleme mit TScrollBars...

  Alt 11. Dez 2007, 11:51
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;
  Mit Zitat antworten Zitat