Einzelnen Beitrag anzeigen

madina

Registriert seit: 1. Nov 2005
153 Beiträge
 
#1

Wie Rectangle im TForm zentrieren ?

  Alt 23. Aug 2009, 14:28
Hallo,

Aufgabe:
Ich habe ein TForm mit TPaintBox, TScrollBox und versuche einen MarkierungsRectangle mit dem Maus vom Koordinaten (StartPlace.X/Y bis EndPlace.X/Y) über den TPaintBox zu zeichnen und genau diesen Rectangle versuche ich je nach Größe der Höhe oder Breite an dem TForm.Client anzupassen und zentriert ausgeben. Um den TPaintBox bis zum TFormRänder gebe ich einen Rahmen (cAbstRahmen=10) aus.

Problem:
wenn ich cAbstRahmen=0 setze, wird mit dem nachfolgenden DelphiSource der MarkierungsRectangle genau zentriert ausgegeben. Wenn ich (cAbstRahmen=10) setze, wird mit dem nachfolgenden DelphiSource der MarkierungsRectangle nicht zentriert sondern mit einem Abstand ±links/rechts oder ±oben/unten ausgegeben, was ich gar nicht verstehen.

Frage ?:
wie kann ich mit (cAbstRahmen=10) MarkierungsRectangle zentriert ausgeben ?

Delphi-Quellcode:
Procedure TfrmPrintPreview.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if (StartPlace.X<>EndPlace.X) and (StartPlace.Y<>EndPlace.Y) then
    begin
      // SkalierungBrechnen
      if ((EndPlace.X-StartPlace.X)>(EndPlace.Y-StartPlace.Y)) then iScal:= frmPrintPreview.ClientWidth div (EndPlace.X-StartPlace.X){+(frmPrintPreview.ClientWidth mod (EndPlace.X-StartPlace.X)) div 2} // BreiteGroß, ZoomFaktorX
      else iScal:= Trunc(frmPrintPreview.ClientHeight/(EndPlace.Y-StartPlace.Y)); // HöheGröß, ZoomFaktorY

      PaintBox1.Visible:= False;
        // Skalierung
        PaintBox1.Width := PaintBox1.Width *iScal;
        PaintBox1.Height:= PaintBox1.Height*iScal;
        // Rahmen
        PaintBox1.Left:= cAbstRahmen;
        PaintBox1.Top := cAbstRahmen;
      PaintBox1.Visible:= True;

      // Rectanglemitte zum Zentrieren
      iX:= iSca*Trunc(StartPlace.X+cAbstRahmen+(EndPlace.X-StartPlace.X) div 2+(EndPlace.X-StartPlace.X) mod 2);
      iY:= iSca*Trunc(StartPlace.Y+cAbstRahmen+(EndPlace.Y-StartPlace.Y) div 2+(EndPlace.Y-StartPlace.Y) mod 2);
      // ScrollBox Steuerung zum Zentrieren
      ScrollBox1.HorzScrollBar.Position:= Abs(iX)-ScrollBox1.ClientWidth div 2-ScrollBox1.ClientWidth mod 2; //
      ScrollBox1.VertScrollBar.Position:= Abs(iY)-ScrollBox1.ClientHeight div 2-ScrollBox1.ClientHeight mod 2; //
   end
end;
mfg
mfg
madina
  Mit Zitat antworten Zitat