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