Hi sirThornberry,
das werd ich mal testen. Ich habe mich bis jetzt mit folgendem Trick beholfen:
- Move und Size wie erläutert,
- in Paint SetBounts mit korrogierten Positions- und Größenwerten aufgerufen.
Delphi-Quellcode:
procedure TBaseCustomControl.Paint;
begin
inherited;
Canvas.Font.Assign(self.Font);
RastControl;
end;
procedure TBaseCustomControl.RastControl;
var Rest : Extended;
ALeft, ATop, AHeight, AWidth : Integer;
begin
if not FGrid then
Exit;
ALeft := ((Left Div FGridWidth) * FGridWidth) + (Round(Frac(Left/FGridWidth))*FGridWidth);
ATop := ((Top Div FGridWidth) * FGridWidth) + (Round(Frac(Top/FGridWidth))*FGridWidth);
AWidth := ((Width Div FGridWidth) * FGridWidth) + (Round(Frac(Width/FGridWidth))*FGridWidth);
AHeight := ((Height Div FGridWidth) * FGridWidth) + (Round(Frac(Height/FGridWidth))*FGridWidth);
SetBounds(ALeft, ATop, AWidth, AHeight);
end;
FGrid ist ein boolsches Property (Raster an aus) und FGridWidth ist natürlich die Gitterweite.
Erstaunlicher weise passiert jetzt folgendes. Bei Move wird während der Bewegung nicht gerastert, aber beim Ablegen auf das Raster korrigiert. Das hab ich auch so erwartet, wollte ich aber nicht haben.
Bei Größenänderung springt die gezogene Seite in Rasterschritten während des ziehens auf die neue Größe. Das wollte ich so haben, hab ich aber mit diesem Code nicht erwartet.
Na, ich probiers mal weiter.
Gruß oki