BottomRight des sichtbaren Bereichs einer ScrollBox?
Ich probier' jetzt schon eine ganze Weils das BottomRight des sichtbaren Bereichs einer ScrollBox zu finden? :gruebel:
Delphi-Quellcode:
RangeRect.Left := ScrollBox.HorzScrollBar.Position;
RangeRect.Top := ScrollBox.VertScrollBar.Position; RangeRect.Right := f(ScrollBox.HorzScrollBar.Range ?, ScrollBox.HorzScrollBar.Position ?, ScrollBox.ClientRect ?) RangeRect.Bottom := f(..); |
AW: BottomRight des sichtbaren Bereichs einer ScrollBox?
Versuch mal so:
Delphi-Quellcode:
RangeRect := ScrollBox.ClientRect;
dx := ScrollBox.HorzScrollBar.Position - RangeRect.Left; dy := ScrollBox.VertScrollBar.Position - RangeRect.Top; Inc(RangeRect.Left, dx); Inc(RangeRect.Right, dx); Inc(RangeRect.Top, dy); Inc(RangeRect.Bottom, dy); |
AW: BottomRight des sichtbaren Bereichs einer ScrollBox?
Das sieht doch schon mal sehr gut aus. Thanx!
|
AW: BottomRight des sichtbaren Bereichs einer ScrollBox?
Heut' nacht ist mir noch das eingefallen:
Delphi-Quellcode:
function ClientRangeRect(Sender: TObject): TRect;
var O: TPoint; begin // Sender = Client, Parent = ScrollBox, Result in Client-Koordinaten; O := TControl(Sender).ClientToParent(Point(0, 0), TControl(Sender).Parent); Result.TopLeft := TControl(Sender).Parent.ClientRect.TopLeft; Result.BottomRight := TControl(Sender).Parent.ClientRect.BottomRight; Result.Top := Result.Top - O.Y; Result.Left := Result.Left - O.X; Result.Bottom := Result.Bottom - O.Y; Result.Right := Result.Right - O.X; end; |
AW: BottomRight des sichtbaren Bereichs einer ScrollBox?
Wenn du mindestens eine Instanz von
Delphi-Quellcode:
haben musst, warum dann
TControl
Delphi-Quellcode:
? :gruebel:
Sender : TObject
So sparst du dir doch das Casten und ersparst dir potentielle Programmier/Laufzeitfehler, und dokumentiert ist das dann auch (ich muss eine
Delphi-Quellcode:
-Instanz haben)
TControl
Delphi-Quellcode:
Eine Umbenennung von
function ClientRangeRect(Sender: TControl): TRect;
var O: TPoint; begin // Sender = Client, Parent = ScrollBox, Result in Client-Koordinaten; O := Sender.ClientToParent( Point(0, 0), Sender.Parent ); Result := Sender.Parent.ClientRect; Result.Inflate( O.X, O.Y, -O.X, -O.Y ); end;
Delphi-Quellcode:
in
Sender
Delphi-Quellcode:
würde sich dort auch noch besser machen (Lesbarkeit)
AControl
|
AW: BottomRight des sichtbaren Bereichs einer ScrollBox?
Sehr schön. Bin eigentlich auch kein Freund von exzessiven Casts und die InflateRect Variante mit 4 Parametern kannte ich nicht. Thanx!
Man kann am Ende der function noch ergänzen (erforderlich, falls keine Scrollbars).
Delphi-Quellcode:
Result.Bottom := Min(Result.Bottom, Sender.ClientHeight);
Result.Right := Min(Result.Right, Sender.ClientWidth); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz